improved data sync save to local part
This commit is contained in:
parent
d90b84fcc6
commit
2aca2be609
|
@ -23,6 +23,7 @@ import android.content.ContentResolver;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import org.mariotaku.sqliteqb.library.ArgsArray;
|
import org.mariotaku.sqliteqb.library.ArgsArray;
|
||||||
|
@ -41,14 +42,14 @@ public class ContentResolverUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> int bulkDelete(@NonNull final ContentResolver resolver, @NonNull final Uri uri,
|
public static <T> int bulkDelete(@NonNull final ContentResolver resolver, @NonNull final Uri uri,
|
||||||
@NonNull final String inColumn, final Collection<T> colValues,
|
@NonNull final String inColumn, @Nullable final Collection<T> colValues,
|
||||||
final String extraWhere) {
|
final String extraWhere) {
|
||||||
if (colValues == null) return 0;
|
if (colValues == null) return 0;
|
||||||
return bulkDelete(resolver, uri, inColumn, colValues.toArray(), extraWhere);
|
return bulkDelete(resolver, uri, inColumn, colValues.toArray(), extraWhere);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int bulkDelete(@NonNull final ContentResolver resolver, @NonNull final Uri uri,
|
public static int bulkDelete(@NonNull final ContentResolver resolver, @NonNull final Uri uri,
|
||||||
@NonNull final String inColumn, final Object colValues,
|
@NonNull final String inColumn, @Nullable final Object colValues,
|
||||||
final String extraWhere) {
|
final String extraWhere) {
|
||||||
if (colValues == null) return 0;
|
if (colValues == null) return 0;
|
||||||
final int colValuesLength = Array.getLength(colValues), blocksCount = colValuesLength / MAX_BULK_COUNT + 1;
|
final int colValuesLength = Array.getLength(colValues), blocksCount = colValuesLength / MAX_BULK_COUNT + 1;
|
||||||
|
|
|
@ -5,6 +5,8 @@ import android.util.Xml
|
||||||
import org.mariotaku.ktextension.nullableContentEquals
|
import org.mariotaku.ktextension.nullableContentEquals
|
||||||
import org.mariotaku.twidere.extension.model.*
|
import org.mariotaku.twidere.extension.model.*
|
||||||
import org.mariotaku.twidere.model.FiltersData
|
import org.mariotaku.twidere.model.FiltersData
|
||||||
|
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||||
|
import org.mariotaku.twidere.util.content.ContentResolverUtils
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
@ -45,8 +47,19 @@ abstract class FileBasedFiltersDataSyncAction<DownloadSession : Closeable, Uploa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun FiltersData.saveToLocal() {
|
override fun addToLocal(data: FiltersData) {
|
||||||
this.write(context.contentResolver, deleteOld = true)
|
data.write(context.contentResolver, deleteOld = false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun removeFromLocal(data: FiltersData) {
|
||||||
|
ContentResolverUtils.bulkDelete(context.contentResolver, Filters.Users.CONTENT_URI,
|
||||||
|
Filters.Users.USER_KEY, data.users?.map { it.userKey }, null)
|
||||||
|
ContentResolverUtils.bulkDelete(context.contentResolver, Filters.Keywords.CONTENT_URI,
|
||||||
|
Filters.Keywords.VALUE, data.keywords?.map { it.value }, null)
|
||||||
|
ContentResolverUtils.bulkDelete(context.contentResolver, Filters.Sources.CONTENT_URI,
|
||||||
|
Filters.Sources.VALUE, data.sources?.map { it.value }, null)
|
||||||
|
ContentResolverUtils.bulkDelete(context.contentResolver, Filters.Links.CONTENT_URI,
|
||||||
|
Filters.Links.VALUE, data.links?.map { it.value }, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newData(): FiltersData {
|
override fun newData(): FiltersData {
|
||||||
|
|
|
@ -19,15 +19,22 @@ abstract class FileBasedPreferencesValuesSyncAction<DownloadSession : Closeable,
|
||||||
|
|
||||||
override final val whatData: String = processor.whatData
|
override final val whatData: String = processor.whatData
|
||||||
|
|
||||||
override final fun MutableMap<String, String>.saveToLocal() {
|
override fun addToLocal(data: MutableMap<String, String>) {
|
||||||
val editor = preferences.edit()
|
val editor = preferences.edit()
|
||||||
editor.clear()
|
for ((k, v) in data) {
|
||||||
for ((k, v) in this) {
|
|
||||||
processor.saveValue(editor, k, v)
|
processor.saveValue(editor, k, v)
|
||||||
}
|
}
|
||||||
editor.apply()
|
editor.apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun removeFromLocal(data: MutableMap<String, String>) {
|
||||||
|
val editor = preferences.edit()
|
||||||
|
for ((k, v) in data) {
|
||||||
|
editor.remove(k)
|
||||||
|
}
|
||||||
|
editor.apply()
|
||||||
|
}
|
||||||
|
|
||||||
override final fun loadFromLocal(): MutableMap<String, String> {
|
override final fun loadFromLocal(): MutableMap<String, String> {
|
||||||
val result = HashMap<String, String>()
|
val result = HashMap<String, String>()
|
||||||
for ((k, v) in preferences.all) {
|
for ((k, v) in preferences.all) {
|
||||||
|
|
|
@ -64,16 +64,16 @@ abstract class SingleFileBasedDataSyncAction<Data, SnapshotStore, DownloadSessio
|
||||||
if (remoteModified) {
|
if (remoteModified) {
|
||||||
if (remoteDeletedData != null) {
|
if (remoteDeletedData != null) {
|
||||||
localData.removeAllData(remoteDeletedData)
|
localData.removeAllData(remoteDeletedData)
|
||||||
|
removeFromLocal(remoteDeletedData)
|
||||||
localModified = localModified or !remoteDeletedData.isDataEmpty()
|
localModified = localModified or !remoteDeletedData.isDataEmpty()
|
||||||
}
|
}
|
||||||
if (remoteAddedData != null) {
|
if (remoteAddedData != null) {
|
||||||
localData.addAllData(remoteAddedData)
|
localData.addAllData(remoteAddedData)
|
||||||
|
addToLocal(remoteAddedData)
|
||||||
localModified = localModified or !remoteAddedData.isDataEmpty()
|
localModified = localModified or !remoteAddedData.isDataEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
localData.saveToLocal()
|
|
||||||
|
|
||||||
val localModifiedTime = System.currentTimeMillis()
|
val localModifiedTime = System.currentTimeMillis()
|
||||||
|
|
||||||
if (shouldCreateRemote || localModified) {
|
if (shouldCreateRemote || localModified) {
|
||||||
|
@ -125,7 +125,9 @@ abstract class SingleFileBasedDataSyncAction<Data, SnapshotStore, DownloadSessio
|
||||||
// Local save/load operations
|
// Local save/load operations
|
||||||
protected abstract fun loadFromLocal(): Data
|
protected abstract fun loadFromLocal(): Data
|
||||||
|
|
||||||
protected abstract fun Data.saveToLocal()
|
protected abstract fun addToLocal(data: Data)
|
||||||
|
|
||||||
|
protected abstract fun removeFromLocal(data: Data)
|
||||||
|
|
||||||
// Remote operations
|
// Remote operations
|
||||||
@Throws(FileNotFoundException::class, IOException::class)
|
@Throws(FileNotFoundException::class, IOException::class)
|
||||||
|
|
Loading…
Reference in New Issue