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 26e83b630..e4a232b36 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -27,6 +27,7 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.source.online.all.MergedSource import eu.kanade.tachiyomi.ui.library.LibraryGroup +import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.util.chapter.NoChaptersException import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource import eu.kanade.tachiyomi.util.prepUpdateCover @@ -92,7 +93,8 @@ class LibraryUpdateService( COVERS, // Manga covers TRACKING, // Tracking metadata // SY --> - SYNC_FOLLOWS // MangaDex specific, pull mangadex manga in reading, rereading + SYNC_FOLLOWS, // MangaDex specific, pull mangadex manga in reading, rereading + PUSH_FAVORITES // MangaDex specific, push mangadex manga to mangadex // SY <-- } @@ -225,6 +227,7 @@ class LibraryUpdateService( Target.TRACKING -> updateTrackings(mangaList) // SY --> Target.SYNC_FOLLOWS -> syncFollows() + Target.PUSH_FAVORITES -> pushFavorites() // SY <-- } } @@ -581,6 +584,40 @@ class LibraryUpdateService( } .map { LibraryManga() } } + + /** + * Method that updates the all mangas which are not tracked as "reading" on mangadex + */ + private fun pushFavorites(): Observable { + val count = AtomicInteger(0) + val listManga = db.getLibraryMangas().executeAsBlocking() + + // filter all follows from Mangadex and only add reading or rereading manga to library + return Observable.from(if (trackManager.mdList.isLogged) listManga else emptyList()) + .flatMap { manga -> + notifier.showProgressNotification(manga, count.andIncrement, listManga.size) + + // Get this manga's trackers from the database + val dbTracks = db.getTracks(manga).executeAsBlocking() + + //find the mdlist entry if its unfollowed the follow it + val tracker = TrackItem(dbTracks.firstOrNull { it.sync_id == TrackManager.MDLIST } ?: trackManager.mdList.createInitialTracker(manga), trackManager.mdList) + + if (tracker.track?.status == FollowStatus.UNFOLLOWED.int) { + tracker.track.status = FollowStatus.READING.int + tracker.service.update(tracker.track) + } else Observable.just(null) + } + .doOnNext { returnedTracker -> + returnedTracker?.let { + db.insertTrack(returnedTracker) + } + } + .doOnCompleted { + notifier.cancelProgressNotification() + } + .map { LibraryManga() } + } // SY <-- /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMangaDexController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMangaDexController.kt index 310812eb1..4b4e7d7a9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMangaDexController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMangaDexController.kt @@ -79,6 +79,18 @@ class SettingsMangaDexController : ) } } + + preference { + titleRes = R.string.mangadex_push_favorites_to_mangadex + summaryRes = R.string.mangadex_push_favorites_to_mangadex_summary + + onClick { + LibraryUpdateService.start( + context, + target = LibraryUpdateService.Target.PUSH_FAVORITES + ) + } + } } override fun siteLoginDialogClosed(source: Source) { diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 687f189e9..2bc4b638a 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -547,8 +547,8 @@ Unfollowed MangaDex settings - Sync Mangadex manga into your library - Pulls reading/rereading manga from Mangadex into your library + Sync Mangadex manga to your library + Pulls reading/rereading manga from MangaDex into your library if they are not already added. Use low quality thumbnails Use latest uploaded cover When enabled, it uses the latest uploaded manga cover under the /covers url instead of using the cover on MangaDex\'s manga page @@ -559,5 +559,8 @@ Add to MangaDex follows MangaDex follows Random + Sync library manga to MangaDex + Syncs any non MdList tracked manga to MangaDex as reading. + Pushed %d manga to MangaDex