From 4896f3d16cd25ca678f897c2fd8e09352d065022 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Thu, 11 Feb 2021 17:55:43 -0500 Subject: [PATCH] Allow MDList tracking for all manga --- .../tachiyomi/data/track/TrackManager.kt | 2 +- .../tachiyomi/data/track/mdlist/MdList.kt | 30 +++++++++++++++++-- .../tachiyomi/ui/manga/MangaPresenter.kt | 12 +++----- .../ui/manga/info/MangaInfoHeaderAdapter.kt | 8 +---- .../tachiyomi/ui/manga/track/TrackSheet.kt | 4 --- 5 files changed, 33 insertions(+), 23 deletions(-) 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 db3024fcd..89e0fabbb 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 @@ -48,7 +48,7 @@ class TrackManager(context: Context) { fun getService(id: Int) = services.find { it.id == id } - fun hasLoggedServices(isMangaDexManga: Boolean = true) = services.any { it.isLogged && ((it.id == MDLIST && isMangaDexManga) || it.id != MDLIST) } + fun hasLoggedServices() = services.any { it.isLogged } // SY --> fun mapTrackingOrder(status: String, context: Context): Int { 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 4639a2fa7..97cacd1c9 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 @@ -10,8 +10,12 @@ import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.toMangaInfo +import eu.kanade.tachiyomi.util.lang.awaitSingle +import eu.kanade.tachiyomi.util.lang.runAsObservable import exh.md.utils.FollowStatus import exh.md.utils.MdUtil +import tachiyomi.source.model.MangaInfo class MdList(private val context: Context, id: Int) : TrackService(id) { @@ -42,7 +46,7 @@ class MdList(private val context: Context, id: Int) : TrackService(id) { override suspend fun add(track: Track): Track = update(track) override suspend fun update(track: Track): Track { - val mdex = mdex ?: throw Exception("Mangadex not enabled") + val mdex = mdex ?: throw MangaDexNotFoundException() val remoteTrack = mdex.fetchTrackingInfo(track.tracking_url) val followStatus = FollowStatus.fromInt(track.status) @@ -87,7 +91,7 @@ class MdList(private val context: Context, id: Int) : TrackService(id) { override suspend fun bind(track: Track): Track = update(refresh(track)) override suspend fun refresh(track: Track): Track { - val mdex = mdex ?: throw Exception("Mangadex not enabled") + val mdex = mdex ?: throw MangaDexNotFoundException() val (remoteTrack, mangaMetadata) = mdex.getTrackingAndMangaInfo(track) track.copyPersonalFrom(remoteTrack) if (track.total_chapters == 0 && mangaMetadata.status == SManga.COMPLETED) { @@ -105,7 +109,27 @@ class MdList(private val context: Context, id: Int) : TrackService(id) { return track } - override suspend fun search(query: String): List = throw Exception("not used") + override suspend fun search(query: String): List { + val mdex = mdex ?: throw MangaDexNotFoundException() + return mdex.fetchSearchManga(0, query, mdex.getFilterList()) + .flatMap { page -> + runAsObservable({ + page.mangas.map { + toTrackSearch(mdex.getMangaDetails(it.toMangaInfo())) + } + }) + } + .awaitSingle() + } + + private fun toTrackSearch(mangaInfo: MangaInfo): TrackSearch = TrackSearch.create(TrackManager.MDLIST).apply { + tracking_url = MdUtil.baseUrl + mangaInfo.key + title = mangaInfo.title + cover_url = mangaInfo.cover + summary = mangaInfo.description + } override suspend fun login(username: String, password: String): Unit = throw Exception("not used") + + class MangaDexNotFoundException : Exception("Mangadex not enabled") } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index 9de332e2e..d8e1035d5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -27,7 +27,6 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.toSChapter import eu.kanade.tachiyomi.source.model.toSManga import eu.kanade.tachiyomi.source.online.MetadataSource -import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.source.online.all.MergedSource import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem @@ -267,16 +266,13 @@ class MangaPresenter( } private fun getTrackingObservable(): Observable { - // SY --> - val sourceIsMangaDex = source.getMainSource() is MangaDex || mergedManga.any { it.source in mangaDexSourceIds } - // SY <-- - if (!trackManager.hasLoggedServices(/* SY --> */sourceIsMangaDex/* SY <-- */)) { + if (!trackManager.hasLoggedServices()) { return Observable.just(0) } return db.getTracks(manga).asRxObservable() .map { tracks -> - val loggedServices = trackManager.services.filter { it.isLogged /* SY --> */ && ((it.id == TrackManager.MDLIST && sourceIsMangaDex) || it.id != TrackManager.MDLIST) /* SY <-- */ }.map { it.id } + val loggedServices = trackManager.services.filter { it.isLogged }.map { it.id } tracks // SY --> .filterNot { it.sync_id == TrackManager.MDLIST && it.status == FollowStatus.UNFOLLOWED.int } @@ -1123,8 +1119,8 @@ class MangaPresenter( .observeOn(AndroidSchedulers.mainThread()) // SY --> .map { trackItems -> - val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST } if (manga.source in mangaDexSourceIds || mergedManga.any { it.source in mangaDexSourceIds }) { + val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST } when { mdTrack == null -> { trackItems @@ -1134,7 +1130,7 @@ class MangaPresenter( } else -> trackItems } - } else mdTrack?.let { trackItems - it } ?: trackItems + } else trackItems } // SY <-- .doOnNext { _trackList = it } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt index d345a82d6..7d5a238ed 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt @@ -20,15 +20,12 @@ import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource -import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.source.online.all.MergedSource import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.getResourceColor import exh.merged.sql.models.MergedMangaReference import exh.source.MERGED_SOURCE_ID -import exh.source.getMainSource -import exh.source.mangaDexSourceIds import exh.util.SourceTagsUtil import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -116,10 +113,7 @@ class MangaInfoHeaderAdapter( } with(binding.btnTracking) { - // SY --> - val sourceIsMangaDex = source.getMainSource() is MangaDex || mergedMangaReferences.any { it.mangaSourceId in mangaDexSourceIds } - // SY <-- - if (trackManager.hasLoggedServices(/* SY --> */sourceIsMangaDex/* SY <-- */)) { + if (trackManager.hasLoggedServices()) { isVisible = true if (trackCount > 0) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt index e3723ce0c..cd5c24778 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt @@ -7,7 +7,6 @@ import androidx.core.net.toUri import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetBehavior import eu.kanade.tachiyomi.data.database.models.Manga -import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.databinding.TrackControllerBinding import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.copyToClipboard @@ -72,9 +71,6 @@ class TrackSheet( override fun onSetClick(position: Int) { val item = adapter.getItem(position) ?: return - // SY --> Kill search for now until cesco puts MdList into stable - if (item.service.id == TrackManager.MDLIST) return - // SY <-- TrackSearchDialog(controller, item.service).showDialog(controller.router, TAG_SEARCH_CONTROLLER) }