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 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 -->
|
// SY -->
|
||||||
fun mapTrackingOrder(status: String, context: Context): Int {
|
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.TrackService
|
||||||
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
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.FollowStatus
|
||||||
import exh.md.utils.MdUtil
|
import exh.md.utils.MdUtil
|
||||||
|
import tachiyomi.source.model.MangaInfo
|
||||||
|
|
||||||
class MdList(private val context: Context, id: Int) : TrackService(id) {
|
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 add(track: Track): Track = update(track)
|
||||||
|
|
||||||
override suspend fun update(track: Track): 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 remoteTrack = mdex.fetchTrackingInfo(track.tracking_url)
|
||||||
val followStatus = FollowStatus.fromInt(track.status)
|
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 bind(track: Track): Track = update(refresh(track))
|
||||||
|
|
||||||
override suspend fun refresh(track: Track): 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)
|
val (remoteTrack, mangaMetadata) = mdex.getTrackingAndMangaInfo(track)
|
||||||
track.copyPersonalFrom(remoteTrack)
|
track.copyPersonalFrom(remoteTrack)
|
||||||
if (track.total_chapters == 0 && mangaMetadata.status == SManga.COMPLETED) {
|
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
|
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")
|
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.toSChapter
|
||||||
import eu.kanade.tachiyomi.source.model.toSManga
|
import eu.kanade.tachiyomi.source.model.toSManga
|
||||||
import eu.kanade.tachiyomi.source.online.MetadataSource
|
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.source.online.all.MergedSource
|
||||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||||
import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem
|
import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem
|
||||||
@ -267,16 +266,13 @@ class MangaPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getTrackingObservable(): Observable<Int> {
|
private fun getTrackingObservable(): Observable<Int> {
|
||||||
// SY -->
|
if (!trackManager.hasLoggedServices()) {
|
||||||
val sourceIsMangaDex = source.getMainSource() is MangaDex || mergedManga.any { it.source in mangaDexSourceIds }
|
|
||||||
// SY <--
|
|
||||||
if (!trackManager.hasLoggedServices(/* SY --> */sourceIsMangaDex/* SY <-- */)) {
|
|
||||||
return Observable.just(0)
|
return Observable.just(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return db.getTracks(manga).asRxObservable()
|
return db.getTracks(manga).asRxObservable()
|
||||||
.map { tracks ->
|
.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
|
tracks
|
||||||
// SY -->
|
// SY -->
|
||||||
.filterNot { it.sync_id == TrackManager.MDLIST && it.status == FollowStatus.UNFOLLOWED.int }
|
.filterNot { it.sync_id == TrackManager.MDLIST && it.status == FollowStatus.UNFOLLOWED.int }
|
||||||
@ -1123,8 +1119,8 @@ class MangaPresenter(
|
|||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
// SY -->
|
// SY -->
|
||||||
.map { trackItems ->
|
.map { trackItems ->
|
||||||
val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST }
|
|
||||||
if (manga.source in mangaDexSourceIds || mergedManga.any { it.source in mangaDexSourceIds }) {
|
if (manga.source in mangaDexSourceIds || mergedManga.any { it.source in mangaDexSourceIds }) {
|
||||||
|
val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST }
|
||||||
when {
|
when {
|
||||||
mdTrack == null -> {
|
mdTrack == null -> {
|
||||||
trackItems
|
trackItems
|
||||||
@ -1134,7 +1130,7 @@ class MangaPresenter(
|
|||||||
}
|
}
|
||||||
else -> trackItems
|
else -> trackItems
|
||||||
}
|
}
|
||||||
} else mdTrack?.let { trackItems - it } ?: trackItems
|
} else trackItems
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
.doOnNext { _trackList = it }
|
.doOnNext { _trackList = it }
|
||||||
|
@ -20,15 +20,12 @@ import eu.kanade.tachiyomi.source.Source
|
|||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
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.source.online.all.MergedSource
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import exh.merged.sql.models.MergedMangaReference
|
import exh.merged.sql.models.MergedMangaReference
|
||||||
import exh.source.MERGED_SOURCE_ID
|
import exh.source.MERGED_SOURCE_ID
|
||||||
import exh.source.getMainSource
|
|
||||||
import exh.source.mangaDexSourceIds
|
|
||||||
import exh.util.SourceTagsUtil
|
import exh.util.SourceTagsUtil
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
@ -116,10 +113,7 @@ class MangaInfoHeaderAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
with(binding.btnTracking) {
|
with(binding.btnTracking) {
|
||||||
// SY -->
|
if (trackManager.hasLoggedServices()) {
|
||||||
val sourceIsMangaDex = source.getMainSource() is MangaDex || mergedMangaReferences.any { it.mangaSourceId in mangaDexSourceIds }
|
|
||||||
// SY <--
|
|
||||||
if (trackManager.hasLoggedServices(/* SY --> */sourceIsMangaDex/* SY <-- */)) {
|
|
||||||
isVisible = true
|
isVisible = true
|
||||||
|
|
||||||
if (trackCount > 0) {
|
if (trackCount > 0) {
|
||||||
|
@ -7,7 +7,6 @@ import androidx.core.net.toUri
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.databinding.TrackControllerBinding
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
@ -72,9 +71,6 @@ class TrackSheet(
|
|||||||
|
|
||||||
override fun onSetClick(position: Int) {
|
override fun onSetClick(position: Int) {
|
||||||
val item = adapter.getItem(position) ?: return
|
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)
|
TrackSearchDialog(controller, item.service).showDialog(controller.router, TAG_SEARCH_CONTROLLER)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user