From 1c084d42dfd5e9e7e1a123d915fc9619db7c807c Mon Sep 17 00:00:00 2001 From: Gauthier Date: Tue, 25 May 2021 10:26:41 +0800 Subject: [PATCH] Background tracker update during Library update (#5166) * add preference to auto update trackers during library update * also update trackers when updating chapters and preference is set * remove unnecessary launch/join * perform tracking update within the same chapter update loop to avoid double notifications (cherry picked from commit e76e903060658530909455664c954cc4a639527d) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt --- .../data/library/LibraryUpdateService.kt | 48 +++++++++++-------- .../data/preference/PreferenceKeys.kt | 2 + .../data/preference/PreferencesHelper.kt | 2 + .../ui/setting/SettingsLibraryController.kt | 6 +++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index d3eea4c23..8140b81ba 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.preference.PreferenceValues import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.UnattendedTrackService import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.SManga @@ -355,6 +356,7 @@ class LibraryUpdateService( val newUpdates = mutableListOf>>() val failedUpdates = mutableListOf>() var hasDownloads = false + val loggedServices by lazy { trackManager.services.filter { it.isLogged } } withIOContext { mangaToUpdate.groupBy { it.source } @@ -393,6 +395,10 @@ class LibraryUpdateService( } failedUpdates.add(manga to errorMessage) } + + if (preferences.autoUpdateTrackers()) { + updateTrackings(manga, loggedServices) + } } } } @@ -530,31 +536,35 @@ class LibraryUpdateService( notifier.showProgressNotification(manga, progressCount++, mangaToUpdate.size) // Update the tracking details. - db.getTracks(manga).executeAsBlocking() - .map { track -> - supervisorScope { - async { - val service = trackManager.getService(track.sync_id) - if (service != null && service in loggedServices) { - try { - val updatedTrack = service.refresh(track) - db.insertTrack(updatedTrack).executeAsBlocking() + updateTrackings(manga, loggedServices) + } - if (service is UnattendedTrackService) { - syncChaptersWithTrackServiceTwoWay(db, db.getChapters(manga).executeAsBlocking(), track, service) - } - } catch (e: Throwable) { - // Ignore errors and continue - Timber.e(e) + notifier.cancelProgressNotification() + } + + private suspend fun updateTrackings(manga: LibraryManga, loggedServices: List) { + db.getTracks(manga).executeAsBlocking() + .map { track -> + supervisorScope { + async { + val service = trackManager.getService(track.sync_id) + if (service != null && service in loggedServices) { + try { + val updatedTrack = service.refresh(track) + db.insertTrack(updatedTrack).executeAsBlocking() + + if (service is UnattendedTrackService) { + syncChaptersWithTrackServiceTwoWay(db, db.getChapters(manga).executeAsBlocking(), track, service) } + } catch (e: Throwable) { + // Ignore errors and continue + Timber.e(e) } } } } - .awaitAll() - } - - notifier.cancelProgressNotification() + } + .awaitAll() } // SY --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index 83c62fe2d..f14614251 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -174,6 +174,8 @@ object PreferenceKeys { const val autoUpdateMetadata = "auto_update_metadata" + const val autoUpdateTrackers = "auto_update_trackers" + const val showLibraryUpdateErrors = "show_library_update_errors" const val downloadNew = "download_new" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 90ff05414..30aa8874b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -81,6 +81,8 @@ class PreferencesHelper(val context: Context) { fun autoUpdateMetadata() = prefs.getBoolean(Keys.autoUpdateMetadata, false) + fun autoUpdateTrackers() = prefs.getBoolean(Keys.autoUpdateTrackers, false) + fun showLibraryUpdateErrors() = prefs.getBoolean(Keys.showLibraryUpdateErrors, false) fun clear() = prefs.edit { clear() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt index 921a61b4a..125a01631 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt @@ -283,6 +283,12 @@ class SettingsLibraryController : SettingsController() { summaryRes = R.string.pref_library_update_refresh_metadata_summary defaultValue = false } + switchPreference { + key = Keys.autoUpdateTrackers + titleRes = R.string.pref_library_update_refresh_trackers + summaryRes = R.string.pref_library_update_refresh_trackers_summary + defaultValue = false + } switchPreference { key = Keys.showLibraryUpdateErrors titleRes = R.string.pref_library_update_error_notification diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b10c6169e..ac2a008b0 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -218,6 +218,8 @@ Only update ongoing manga Automatically refresh metadata Check for new cover and details when updating library + Automatically update trackers + Update trackers when updating library Show update errors notifications Default category