Separate MDList from Mangadex manga, allowing it to be used with other sources(not implemented)
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user