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 0da101b717..643b516f6b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -21,6 +21,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Companion.start import eu.kanade.tachiyomi.data.notification.Notifications 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 @@ -273,6 +274,7 @@ class LibraryUpdateService( val newUpdates = mutableListOf>>() val failedUpdates = mutableListOf>() var hasDownloads = false + val loggedServices by lazy { trackManager.services.filter { it.isLogged } } mangaToUpdate.forEach { manga -> if (updateJob?.isActive != true) { @@ -301,6 +303,10 @@ class LibraryUpdateService( } failedUpdates.add(manga to errorMessage) } + + if (preferences.autoUpdateTrackers()) { + updateTrackings(manga, loggedServices) + } } notifier.cancelProgressNotification() @@ -409,31 +415,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() } /** 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 e67bb334d1..bdbc57e48a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -168,6 +168,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 64b439a7ea..ded219697d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -79,6 +79,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 70915f8e92..4a05701557 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 @@ -241,6 +241,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 6ef16679f2..cc83ff7cc7 100644 --- 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