mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-19 15:31:13 +01:00
Sync is now essentially fully atomic on the client side
Sync now aborts on most errors instead of continuing Sync now holds screen, CPU and WIFI locks
This commit is contained in:
@@ -571,6 +571,8 @@ class LibraryController(
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = null
|
||||
oldSyncStatus = null
|
||||
//Clear flags
|
||||
releaseSyncLocks()
|
||||
}
|
||||
|
||||
private fun buildDialog() = activity?.let {
|
||||
@@ -586,13 +588,25 @@ class LibraryController(
|
||||
?.show()
|
||||
}
|
||||
|
||||
private fun takeSyncLocks() {
|
||||
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
||||
private fun releaseSyncLocks() {
|
||||
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
||||
private fun updateSyncStatus(status: FavoritesSyncStatus) {
|
||||
when(status) {
|
||||
is FavoritesSyncStatus.Idle -> {
|
||||
releaseSyncLocks()
|
||||
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = null
|
||||
}
|
||||
is FavoritesSyncStatus.Error -> {
|
||||
releaseSyncLocks()
|
||||
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = buildDialog()
|
||||
?.title("Favorites sync error")
|
||||
@@ -606,6 +620,8 @@ class LibraryController(
|
||||
}
|
||||
is FavoritesSyncStatus.Processing,
|
||||
is FavoritesSyncStatus.Initializing -> {
|
||||
takeSyncLocks()
|
||||
|
||||
if(favSyncDialog == null || (oldSyncStatus != null
|
||||
&& oldSyncStatus !is FavoritesSyncStatus.Initializing
|
||||
&& oldSyncStatus !is FavoritesSyncStatus.Processing))
|
||||
@@ -613,24 +629,6 @@ class LibraryController(
|
||||
|
||||
favSyncDialog?.setContent(status.message)
|
||||
}
|
||||
is FavoritesSyncStatus.Complete -> {
|
||||
favSyncDialog?.dismiss()
|
||||
|
||||
if(status.errors.isNotEmpty()) {
|
||||
favSyncDialog = buildDialog()
|
||||
?.title("Favorites sync complete with errors")
|
||||
?.content("Some errors occurred during the sync process:\n\n"
|
||||
+ status.errors.joinToString("\n"))
|
||||
?.cancelable(false)
|
||||
?.positiveText("Ok")
|
||||
?.onPositive { _, _ ->
|
||||
presenter.favoritesSync.status.onNext(FavoritesSyncStatus.Idle())
|
||||
}
|
||||
?.show()
|
||||
} else {
|
||||
presenter.favoritesSync.status.onNext(FavoritesSyncStatus.Idle())
|
||||
}
|
||||
}
|
||||
}
|
||||
oldSyncStatus = status
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.util.toast
|
||||
import exh.favorites.FavoritesIntroDialog
|
||||
import exh.favorites.LocalFavoritesStorage
|
||||
import exh.ui.login.LoginController
|
||||
import exh.util.trans
|
||||
import rx.android.schedulers.AndroidSchedulers
|
||||
import rx.schedulers.Schedulers
|
||||
|
||||
@@ -163,7 +164,13 @@ class SettingsEhController : SettingsController() {
|
||||
.content("Resetting the sync state can cause your next sync to be extremely slow.")
|
||||
.positiveText("Yes")
|
||||
.onPositive { _, _ ->
|
||||
LocalFavoritesStorage().clearSnapshots()
|
||||
LocalFavoritesStorage().apply {
|
||||
getRealm().use {
|
||||
it.trans {
|
||||
clearSnapshots(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
it.toast("Sync state reset", Toast.LENGTH_LONG)
|
||||
}
|
||||
.negativeText("No")
|
||||
|
||||
Reference in New Issue
Block a user