From 3e55ea8eac5731e2b950da28d553950701ebe035 Mon Sep 17 00:00:00 2001 From: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com> Date: Wed, 29 Oct 2025 09:42:11 +0700 Subject: [PATCH] fix(library-update-job): Fix disappearing library update job (#1254) * fix(library-update-job): Fix disappearing library update job * extract to shared utils --- .../data/backup/create/BackupCreateJob.kt | 14 ++++------- .../data/library/LibraryUpdateJob.kt | 13 ++++++++++ .../kanade/tachiyomi/ui/main/MainActivity.kt | 17 ++++++++++++- app/src/main/java/exh/util/WorkerUtil.kt | 24 +++++++++++++++++++ .../moko-resources/base/strings.xml | 3 ++- 5 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/exh/util/WorkerUtil.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt index a8f21cde1..df34146a3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt @@ -23,7 +23,7 @@ import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager -import kotlinx.coroutines.guava.await +import exh.util.WorkerUtil import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.backup.service.BackupPreferences @@ -129,19 +129,13 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete // KMK --> /** - * Returns true if a periodic backup job is currently scheduled. + * Returns true if a periodic job is currently scheduled. * @param context The application context. - * @return True if a periodic backup job is scheduled, false otherwise. + * @return True if a periodic job is scheduled, false otherwise. * @throws Exception If there is an error retrieving the work info. */ suspend fun isPeriodicBackupScheduled(context: Context): Boolean { - val workInfos = context.workManager - .getWorkInfosForUniqueWork(TAG_AUTO) - .await() - - return workInfos.any { workInfo -> - !workInfo.state.isFinished - } + return WorkerUtil.isPeriodicJobScheduled(context, TAG_AUTO) } // KMK <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt index a5221b851..d07ea6fe5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -44,6 +44,7 @@ import exh.md.utils.MdUtil import exh.source.LIBRARY_UPDATE_EXCLUDED_SOURCES import exh.source.MERGED_SOURCE_ID import exh.source.mangaDexSourceIds +import exh.util.WorkerUtil import exh.util.nullIfBlank import kotlinx.coroutines.CancellationException import kotlinx.coroutines.async @@ -889,5 +890,17 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet } } } + + // KMK --> + /** + * Returns true if a periodic job is currently scheduled. + * @param context The application context. + * @return True if a periodic job is scheduled, false otherwise. + * @throws Exception If there is an error retrieving the work info. + */ + suspend fun isPeriodicUpdateScheduled(context: Context): Boolean { + return WorkerUtil.isPeriodicJobScheduled(context, WORK_NAME_AUTO) + } + // KMK <-- } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 370633985..0860bee2a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -79,6 +79,7 @@ import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.coil.MangaCoverMetadata import eu.kanade.tachiyomi.data.connections.discord.DiscordRPCService import eu.kanade.tachiyomi.data.download.DownloadCache +import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.updater.AppUpdateChecker import eu.kanade.tachiyomi.data.updater.AppUpdateJob @@ -510,6 +511,20 @@ class MainActivity : BaseActivity() { LaunchedEffect(Unit) { launchIO { + try { + if (!LibraryUpdateJob.isPeriodicUpdateScheduled(context)) { + LibraryUpdateJob.setupTask(context) + } + } catch (e: Exception) { + logcat(LogPriority.ERROR, e) + withContext(Dispatchers.Main) { + Toast.makeText( + context, + stringResource(KMR.strings.job_failed_schedule_update_check, stringResource(MR.strings.unknown_error)), + Toast.LENGTH_LONG, + ).show() + } + } try { if (!BackupCreateJob.isPeriodicBackupScheduled(context)) { BackupCreateJob.setupTask(context) @@ -519,7 +534,7 @@ class MainActivity : BaseActivity() { withContext(Dispatchers.Main) { Toast.makeText( context, - stringResource(KMR.strings.job_failed_schedule_update_check, stringResource(MR.strings.unknown_error)), + stringResource(KMR.strings.job_failed_schedule_backup_check, stringResource(MR.strings.unknown_error)), Toast.LENGTH_LONG, ).show() } diff --git a/app/src/main/java/exh/util/WorkerUtil.kt b/app/src/main/java/exh/util/WorkerUtil.kt new file mode 100644 index 000000000..73d9bc647 --- /dev/null +++ b/app/src/main/java/exh/util/WorkerUtil.kt @@ -0,0 +1,24 @@ +package exh.util + +import android.content.Context +import eu.kanade.tachiyomi.util.system.workManager +import kotlinx.coroutines.guava.await + +object WorkerUtil { + /** + * Returns true if a periodic job is currently scheduled. + * @param context The application context. + * @param uniqueWorkName The unique work tag to check for scheduled jobs. + * @return True if a periodic job is scheduled, false otherwise. + * @throws Exception If there is an error retrieving the work info. + */ + suspend fun isPeriodicJobScheduled(context: Context, uniqueWorkName: String): Boolean { + val workInfos = context.workManager + .getWorkInfosForUniqueWork(uniqueWorkName) + .await() + + return workInfos.any { workInfo -> + !workInfo.state.isFinished + } + } +} diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index e2553b9c0..e886352ed 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -173,7 +173,8 @@ Current: %1$s Migrating all entries from source - Failed to schedule automatic backup: %s + Failed to schedule automatic library update: %s + Failed to schedule automatic backup: %s To be updated Sponsor Me Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino