Update MDList tracker with the new tracker changes, also library update may be a bit faster

This commit is contained in:
Jobobby04 2021-01-04 03:38:30 -05:00
parent 298c1e92db
commit 7bd5157bca
2 changed files with 40 additions and 61 deletions

View File

@ -6,7 +6,6 @@ import android.content.Intent
import android.os.IBinder
import android.os.PowerManager
import androidx.core.content.ContextCompat
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
@ -33,7 +32,7 @@ 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.lang.awaitSingle
import eu.kanade.tachiyomi.util.lang.await
import eu.kanade.tachiyomi.util.lang.runAsObservable
import eu.kanade.tachiyomi.util.prepUpdateCover
import eu.kanade.tachiyomi.util.shouldDownloadNewChapters
@ -48,7 +47,6 @@ import exh.md.utils.MdUtil
import exh.metadata.metadata.base.insertFlatMetadata
import exh.source.getMainSource
import exh.util.nullIfBlank
import kotlinx.coroutines.runBlocking
import rx.Observable
import rx.Subscription
import rx.schedulers.Schedulers
@ -455,29 +453,33 @@ class LibraryUpdateService(
.subscribe()
}
return (
/* SY --> */ if (source is MergedSource) runAsObservable({ source.fetchChaptersAndSync(manga, false) })
else /* SY <-- */ runAsObservable({
source.getChapterList(manga.toMangaInfo())
.map { it.toSChapter() }
})
.map { syncChaptersWithSource(db, it, manga, source) }
// SY -->
)
.doOnNext {
if (source is MangaDex && trackManager.mdList.isLogged) {
try {
val tracks = db.getTracks(manga).executeAsBlocking()
if (tracks.isEmpty() || tracks.all { it.sync_id != TrackManager.MDLIST }) {
runAsObservable({
val tracks = db.getTracks(manga).await()
if (tracks.isEmpty() || tracks.none { it.sync_id == TrackManager.MDLIST }) {
var track = trackManager.mdList.createInitialTracker(manga)
track = runBlocking { trackManager.mdList.refresh(track).awaitSingle() }
db.insertTrack(track).executeAsBlocking()
}
} catch (e: Exception) {
XLog.tag("LibraryUpdateService").e(e)
track = trackManager.mdList.refresh(track)
db.insertTrack(track).await()
}
})
.onErrorResumeNext { Observable.just(Unit) }
.subscribeOn(Schedulers.io())
.subscribe()
}
// SY <--
return runAsObservable({
// SY -->
if (source is MergedSource) {
source.fetchChaptersAndSync(manga, false)
} else {
val sourceChapters = source.getChapterList(manga.toMangaInfo())
.map { it.toSChapter() }
syncChaptersWithSource(db, sourceChapters, manga, source)
}
})
// SY <--
}

View File

@ -11,15 +11,12 @@ 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.util.lang.await
import eu.kanade.tachiyomi.util.lang.runAsObservable
import exh.md.utils.FollowStatus
import exh.md.utils.MdUtil
import exh.metadata.metadata.MangaDexSearchMetadata
import exh.metadata.metadata.base.getFlatMetadataForManga
import exh.metadata.metadata.base.insertFlatMetadata
import exh.util.floor
import kotlinx.coroutines.runBlocking
import rx.Observable
import uy.kohesive.injekt.injectLazy
class MdList(private val context: Context, id: Int) : TrackService(id) {
@ -48,16 +45,14 @@ class MdList(private val context: Context, id: Int) : TrackService(id) {
override fun displayScore(track: Track) = track.score.toInt().toString()
override suspend fun add(track: Track): Track {
return update(track)
}
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 manga = db.getManga(track.tracking_url.substringAfter(".org"), mdex.id).await() ?: throw Exception("Manga doesnt exist")
val mangaMetadata = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise(MangaDexSearchMetadata::class) ?: throw Exception("Invalid manga metadata")
val followStatus = FollowStatus.fromInt(track.status)!!
val mangaMetadata = db.getFlatMetadataForManga(track.manga_id).await()
?.raise<MangaDexSearchMetadata>()
?: throw Exception("Invalid manga metadata")
val followStatus = FollowStatus.fromInt(track.status) ?: throw Exception("Follow status was not a valid value")
// allow follow status to update
if (mangaMetadata.follow_status != followStatus.int) {
@ -87,34 +82,16 @@ class MdList(private val context: Context, id: Int) : TrackService(id) {
override fun getCompletionStatus(): Int = FollowStatus.COMPLETED.int
override fun bind(track: Track): Observable<Track> {
val mdex = mdex ?: throw Exception("Mangadex not enabled")
return runAsObservable({ mdex.fetchTrackingInfo(track.tracking_url) })
.doOnNext { remoteTrack ->
track.copyPersonalFrom(remoteTrack)
val manga = db.getManga(track.manga_id).executeAsBlocking()
track.total_chapters = if (manga != null && manga.status == SManga.COMPLETED && remoteTrack.total_chapters == 0) {
db.getChapters(track.manga_id).executeAsBlocking().maxOfOrNull { it.chapter_number }?.floor() ?: remoteTrack.total_chapters
} else {
remoteTrack.total_chapters
}
runBlocking { update(track) }
}
}
override suspend fun bind(track: Track): Track = update(refresh(track))
override fun refresh(track: Track): Observable<Track> {
override suspend fun refresh(track: Track): Track {
val mdex = mdex ?: throw Exception("Mangadex not enabled")
return runAsObservable({ mdex.fetchTrackingInfo(track.tracking_url) })
.map { remoteTrack ->
val remoteTrack = mdex.fetchTrackingInfo(track.tracking_url)
track.copyPersonalFrom(remoteTrack)
val manga = db.getManga(track.manga_id).executeAsBlocking()
track.total_chapters = if (manga != null && manga.status == SManga.COMPLETED && remoteTrack.total_chapters == 0) {
db.getChapters(track.manga_id).executeAsBlocking().maxOfOrNull { it.chapter_number }?.floor() ?: remoteTrack.total_chapters
} else {
remoteTrack.total_chapters
}
track
if (track.total_chapters == 0 && db.getManga(track.manga_id).await()?.status == SManga.COMPLETED) {
track.total_chapters = db.getChapters(track.manga_id).await().maxOfOrNull { it.chapter_number }?.floor() ?: 0
}
return track
}
fun createInitialTracker(manga: Manga): Track {
@ -126,7 +103,7 @@ class MdList(private val context: Context, id: Int) : TrackService(id) {
return track
}
override fun search(query: String): Observable<List<TrackSearch>> = throw Exception("not used")
override suspend fun search(query: String): List<TrackSearch> = throw Exception("not used")
override suspend fun login(username: String, password: String): Unit = throw Exception("not used")
}