Favorites sync show currently processing title after 5 seconds in case of issues

This commit is contained in:
Jobobby04 2021-06-26 15:23:10 -04:00
parent 9af351e0dd
commit 104e200b4a
2 changed files with 15 additions and 5 deletions

View File

@ -50,9 +50,12 @@ import exh.source.mangaDexSourceIds
import exh.source.nHentaiSourceIds import exh.source.nHentaiSourceIds
import exh.ui.LoaderManager import exh.ui.LoaderManager
import exh.util.milliseconds import exh.util.milliseconds
import exh.util.seconds
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample import kotlinx.coroutines.flow.sample
import reactivecircus.flowbinding.android.view.clicks import reactivecircus.flowbinding.android.view.clicks
@ -697,7 +700,7 @@ class LibraryController(
favoritesSyncJob = favoritesSyncJob =
presenter.favoritesSync.status presenter.favoritesSync.status
.sample(100.milliseconds) .sample(100.milliseconds)
.onEach { .mapLatest {
updateSyncStatus(it) updateSyncStatus(it)
} }
.launchIn(viewScope) .launchIn(viewScope)
@ -764,7 +767,7 @@ class LibraryController(
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }
private fun updateSyncStatus(status: FavoritesSyncStatus) { private suspend fun updateSyncStatus(status: FavoritesSyncStatus) {
when (status) { when (status) {
is FavoritesSyncStatus.Idle -> { is FavoritesSyncStatus.Idle -> {
releaseSyncLocks() releaseSyncLocks()
@ -832,6 +835,10 @@ class LibraryController(
} }
} }
oldSyncStatus = status oldSyncStatus = status
if (status is FavoritesSyncStatus.Processing && status.delayedMessage != null) {
delay(5.seconds)
favSyncDialog?.message(text = status.delayedMessage)
}
} }
fun startReading(manga: Manga, adapter: LibraryCategoryAdapter) { fun startReading(manga: Manga, adapter: LibraryCategoryAdapter) {

View File

@ -365,7 +365,8 @@ class FavoritesSyncHelper(val context: Context) {
status.value = FavoritesSyncStatus.Processing( status.value = FavoritesSyncStatus.Processing(
context.getString(R.string.favorites_sync_add_to_local, index + 1, changeSet.added.size), context.getString(R.string.favorites_sync_add_to_local, index + 1, changeSet.added.size),
needWarnThrottle(), needWarnThrottle(),
context context,
it.title
) )
throttleManager.throttle() throttleManager.throttle()
@ -441,12 +442,14 @@ sealed class FavoritesSyncStatus(val message: String) {
BadLibraryState(context.getString(R.string.favorites_sync_manga_in_multiple_categories, manga.title, categories.joinToString { it.name })) BadLibraryState(context.getString(R.string.favorites_sync_manga_in_multiple_categories, manga.title, categories.joinToString { it.name }))
} }
class Initializing(context: Context) : FavoritesSyncStatus(context.getString(R.string.favorites_sync_initializing)) class Initializing(context: Context) : FavoritesSyncStatus(context.getString(R.string.favorites_sync_initializing))
class Processing(message: String, isThrottle: Boolean = false, context: Context) : FavoritesSyncStatus( class Processing(message: String, isThrottle: Boolean = false, context: Context, val title: String? = null) : FavoritesSyncStatus(
if (isThrottle) { if (isThrottle) {
context.getString(R.string.favorites_sync_processing_throttle, message) context.getString(R.string.favorites_sync_processing_throttle, message)
} else { } else {
message message
} }
) ) {
val delayedMessage get() = if (title != null) this.message + "\n\n" + title else null
}
class CompleteWithErrors(messages: List<String>) : FavoritesSyncStatus(messages.joinToString("\n")) class CompleteWithErrors(messages: List<String>) : FavoritesSyncStatus(messages.joinToString("\n"))
} }