mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-13 04:28:55 +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:
@@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.source.online.LewdSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import exh.metadata.EX_DATE_FORMAT
|
||||
import exh.metadata.ignore
|
||||
import exh.metadata.models.ExGalleryMetadata
|
||||
import exh.metadata.models.Tag
|
||||
import exh.metadata.nullIfBlank
|
||||
@@ -20,6 +19,7 @@ import exh.metadata.parseHumanReadableByteCount
|
||||
import exh.ui.login.LoginController
|
||||
import exh.util.UriFilter
|
||||
import exh.util.UriGroup
|
||||
import exh.util.ignore
|
||||
import exh.util.urlImportFetchSearchManga
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Headers
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.content.IntentFilter
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Resources
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.wifi.WifiManager
|
||||
import android.os.PowerManager
|
||||
import android.support.annotation.StringRes
|
||||
import android.support.v4.app.NotificationCompat
|
||||
@@ -116,6 +117,12 @@ val Context.connectivityManager: ConnectivityManager
|
||||
val Context.powerManager: PowerManager
|
||||
get() = getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
|
||||
/**
|
||||
* Property to get the wifi manager from the context.
|
||||
*/
|
||||
val Context.wifiManager: WifiManager
|
||||
get() = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
|
||||
|
||||
/**
|
||||
* Function used to send a local broadcast asynchronous
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user