Allow MDList tracking for all manga

This commit is contained in:
Jobobby04 2021-02-11 17:55:43 -05:00
parent eb5469d362
commit 4896f3d16c
5 changed files with 33 additions and 23 deletions

View File

@ -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 {

View File

@ -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<TrackSearch> = throw Exception("not used")
override suspend fun search(query: String): List<TrackSearch> {
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")
}

View File

@ -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<Int> {
// 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 }

View File

@ -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) {

View File

@ -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)
}