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:
parent
e0826633bb
commit
978bc2198b
@ -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()
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user