mirror of
https://github.com/mihonapp/mihon.git
synced 2024-11-15 15:02:49 +01:00
feat: Add trigger to sync before library update.
Signed-off-by: KaiserBh <kaiserbh@proton.me>
This commit is contained in:
parent
4396c012c6
commit
0d117b84c0
@ -120,4 +120,6 @@ private val SyncChoices = mapOf(
|
|||||||
SyncPreferences.Flags.SYNC_ON_CHAPTER_READ to MR.strings.sync_on_chapter_read,
|
SyncPreferences.Flags.SYNC_ON_CHAPTER_READ to MR.strings.sync_on_chapter_read,
|
||||||
SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN to MR.strings.sync_on_chapter_open,
|
SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN to MR.strings.sync_on_chapter_open,
|
||||||
SyncPreferences.Flags.SYNC_ON_APP_START to MR.strings.sync_on_app_start,
|
SyncPreferences.Flags.SYNC_ON_APP_START to MR.strings.sync_on_app_start,
|
||||||
|
SyncPreferences.Flags.SYNC_ON_APP_RESUME to MR.strings.sync_on_app_resume,
|
||||||
|
SyncPreferences.Flags.SYNC_ON_LIBRARY_UPDATE to MR.strings.sync_on_library_update,
|
||||||
)
|
)
|
||||||
|
@ -22,6 +22,7 @@ import eu.kanade.domain.manga.model.toSManga
|
|||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
|
import eu.kanade.tachiyomi.data.sync.SyncDataJob
|
||||||
import eu.kanade.tachiyomi.source.UnmeteredSource
|
import eu.kanade.tachiyomi.source.UnmeteredSource
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||||
@ -65,6 +66,7 @@ import tachiyomi.domain.manga.interactor.GetManga
|
|||||||
import tachiyomi.domain.manga.model.Manga
|
import tachiyomi.domain.manga.model.Manga
|
||||||
import tachiyomi.domain.source.model.SourceNotInstalledException
|
import tachiyomi.domain.source.model.SourceNotInstalledException
|
||||||
import tachiyomi.domain.source.service.SourceManager
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
|
import tachiyomi.domain.sync.SyncPreferences
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -478,24 +480,55 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
category: Category? = null,
|
category: Category? = null,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val wm = context.workManager
|
val wm = context.workManager
|
||||||
|
// Check if the LibraryUpdateJob is already running
|
||||||
if (wm.isRunning(TAG)) {
|
if (wm.isRunning(TAG)) {
|
||||||
// Already running either as a scheduled or manual job
|
// Already running either as a scheduled or manual job
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
val inputData = workDataOf(
|
val syncPreferences: SyncPreferences = Injekt.get()
|
||||||
KEY_CATEGORY to category?.id,
|
|
||||||
)
|
// Only proceed with SyncDataJob if sync is enabled and the specific sync on library update flag is set
|
||||||
val request = OneTimeWorkRequestBuilder<LibraryUpdateJob>()
|
if (syncPreferences.isSyncEnabled() && syncPreferences.syncFlags().get() and SyncPreferences.Flags.SYNC_ON_LIBRARY_UPDATE == SyncPreferences.Flags.SYNC_ON_LIBRARY_UPDATE) {
|
||||||
.addTag(TAG)
|
|
||||||
.addTag(WORK_NAME_MANUAL)
|
// Check if SyncDataJob is already running
|
||||||
.setInputData(inputData)
|
if (wm.isRunning(SyncDataJob.TAG_MANUAL)) {
|
||||||
.build()
|
// SyncDataJob is already running
|
||||||
wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define the SyncDataJob
|
||||||
|
val syncDataJob = OneTimeWorkRequestBuilder<SyncDataJob>()
|
||||||
|
.addTag(SyncDataJob.TAG_MANUAL)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
// Chain SyncDataJob to run before LibraryUpdateJob
|
||||||
|
val inputData = workDataOf(KEY_CATEGORY to category?.id)
|
||||||
|
val libraryUpdateJob = OneTimeWorkRequestBuilder<LibraryUpdateJob>()
|
||||||
|
.addTag(TAG)
|
||||||
|
.addTag(WORK_NAME_MANUAL)
|
||||||
|
.setInputData(inputData)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
wm.beginUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, syncDataJob)
|
||||||
|
.then(libraryUpdateJob)
|
||||||
|
.enqueue()
|
||||||
|
|
||||||
|
} else {
|
||||||
|
val inputData = workDataOf(KEY_CATEGORY to category?.id)
|
||||||
|
val request = OneTimeWorkRequestBuilder<LibraryUpdateJob>()
|
||||||
|
.addTag(TAG)
|
||||||
|
.addTag(WORK_NAME_MANUAL)
|
||||||
|
.setInputData(inputData)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun stop(context: Context) {
|
fun stop(context: Context) {
|
||||||
val wm = context.workManager
|
val wm = context.workManager
|
||||||
val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))
|
val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))
|
||||||
|
@ -60,7 +60,7 @@ class SyncDataJob(private val context: Context, workerParams: WorkerParameters)
|
|||||||
companion object {
|
companion object {
|
||||||
private const val TAG_JOB = "SyncDataJob"
|
private const val TAG_JOB = "SyncDataJob"
|
||||||
private const val TAG_AUTO = "$TAG_JOB:auto"
|
private const val TAG_AUTO = "$TAG_JOB:auto"
|
||||||
private const val TAG_MANUAL = "$TAG_JOB:manual"
|
const val TAG_MANUAL = "$TAG_JOB:manual"
|
||||||
|
|
||||||
private val jobTagList = listOf(TAG_AUTO, TAG_MANUAL)
|
private val jobTagList = listOf(TAG_AUTO, TAG_MANUAL)
|
||||||
|
|
||||||
|
@ -533,7 +533,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
|||||||
deleteChapterIfNeeded(readerChapter)
|
deleteChapterIfNeeded(readerChapter)
|
||||||
|
|
||||||
// Check if syncing is enabled for chapter read:
|
// Check if syncing is enabled for chapter read:
|
||||||
if (syncPreferences.syncService().get() != 0 &&
|
if (syncPreferences.isSyncEnabled() &&
|
||||||
syncFlags and SyncPreferences.Flags.SYNC_ON_CHAPTER_READ == SyncPreferences.Flags.SYNC_ON_CHAPTER_READ
|
syncFlags and SyncPreferences.Flags.SYNC_ON_CHAPTER_READ == SyncPreferences.Flags.SYNC_ON_CHAPTER_READ
|
||||||
) {
|
) {
|
||||||
SyncDataJob.startNow(Injekt.get<Application>())
|
SyncDataJob.startNow(Injekt.get<Application>())
|
||||||
@ -549,7 +549,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Check if syncing is enabled for chapter open:
|
// Check if syncing is enabled for chapter open:
|
||||||
if (syncPreferences.syncService().get() != 0 &&
|
if (syncPreferences.isSyncEnabled() &&
|
||||||
syncFlags and SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN == SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN
|
syncFlags and SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN == SyncPreferences.Flags.SYNC_ON_CHAPTER_OPEN
|
||||||
) {
|
) {
|
||||||
SyncDataJob.startNow(Injekt.get<Application>())
|
SyncDataJob.startNow(Injekt.get<Application>())
|
||||||
|
@ -11,10 +11,12 @@ class SyncPreferences(
|
|||||||
const val SYNC_ON_CHAPTER_READ = 0x1
|
const val SYNC_ON_CHAPTER_READ = 0x1
|
||||||
const val SYNC_ON_CHAPTER_OPEN = 0x2
|
const val SYNC_ON_CHAPTER_OPEN = 0x2
|
||||||
const val SYNC_ON_APP_START = 0x4
|
const val SYNC_ON_APP_START = 0x4
|
||||||
|
const val SYNC_ON_APP_RESUME = 0x8
|
||||||
|
const val SYNC_ON_LIBRARY_UPDATE = 0x10
|
||||||
|
|
||||||
const val Defaults = NONE
|
const val Defaults = NONE
|
||||||
|
|
||||||
fun values() = listOf(NONE, SYNC_ON_CHAPTER_READ, SYNC_ON_CHAPTER_OPEN, SYNC_ON_APP_START)
|
fun values() = listOf(NONE, SYNC_ON_CHAPTER_READ, SYNC_ON_CHAPTER_OPEN, SYNC_ON_APP_START, SYNC_ON_APP_RESUME, SYNC_ON_LIBRARY_UPDATE)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun syncHost() = preferenceStore.getString("sync_host", "https://sync.tachiyomi.org")
|
fun syncHost() = preferenceStore.getString("sync_host", "https://sync.tachiyomi.org")
|
||||||
@ -35,4 +37,8 @@ class SyncPreferences(
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun syncFlags() = preferenceStore.getInt("sync_flags", Flags.Defaults)
|
fun syncFlags() = preferenceStore.getInt("sync_flags", Flags.Defaults)
|
||||||
|
|
||||||
|
fun isSyncEnabled(): Boolean {
|
||||||
|
return syncService().get() != 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user