Show number of messages per backup

This commit is contained in:
Moez Bhatti
2018-08-29 23:16:41 -04:00
parent 3d352967c2
commit baecdd9348
6 changed files with 39 additions and 13 deletions
@@ -52,9 +52,18 @@ class BackupRepositoryImpl @Inject constructor(
}
data class Backup(
val messageCount: Int = 0,
val messages: List<BackupMessage> = listOf()
)
/**
* Simpler version of [Backup] which allows us to read certain fields from the backup without
* needing to parse the entire file
*/
data class BackupMetadata(
val messageCount: Int = 0
)
data class BackupMessage(
val type: Int,
val address: String,
@@ -76,11 +85,13 @@ class BackupRepositoryImpl @Inject constructor(
// If a backup or restore is already running, don't do anything
if (isBackupOrRestoreRunning()) return
var messageCount = 0
// Map all the messages into our object we'll use for the Json mapping
val backupMessages = Realm.getDefaultInstance().use { realm ->
// Get the messages from realm
val messages = realm.where(Message::class.java).sort("date").findAll().createSnapshot()
val messageCount = messages.size
messageCount = messages.size
// Map the messages to the new format
val startTime = System.currentTimeMillis()
@@ -103,7 +114,7 @@ class BackupRepositoryImpl @Inject constructor(
// Convert the data to json
val adapter = moshi.adapter(Backup::class.java).indent("\t")
val json = adapter.toJson(Backup(backupMessages)).toByteArray()
val json = adapter.toJson(Backup(messageCount, backupMessages)).toByteArray()
try {
// Create the directory and file
@@ -129,7 +140,7 @@ class BackupRepositoryImpl @Inject constructor(
protocol = 0,
serviceCenter = null,
locked = message.locked,
subId = message.subId)
subId = message.subId)
override fun getBackupProgress(): Observable<BackupRepository.Progress> = backupProgress
@@ -139,9 +150,14 @@ class BackupRepositoryImpl @Inject constructor(
.observeOn(Schedulers.computation())
.map { files ->
files.map { file ->
val backup = Okio.buffer(Okio.source(file)).use { source ->
moshi.adapter(BackupMetadata::class.java).fromJson(source)
}
val path = file.path
val date = file.lastModified()
val messages = 0
val messages = backup?.messageCount ?: 0
val size = file.length()
BackupFile(path, date, messages, size)
}
@@ -155,9 +171,10 @@ class BackupRepositoryImpl @Inject constructor(
restoreProgress.onNext(BackupRepository.Progress.Running(0, "Parsing backup"))
val file = File(filePath)
val source = Okio.buffer(Okio.source(file))
val backup = Okio.buffer(Okio.source(file)).use { source ->
moshi.adapter(Backup::class.java).fromJson(source)
}
val backup = moshi.adapter(Backup::class.java).fromJson(source)
val messageCount = backup?.messages?.size ?: 0
backup?.messages?.forEachIndexed { index, message ->
@@ -23,7 +23,7 @@ import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
import java.io.File
class QkFileObserver(path: String) : FileObserver(path) {
class QkFileObserver(path: String) : FileObserver(path, CREATE or DELETE or MODIFY) {
private val subject = BehaviorSubject.createDefault<String>(path).toSerialized()