diff --git a/app/src/main/java/io/legado/app/data/dao/BookDao.kt b/app/src/main/java/io/legado/app/data/dao/BookDao.kt index eb72fab13f..fea86dfe30 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookDao.kt @@ -84,8 +84,8 @@ interface BookDao { @Query("SELECT * FROM books WHERE (`group` & :group) > 0") fun getBooksByGroup(group: Long): List - @Query("SELECT * FROM books where local_modified > cloud_modified") - fun getNeedPush(): List + @get:Query("SELECT * FROM books where local_modified > cloud_modified") + val needPush: List @Query("update books set cloud_modified = :cloudModified, local_modified = :cloudModified where bookUrl = :bookUrl and local_modified <= :cloudModified") fun markSynced(bookUrl: String, cloudModified: Long) diff --git a/app/src/main/java/io/legado/app/help/sync/ConflictResolver.kt b/app/src/main/java/io/legado/app/help/sync/ConflictResolver.kt index 9982a095cd..392d4c7522 100644 --- a/app/src/main/java/io/legado/app/help/sync/ConflictResolver.kt +++ b/app/src/main/java/io/legado/app/help/sync/ConflictResolver.kt @@ -8,6 +8,7 @@ import io.legado.app.data.entities.ReadRecord import io.legado.app.data.entities.SyncConflict import io.legado.app.lib.webdav.WebDavFile import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonObject import io.legado.app.utils.sha1Encode import java.io.File diff --git a/app/src/main/java/io/legado/app/help/sync/SyncClient.kt b/app/src/main/java/io/legado/app/help/sync/SyncClient.kt index d09b5df973..68b9aa9853 100644 --- a/app/src/main/java/io/legado/app/help/sync/SyncClient.kt +++ b/app/src/main/java/io/legado/app/help/sync/SyncClient.kt @@ -12,6 +12,7 @@ import io.legado.app.lib.webdav.Authorization import io.legado.app.lib.webdav.WebDav import io.legado.app.lib.webdav.WebDavFile import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonObject import io.legado.app.utils.sha1Encode /** @@ -208,7 +209,7 @@ object SyncClient { // ============================ 冲突处理 ============================ - private fun pullUpdate( + private suspend fun pullUpdate( file: WebDavFile, local: Any?, lastPullAt: Long, @@ -331,11 +332,11 @@ object SyncClient { // ============================ 工具 ============================ - private fun listRemoteFiles(url: String): List { + private suspend fun listRemoteFiles(url: String): List { return webDav(url).listFiles() } - private fun listRemoteFiles(type: DataSyncType): List { + private suspend fun listRemoteFiles(type: DataSyncType): List { return listRemoteFiles(dirUrl(type)) } diff --git a/app/src/main/java/io/legado/app/help/sync/SyncLedger.kt b/app/src/main/java/io/legado/app/help/sync/SyncLedger.kt index e3b2c723a0..59a7945f54 100644 --- a/app/src/main/java/io/legado/app/help/sync/SyncLedger.kt +++ b/app/src/main/java/io/legado/app/help/sync/SyncLedger.kt @@ -2,6 +2,8 @@ package io.legado.app.help.sync import io.legado.app.help.config.LocalConfig import io.legado.app.utils.putLong +import io.legado.app.utils.putString +import io.legado.app.utils.remove /** * 同步状态记录, 持久化到 LocalConfig 共享参数 diff --git a/app/src/main/java/io/legado/app/help/sync/SyncManager.kt b/app/src/main/java/io/legado/app/help/sync/SyncManager.kt index 4832d2d60b..0c7e82d3ad 100644 --- a/app/src/main/java/io/legado/app/help/sync/SyncManager.kt +++ b/app/src/main/java/io/legado/app/help/sync/SyncManager.kt @@ -2,7 +2,6 @@ package io.legado.app.help.sync import io.legado.app.help.AppWebDav import io.legado.app.help.coroutine.Coroutine -import io.legado.app.help.coroutine.onError import io.legado.app.utils.printOnDebug import io.legado.app.utils.toastOnUi import kotlinx.coroutines.sync.Mutex @@ -27,7 +26,7 @@ object SyncManager { syncAll() }.onError { it.printOnDebug() - it.toastOnUi() + appCtx.toastOnUi(it.localizedMessage) SyncLedger.lastResult = "同步失败: ${it.localizedMessage}" }.invokeOnCompletion { onFinish?.invoke() diff --git a/app/src/main/java/io/legado/app/help/sync/worker/WorkManagerHelper.kt b/app/src/main/java/io/legado/app/help/sync/worker/WorkManagerHelper.kt index 5502d1510e..e2fa1e8dab 100644 --- a/app/src/main/java/io/legado/app/help/sync/worker/WorkManagerHelper.kt +++ b/app/src/main/java/io/legado/app/help/sync/worker/WorkManagerHelper.kt @@ -27,7 +27,7 @@ object WorkManagerHelper { cancel(context) return } - val interval = SyncConfig.intervalMinutes.coerceAtLeast(MIN_INTERVAL) + val interval = SyncConfig.intervalMinutes.toLong().coerceAtLeast(MIN_INTERVAL) val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() diff --git a/app/src/main/java/io/legado/app/utils/MD5Utils.kt b/app/src/main/java/io/legado/app/utils/MD5Utils.kt index 76f65b8920..66c95fcff9 100644 --- a/app/src/main/java/io/legado/app/utils/MD5Utils.kt +++ b/app/src/main/java/io/legado/app/utils/MD5Utils.kt @@ -41,3 +41,5 @@ object MD5Utils { return SHA1Digester.digestHex(str) } } + +fun String.sha1Encode(): String = MD5Utils.sha1Encode(this)