From 402014adb49dba4fb5a892d02f1d51765791e6a2 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 26 Aug 2023 18:30:17 -0400 Subject: [PATCH] Refactor some tracking-related logic (cherry picked from commit dde2f42138082f2d71552d573adbe89015cc7ff4) # Conflicts: # app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt --- .../java/eu/kanade/domain/DomainModule.kt | 4 +- .../SyncChaptersWithTrackServiceTwoWay.kt | 15 ++++- .../domain/track/interactor/RefreshTracks.kt | 43 +++++++++++++ .../domain/track/interactor/TrackChapter.kt | 30 ++++----- .../track/service/DelayedTrackingUpdateJob.kt | 2 +- .../more/settings/PreferenceItem.kt | 2 +- .../java/eu/kanade/tachiyomi/Migrations.kt | 2 +- .../data/backup/BackupFileValidator.kt | 2 +- .../data/library/LibraryUpdateJob.kt | 64 ++++--------------- .../tachiyomi/data/track/TrackManager.kt | 2 +- .../tachiyomi/data/track/TrackService.kt | 9 +-- .../tachiyomi/data/track/mdlist/MdList.kt | 2 +- .../tachiyomi/source/online/all/MangaDex.kt | 2 +- .../source/browse/BrowseSourceScreenModel.kt | 7 +- .../ui/library/LibraryScreenModel.kt | 2 +- .../ui/library/LibrarySettingsScreenModel.kt | 2 +- .../tachiyomi/ui/manga/MangaScreenModel.kt | 2 +- .../ui/manga/track/TrackInfoDialog.kt | 12 +--- .../tachiyomi/ui/stats/StatsScreenModel.kt | 2 +- 19 files changed, 107 insertions(+), 99 deletions(-) create mode 100644 app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt diff --git a/app/src/main/java/eu/kanade/domain/DomainModule.kt b/app/src/main/java/eu/kanade/domain/DomainModule.kt index 062cc571f..33c56bb7c 100644 --- a/app/src/main/java/eu/kanade/domain/DomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/DomainModule.kt @@ -16,6 +16,7 @@ import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.domain.source.interactor.ToggleLanguage import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.interactor.ToggleSourcePin +import eu.kanade.domain.track.interactor.RefreshTracks import eu.kanade.domain.track.interactor.TrackChapter import tachiyomi.data.category.CategoryRepositoryImpl import tachiyomi.data.chapter.ChapterRepositoryImpl @@ -113,6 +114,7 @@ class DomainModule : InjektModule { addSingletonFactory { TrackRepositoryImpl(get()) } addFactory { TrackChapter(get(), get(), get(), get()) } + addFactory { RefreshTracks(get(), get(), get(), get()) } addFactory { DeleteTrack(get()) } addFactory { GetTracksPerManga(get(), get()) } addFactory { GetTracks(get()) } @@ -125,7 +127,7 @@ class DomainModule : InjektModule { addFactory { SetReadStatus(get(), get(), get(), get(), get()) } addFactory { ShouldUpdateDbChapter() } addFactory { SyncChaptersWithSource(get(), get(), get(), get(), get(), get(), get()) } - addFactory { SyncChaptersWithTrackServiceTwoWay(get(), get()) } + addFactory { SyncChaptersWithTrackServiceTwoWay(get(), get(), get()) } addSingletonFactory { HistoryRepositoryImpl(get()) } addFactory { GetHistory(get()) } diff --git a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay.kt b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay.kt index da9ee05ea..ddd8ebaa3 100644 --- a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay.kt +++ b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay.kt @@ -1,11 +1,12 @@ package eu.kanade.domain.chapter.interactor import eu.kanade.domain.track.model.toDbTrack +import eu.kanade.tachiyomi.data.track.EnhancedTrackService import eu.kanade.tachiyomi.data.track.TrackService import logcat.LogPriority import tachiyomi.core.util.system.logcat +import tachiyomi.domain.chapter.interactor.GetChapterByMangaId import tachiyomi.domain.chapter.interactor.UpdateChapter -import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.track.interactor.InsertTrack import tachiyomi.domain.track.model.Track @@ -13,14 +14,22 @@ import tachiyomi.domain.track.model.Track class SyncChaptersWithTrackServiceTwoWay( private val updateChapter: UpdateChapter, private val insertTrack: InsertTrack, + private val getChapterByMangaId: GetChapterByMangaId, ) { suspend fun await( - chapters: List, + mangaId: Long, remoteTrack: Track, service: TrackService, ) { - val sortedChapters = chapters.sortedBy { it.chapterNumber } + if (service !is EnhancedTrackService) { + return + } + + val sortedChapters = getChapterByMangaId.await(mangaId) + .sortedBy { it.chapterNumber } + .filter { it.isRecognizedNumber } + val chapterUpdates = sortedChapters .filter { chapter -> chapter.chapterNumber <= remoteTrack.lastChapterRead && !chapter.read } .map { it.copy(read = true).toChapterUpdate() } diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt b/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt new file mode 100644 index 000000000..dbff0e934 --- /dev/null +++ b/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt @@ -0,0 +1,43 @@ +package eu.kanade.domain.track.interactor + +import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay +import eu.kanade.domain.track.model.toDbTrack +import eu.kanade.domain.track.model.toDomainTrack +import eu.kanade.tachiyomi.data.track.TrackManager +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.supervisorScope +import logcat.LogPriority +import tachiyomi.core.util.system.logcat +import tachiyomi.domain.track.interactor.GetTracks +import tachiyomi.domain.track.interactor.InsertTrack + +class RefreshTracks( + private val getTracks: GetTracks, + private val trackManager: TrackManager, + private val insertTrack: InsertTrack, + private val syncChaptersWithTrackServiceTwoWay: SyncChaptersWithTrackServiceTwoWay, +) { + + suspend fun await(mangaId: Long) { + supervisorScope { + getTracks.await(mangaId) + .map { track -> + async { + val service = trackManager.getService(track.syncId) + if (service != null && service.isLoggedIn) { + try { + val updatedTrack = service.refresh(track.toDbTrack()) + insertTrack.await(updatedTrack.toDomainTrack()!!) + syncChaptersWithTrackServiceTwoWay.await(mangaId, track, service) + } catch (e: Throwable) { + // Ignore errors and continue + logcat(LogPriority.ERROR, e) + } + } + } + } + .awaitAll() + } + } +} diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt index 86746033f..beb55b8ca 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt @@ -25,33 +25,31 @@ class TrackChapter( suspend fun await(context: Context, mangaId: Long, chapterNumber: Double) = coroutineScope { launchNonCancellable { val tracks = getTracks.await(mangaId) - if (tracks.isEmpty()) return@launchNonCancellable tracks.mapNotNull { track -> val service = trackManager.getService(track.syncId) - if (service != null && service.isLogged && chapterNumber > track.lastChapterRead /* SY --> */ && ((service.id == TrackManager.MDLIST && track.status != FollowStatus.UNFOLLOWED.int.toLong()) || service.id != TrackManager.MDLIST)/* SY <-- */) { - val updatedTrack = track.copy(lastChapterRead = chapterNumber) + if (service == null || !service.isLoggedIn || chapterNumber <= track.lastChapterRead /* SY --> */ || (service.id == TrackManager.MDLIST && track.status == FollowStatus.UNFOLLOWED.int.toLong())/* SY <-- */) { + return@mapNotNull null + } - async { - runCatching { - try { - service.update(updatedTrack.toDbTrack(), true) - insertTrack.await(updatedTrack) - } catch (e: Exception) { - delayedTrackingStore.addItem(updatedTrack) - DelayedTrackingUpdateJob.setupTask(context) - throw e - } + val updatedTrack = track.copy(lastChapterRead = chapterNumber) + async { + runCatching { + try { + service.update(updatedTrack.toDbTrack(), true) + insertTrack.await(updatedTrack) + } catch (e: Exception) { + delayedTrackingStore.addItem(updatedTrack) + DelayedTrackingUpdateJob.setupTask(context) + throw e } } - } else { - null } } .awaitAll() .mapNotNull { it.exceptionOrNull() } - .forEach { logcat(LogPriority.INFO, it) } + .forEach { logcat(LogPriority.WARN, it) } } } } diff --git a/app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt b/app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt index 3959c6707..0273e0fdc 100644 --- a/app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt +++ b/app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt @@ -48,7 +48,7 @@ class DelayedTrackingUpdateJob(context: Context, workerParams: WorkerParameters) .forEach { track -> try { val service = trackManager.getService(track.syncId) - if (service != null && service.isLogged) { + if (service != null && service.isLoggedIn) { logcat(LogPriority.DEBUG) { "Updating delayed track item: ${track.id}, last chapter read: ${track.lastChapterRead}" } service.update(track.toDbTrack(), true) insertTrack.await(track) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt index 33a277c94..940a48225 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt @@ -164,7 +164,7 @@ internal fun PreferenceItem( TrackingPreferenceWidget( service = this, checked = uName.isNotEmpty(), - onClick = { if (isLogged) item.logout() else item.login() }, + onClick = { if (isLoggedIn) item.logout() else item.login() }, ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 3ef67c815..bbca17b31 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -137,7 +137,7 @@ object Migrations { // Force MAL log out due to login flow change // v52: switched from scraping to WebView // v53: switched from WebView to OAuth - if (trackManager.myAnimeList.isLogged) { + if (trackManager.myAnimeList.isLoggedIn) { trackManager.myAnimeList.logout() context.toast(R.string.myanimelist_relogin) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt index e2cd12e3b..56ac0b8e0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt @@ -51,7 +51,7 @@ class BackupFileValidator( .distinct() val missingTrackers = trackers .mapNotNull { trackManager.getService(it.toLong()) } - .filter { !it.isLogged } + .filter { !it.isLoggedIn } .map { context.getString(it.nameRes()) } .sorted() 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 d39a9cc48..ee79834b4 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -15,19 +15,17 @@ import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource -import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.copyFrom import eu.kanade.domain.manga.model.toSManga +import eu.kanade.domain.track.interactor.RefreshTracks import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.notification.Notifications -import eu.kanade.tachiyomi.data.track.EnhancedTrackService import eu.kanade.tachiyomi.data.track.TrackManager -import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.TrackStatus import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.source.model.SManga @@ -54,7 +52,6 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.supervisorScope import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority @@ -64,7 +61,6 @@ import tachiyomi.core.util.system.logcat import tachiyomi.domain.UnsortedPreferences import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.model.Category -import tachiyomi.domain.chapter.interactor.GetChapterByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.NoChaptersException import tachiyomi.domain.download.service.DownloadPreferences @@ -109,17 +105,13 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet private val downloadPreferences: DownloadPreferences = Injekt.get() private val libraryPreferences: LibraryPreferences = Injekt.get() private val downloadManager: DownloadManager = Injekt.get() - private val trackManager: TrackManager = Injekt.get() private val coverCache: CoverCache = Injekt.get() private val getLibraryManga: GetLibraryManga = Injekt.get() private val getManga: GetManga = Injekt.get() private val updateManga: UpdateManga = Injekt.get() - private val getChapterByMangaId: GetChapterByMangaId = Injekt.get() private val getCategories: GetCategories = Injekt.get() private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get() - private val getTracks: GetTracks = Injekt.get() - private val insertTrack: InsertTrack = Injekt.get() - private val syncChaptersWithTrackServiceTwoWay: SyncChaptersWithTrackServiceTwoWay = Injekt.get() + private val refreshTracks: RefreshTracks = Injekt.get() private val setFetchInterval: SetFetchInterval = Injekt.get() // SY --> @@ -127,6 +119,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet private val insertFlatMetadata: InsertFlatMetadata = Injekt.get() private val networkToLocalManga: NetworkToLocalManga = Injekt.get() private val getMergedMangaForDownloading: GetMergedMangaForDownloading = Injekt.get() + private val getTracks: GetTracks = Injekt.get() + private val insertTrack: InsertTrack = Injekt.get() + private val mdList = Injekt.get().mdList // SY <-- private val notifier = LibraryUpdateNotifier(context) @@ -303,7 +298,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet val hasDownloads = AtomicBoolean(false) val restrictions = libraryPreferences.autoUpdateMangaRestrictions().get() // SY --> - val mdlistLogged = trackManager.services.any { it.isLogged && it.id == TrackManager.MDLIST } + val mdlistLogged = mdList.isLoggedIn // SY <-- val fetchWindow = setFetchInterval.getWindow(ZonedDateTime.now()) @@ -323,8 +318,8 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet try { val tracks = getTracks.await(manga.id) if (tracks.isEmpty() || tracks.none { it.syncId == TrackManager.MDLIST }) { - val track = trackManager.mdList.createInitialTracker(manga) - insertTrack.await(trackManager.mdList.refresh(track).toDomainTrack(false)!!) + val track = mdList.createInitialTracker(manga) + insertTrack.await(mdList.refresh(track).toDomainTrack(false)!!) } } catch (e: Exception) { if (e is CancellationException) throw e @@ -393,8 +388,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet } if (libraryPreferences.autoUpdateTrackers().get()) { - val loggedServices = trackManager.services.filter { it.isLogged } - updateTrackings(manga, loggedServices) + refreshTracks.await(manga.id) } } } @@ -534,49 +528,19 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet private suspend fun updateTrackings() { coroutineScope { var progressCount = 0 - val loggedServices = trackManager.services.filter { it.isLogged } mangaToUpdate.forEach { libraryManga -> - val manga = libraryManga.manga - ensureActive() + val manga = libraryManga.manga notifier.showProgressNotification(listOf(manga), progressCount++, mangaToUpdate.size) - - // Update the tracking details. - updateTrackings(manga, loggedServices) + refreshTracks.await(manga.id) } notifier.cancelProgressNotification() } } - private suspend fun updateTrackings(manga: Manga, loggedServices: List) { - getTracks.await(manga.id) - .map { track -> - supervisorScope { - async { - val service = trackManager.getService(track.syncId) - if (service != null && service in loggedServices) { - try { - val updatedTrack = service.refresh(track.toDbTrack()) - insertTrack.await(updatedTrack.toDomainTrack()!!) - - if (service is EnhancedTrackService) { - val chapters = getChapterByMangaId.await(manga.id) - syncChaptersWithTrackServiceTwoWay.await(chapters, track, service) - } - } catch (e: Throwable) { - // Ignore errors and continue - logcat(LogPriority.ERROR, e) - } - } - } - } - } - .awaitAll() - } - // SY --> /** * filter all follows from Mangadex and only add reading or rereading manga to library @@ -631,7 +595,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet val listManga = getFavorites.await().filter { it.source in mangaDexSourceIds } // filter all follows from Mangadex and only add reading or rereading manga to library - if (trackManager.mdList.isLogged) { + if (mdList.isLoggedIn) { listManga.forEach { manga -> ensureActive() @@ -643,13 +607,13 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet // find the mdlist entry if its unfollowed the follow it var tracker = dbTracks.firstOrNull { it.syncId == TrackManager.MDLIST } - ?: trackManager.mdList.createInitialTracker(manga).toDomainTrack(idRequired = false) + ?: mdList.createInitialTracker(manga).toDomainTrack(idRequired = false) if (tracker?.status == FollowStatus.UNFOLLOWED.int.toLong()) { tracker = tracker.copy( status = FollowStatus.READING.int.toLong(), ) - val updatedTrack = trackManager.mdList.update(tracker.toDbTrack()) + val updatedTrack = mdList.update(tracker.toDbTrack()) insertTrack.await(updatedTrack.toDomainTrack(false)!!) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt index 36ac605e9..81b52f40e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt @@ -46,5 +46,5 @@ class TrackManager(context: Context) { fun getService(id: Long) = services.find { it.id == id } - fun hasLoggedServices() = services.any { it.isLogged } + fun hasLoggedServices() = services.any { it.isLoggedIn } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackService.kt index d7dd11c94..1a0957964 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackService.kt @@ -33,6 +33,7 @@ abstract class TrackService(val id: Long) { val trackPreferences: TrackPreferences by injectLazy() val networkService: NetworkHelper by injectLazy() private val insertTrack: InsertTrack by injectLazy() + private val syncChaptersWithTrackServiceTwoWay: SyncChaptersWithTrackServiceTwoWay by injectLazy() open val client: OkHttpClient get() = networkService.client @@ -89,7 +90,7 @@ abstract class TrackService(val id: Long) { trackPreferences.setTrackCredentials(this, "", "") } - open val isLogged: Boolean + open val isLoggedIn: Boolean get() = getUsername().isNotEmpty() && getPassword().isNotEmpty() @@ -101,6 +102,7 @@ abstract class TrackService(val id: Long) { trackPreferences.setTrackCredentials(this, username, password) } + // TODO: move this to an interactor, and update all trackers based on common data suspend fun registerTracking(item: Track, mangaId: Long) { item.manga_id = mangaId try { @@ -113,6 +115,7 @@ abstract class TrackService(val id: Long) { insertTrack.await(track) + // TODO: merge into SyncChaptersWithTrackServiceTwoWay? // Update chapter progress if newer chapters marked read locally if (hasReadChapters) { val latestLocalReadChapterNumber = allChapters @@ -144,9 +147,7 @@ abstract class TrackService(val id: Long) { } } - if (this is EnhancedTrackService) { - Injekt.get().await(allChapters, track, this@TrackService) - } + syncChaptersWithTrackServiceTwoWay.await(mangaId, track, this@TrackService) } } catch (e: Throwable) { withUIContext { Injekt.get().toast(e.message) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt index 29688941d..5f1ed4448 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt @@ -168,7 +168,7 @@ class MdList(id: Long) : TrackService(id) { trackPreferences.trackToken(this).delete() } - override val isLogged: Boolean + override val isLoggedIn: Boolean get() = trackPreferences.trackToken(this).get().isNotEmpty() class MangaDexNotFoundException : Exception("Mangadex not enabled") diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt index 2639197ef..b8988f648 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MangaDex.kt @@ -229,7 +229,7 @@ class MangaDex(delegate: HttpSource, val context: Context) : override val twoFactorAuth = LoginSource.AuthSupport.NOT_SUPPORTED override fun isLogged(): Boolean { - return mdList.isLogged + return mdList.isLoggedIn } override fun getUsername(): String { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index 8aab62085..fba2f10fb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -66,7 +66,6 @@ import tachiyomi.domain.UnsortedPreferences import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.model.Category -import tachiyomi.domain.chapter.interactor.GetChapterByMangaId import tachiyomi.domain.chapter.interactor.SetMangaDefaultChapterFlags import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga @@ -104,7 +103,6 @@ open class BrowseSourceScreenModel( private val getRemoteManga: GetRemoteManga = Injekt.get(), private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), - private val getChapterByMangaId: GetChapterByMangaId = Injekt.get(), private val setMangaCategories: SetMangaCategories = Injekt.get(), private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(), private val getManga: GetManga = Injekt.get(), @@ -123,7 +121,7 @@ open class BrowseSourceScreenModel( // SY <-- ) : StateScreenModel(State(Listing.valueOf(listingQuery))) { - private val loggedServices by lazy { Injekt.get().services.filter { it.isLogged } } + private val loggedServices by lazy { Injekt.get().services.filter { it.isLoggedIn } } var displayMode by sourcePreferences.sourceDisplayMode().asState(coroutineScope) @@ -402,8 +400,7 @@ open class BrowseSourceScreenModel( (service as TrackService).bind(track) insertTrack.await(track.toDomainTrack()!!) - val chapters = getChapterByMangaId.await(manga.id) - syncChaptersWithTrackServiceTwoWay.await(chapters, track.toDomainTrack()!!, service) + syncChaptersWithTrackServiceTwoWay.await(manga.id, track.toDomainTrack()!!, service) } } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Could not match manga: ${manga.title} with service $service" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 3077fab99..e6216cd07 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -556,7 +556,7 @@ class LibraryScreenModel( * @return map of track id with the filter value */ private fun getTrackingFilterFlow(): Flow> { - val loggedServices = trackManager.services.filter { it.isLogged } + val loggedServices = trackManager.services.filter { it.isLoggedIn } return if (loggedServices.isNotEmpty()) { val prefFlows = loggedServices .map { libraryPreferences.filterTracking(it.id.toInt()).changes() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt index 571ff8e50..eb76c18a7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt @@ -28,7 +28,7 @@ class LibrarySettingsScreenModel( ) : ScreenModel { val trackServices - get() = trackManager.services.filter { it.isLogged } + get() = trackManager.services.filter { it.isLoggedIn } // SY --> val grouping by libraryPreferences.groupLibraryBy().asState(coroutineScope) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 75d8ffafd..dbb603763 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -169,7 +169,7 @@ class MangaScreenModel( private val successState: State.Success? get() = state.value as? State.Success - private val loggedServices by lazy { trackManager.services.filter { it.isLogged } } + private val loggedServices by lazy { trackManager.services.filter { it.isLoggedIn } } val manga: Manga? get() = successState?.manga diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt index 815c8d454..91fea703b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt @@ -71,7 +71,6 @@ import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.manga.interactor.GetManga -import tachiyomi.domain.manga.interactor.GetMangaWithChapters import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.DeleteTrack import tachiyomi.domain.track.interactor.GetTracks @@ -218,8 +217,7 @@ data class TrackInfoDialogHomeScreen( private suspend fun refreshTrackers() { val insertTrack = Injekt.get() - val getMangaWithChapters = Injekt.get() - val syncTwoWayService = Injekt.get() + val syncChaptersWithTrackServiceTwoWay = Injekt.get() val context = Injekt.get() try { @@ -229,11 +227,7 @@ data class TrackInfoDialogHomeScreen( val track = trackItem.track ?: continue val domainTrack = trackItem.service.refresh(track.toDbTrack()).toDomainTrack() ?: continue insertTrack.await(domainTrack) - - if (trackItem.service is EnhancedTrackService) { - val allChapters = getMangaWithChapters.awaitChapters(mangaId) - syncTwoWayService.await(allChapters, domainTrack, trackItem.service) - } + syncChaptersWithTrackServiceTwoWay.await(mangaId, domainTrack, trackItem.service) } catch (e: Exception) { logcat( LogPriority.ERROR, @@ -257,7 +251,7 @@ data class TrackInfoDialogHomeScreen( } private fun List.mapToTrackItem(): List { - val loggedServices = Injekt.get().services.filter { it.isLogged } + val loggedServices = Injekt.get().services.filter { it.isLoggedIn } val source = Injekt.get().getOrStub(sourceId) return loggedServices // Map to TrackItem diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt index a7e4b0b2a..e6d7117f4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt @@ -43,7 +43,7 @@ class StatsScreenModel( // SY <-- ) : StateScreenModel(StatsScreenState.Loading) { - private val loggedServices by lazy { trackManager.services.fastFilter { it.isLogged } } + private val loggedServices by lazy { trackManager.services.fastFilter { it.isLoggedIn } } // SY --> private val _allRead = MutableStateFlow(false)