Separate MDList from Mangadex manga, allowing it to be used with other sources(not implemented)

This commit is contained in:
Jobobby04
2021-02-11 16:41:23 -05:00
parent 86c228243d
commit 227de5d838
6 changed files with 50 additions and 31 deletions
@@ -126,6 +126,7 @@ class ApiMangaParser(private val lang: String) {
if (publishedOrCancelled && isMangaCompleted(networkApiManga, filteredChapters)) {
status = SManga.COMPLETED
missing_chapters = null
maxChapterNumber = networkApiManga.data.manga.lastChapter?.toDoubleOrNull()?.floor()
} else {
status = tempStatus
}
@@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.await
import eu.kanade.tachiyomi.network.parseAs
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.SManga
@@ -75,9 +76,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
private fun followStatusParse(response: Response): Track {
val followsPageResult = try {
MdUtil.jsonParser.decodeFromString<FollowsIndividualSerializer>(
response.body?.string().orEmpty()
)
response.parseAs<FollowsIndividualSerializer>(MdUtil.jsonParser)
} catch (e: Exception) {
XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e)
throw e
@@ -214,14 +213,21 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
suspend fun fetchTrackingInfo(url: String): Track {
return withIOContext {
val request = GET(
"${MdUtil.apiUrl}${MdUtil.followsMangaApi}" + MdUtil.getMangaId(url),
MdUtil.apiUrl + MdUtil.followsMangaApi + MdUtil.getMangaId(url),
headers,
CacheControl.FORCE_NETWORK
)
val response = client.newCall(request).await()
val track = followStatusParse(response)
track
try {
val response = client.newCall(request).await()
followStatusParse(response)
} catch (e: Exception) {
if (e.message.equals("HTTP error 404", true)) {
XLog.enableStackTrace(10).e(e)
Track.create(TrackManager.MDLIST).apply {
status = FollowStatus.UNFOLLOWED.int
}
} else throw e
}
}
}
}
@@ -1,5 +1,6 @@
package exh.md.handlers
import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.network.await
@@ -13,6 +14,7 @@ import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.md.handlers.serializers.ApiCovers
import exh.md.handlers.serializers.ApiMangaSerializer
import exh.md.utils.MdUtil
import exh.metadata.metadata.MangaDexSearchMetadata
import okhttp3.CacheControl
import okhttp3.Headers
import okhttp3.OkHttpClient
@@ -20,6 +22,8 @@ import okhttp3.Request
import rx.Observable
import tachiyomi.source.model.ChapterInfo
import tachiyomi.source.model.MangaInfo
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
class MangaHandler(val client: OkHttpClient, val headers: Headers, val lang: String, val forceLatestCovers: Boolean = false) {
@@ -115,6 +119,16 @@ class MangaHandler(val client: OkHttpClient, val headers: Headers, val lang: Str
}
}
suspend fun getTrackingInfo(track: Track, useLowQualityCovers: Boolean): Pair<Track, MangaDexSearchMetadata> {
val mangaUrl = MdUtil.mapMdIdToMangaUrl(MdUtil.getMangaId(track.tracking_url).toInt())
val manga = MangaInfo(mangaUrl, track.title)
val response = client.newCall(apiRequest(manga)).await()
val metadata = MangaDexSearchMetadata()
ApiMangaParser(lang).parseIntoMetadata(metadata, response, emptyList())
val remoteTrack = FollowsHandler(client, headers, Injekt.get(), useLowQualityCovers).fetchTrackingInfo(track.tracking_url)
return remoteTrack to metadata
}
private fun randomMangaRequest(): Request {
return GET(MdUtil.baseUrl + MdUtil.randMangaPage, cache = CacheControl.Builder().noCache().build())
}
@@ -40,6 +40,8 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
var follow_status: Int? = null
var maxChapterNumber: Int? = null
override fun createMangaInfo(manga: MangaInfo): MangaInfo {
val key = mdUrl?.let {
try {