Allow MDList tracking for all manga
This commit is contained in:
parent
eb5469d362
commit
4896f3d16c
@ -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 {
|
||||
|
@ -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")
|
||||
}
|
||||
|
@ -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 }
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user