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