1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-07 23:38:40 +01:00

fixed sync filter flow

This commit is contained in:
Mariotaku Lee 2017-01-01 02:03:43 +08:00
parent e0826633bb
commit 978bc2198b
2 changed files with 34 additions and 29 deletions

View File

@ -4,6 +4,7 @@ import android.content.ContentResolver
import android.net.Uri
import org.mariotaku.ktextension.addAllEnhanced
import org.mariotaku.ktextension.convert
import org.mariotaku.ktextension.isNullOrEmpty
import org.mariotaku.ktextension.map
import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.model.*
@ -152,29 +153,18 @@ fun FiltersData.parse(parser: XmlPullParser) {
fun FiltersData.addAll(data: FiltersData, ignoreDuplicates: Boolean = false): Boolean {
var changed: Boolean = false
if (this.users != null) {
initFields()
if (data.users != null) {
changed = changed or this.users.addAllEnhanced(collection = data.users, ignoreDuplicates = ignoreDuplicates)
} else {
this.users = data.users
changed = true
}
if (this.keywords != null) {
if (data.keywords != null) {
changed = changed or this.keywords.addAllEnhanced(collection = data.keywords, ignoreDuplicates = ignoreDuplicates)
} else {
this.keywords = data.keywords
changed = true
}
if (this.sources != null) {
if (data.sources != null) {
changed = changed or this.sources.addAllEnhanced(collection = data.sources, ignoreDuplicates = ignoreDuplicates)
} else {
this.sources = data.sources
changed = true
}
if (this.links != null) {
if (data.links != null) {
changed = changed or this.links.addAllEnhanced(collection = data.links, ignoreDuplicates = ignoreDuplicates)
} else {
this.links = data.links
changed = true
}
return changed
}
@ -188,6 +178,11 @@ fun FiltersData.removeAll(data: FiltersData): Boolean {
return changed
}
fun FiltersData.isEmpty(): Boolean {
return users.isNullOrEmpty() && keywords.isNullOrEmpty() && sources.isNullOrEmpty()
&& links.isNullOrEmpty()
}
fun FiltersData.initFields() {
if (users == null) {
users = ArrayList()

View File

@ -19,7 +19,7 @@ abstract class FileBasedFiltersDataSyncHelper(val context: Context) {
}
val remoteModified = remoteFilters.loadFromRemote(snapshotFile.lastModified())
if (BuildConfig.DEBUG && !remoteModified) {
Log.d(LOGTAG, "Remote filter unchanged, skipped downloading")
Log.d(LOGTAG, "Remote filter unchanged, skip download")
}
val filters: FiltersData = FiltersData().apply {
read(context.contentResolver)
@ -28,27 +28,37 @@ abstract class FileBasedFiltersDataSyncHelper(val context: Context) {
var localModified = false
val deletedFilters: FiltersData? = try {
FileReader(snapshotFile).use {
val result = FiltersData()
val remoteAddedFilters = FiltersData()
val remoteDeletedFilters = FiltersData()
try {
val snapshot = FileReader(snapshotFile).use {
val snapshot = FiltersData()
val parser = Xml.newPullParser()
parser.setInput(it)
result.parse(parser)
localModified = localModified or (result != filters)
result.removeAll(filters)
return@use result
snapshot.parse(parser)
return@use snapshot
}
if (remoteModified) {
remoteAddedFilters.addAll(remoteFilters)
remoteAddedFilters.removeAll(snapshot)
remoteDeletedFilters.addAll(snapshot)
remoteDeletedFilters.removeAll(remoteFilters)
}
localModified = localModified or (snapshot != filters)
} catch (e: FileNotFoundException) {
remoteAddedFilters.addAll(remoteFilters)
remoteAddedFilters.removeAll(filters)
localModified = true
null
}
if (remoteModified) {
localModified = localModified or filters.addAll(remoteFilters, true)
}
filters.addAll(remoteAddedFilters, true)
filters.removeAll(remoteDeletedFilters)
if (deletedFilters != null) {
localModified = localModified or filters.removeAll(deletedFilters)
localModified = !remoteAddedFilters.isEmpty() || !remoteDeletedFilters.isEmpty()
}
filters.write(context.contentResolver)