Remove 1.x source models (#7781)

(cherry picked from commit e36e9d9d5c)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt
#	app/src/main/java/eu/kanade/domain/manga/model/Manga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/Source.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
This commit is contained in:
stevenyomi
2022-08-19 02:07:13 +08:00
committed by Jobobby04
parent fff031cf1c
commit 39e0d7f4e8
58 changed files with 414 additions and 509 deletions
@@ -3,6 +3,7 @@ package exh.md.handlers
import eu.kanade.domain.manga.interactor.GetFlatMetadataById
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.InsertFlatMetadata
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import exh.log.xLogE
import exh.md.dto.ChapterDataDto
@@ -17,8 +18,6 @@ import exh.metadata.metadata.base.RaisedTag
import exh.util.capitalize
import exh.util.floor
import exh.util.nullIfEmpty
import tachiyomi.source.model.ChapterInfo
import tachiyomi.source.model.MangaInfo
import uy.kohesive.injekt.injectLazy
import java.util.Locale
@@ -40,13 +39,13 @@ class ApiMangaParser(
?: error("Could not find no-args constructor for meta class: ${metaClass.qualifiedName}!")
suspend fun parseToManga(
manga: MangaInfo,
manga: SManga,
sourceId: Long,
input: MangaDto,
simpleChapters: List<String>,
statistics: StatisticsMangaDto?,
): MangaInfo {
val mangaId = getManga.await(manga.key, sourceId)?.id
): SManga {
val mangaId = getManga.await(manga.url, sourceId)?.id
val metadata = if (mangaId != null) {
val flatMetadata = getFlatMetadataById.await(mangaId)
flatMetadata?.raise(metaClass) ?: newMetaInstance()
@@ -184,7 +183,7 @@ class ApiMangaParser(
else -> SManga.UNKNOWN
}
fun chapterListParse(chapterListResponse: List<ChapterDataDto>, groupMap: Map<String, String>): List<ChapterInfo> {
fun chapterListParse(chapterListResponse: List<ChapterDataDto>, groupMap: Map<String, String>): List<SChapter> {
val now = System.currentTimeMillis()
return chapterListResponse
.filterNot { MdUtil.parseDate(it.attributes.publishAt) > now && it.attributes.externalUrl == null }
@@ -202,7 +201,7 @@ class ApiMangaParser(
private fun mapChapter(
networkChapter: ChapterDataDto,
groups: Map<String, String>,
): ChapterInfo {
): SChapter {
val attributes = networkChapter.attributes
val key = MdUtil.chapterSuffix + networkChapter.id
val chapterName = StringBuilder()
@@ -265,11 +264,11 @@ class ApiMangaParser(
// chapter.language = MdLang.fromIsoCode(attributes.translatedLanguage)?.prettyPrint ?: ""
return ChapterInfo(
key = key,
return SChapter(
url = key,
name = name,
scanlator = scanlator,
dateUpload = dateUpload,
date_upload = dateUpload,
)
}
}
@@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.network.await
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import eu.kanade.tachiyomi.network.parseAs
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import exh.log.xLogD
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -20,7 +21,6 @@ import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import rx.Observable
import tachiyomi.source.model.ChapterInfo
import java.util.concurrent.TimeUnit
class BilibiliHandler(currentClient: OkHttpClient) {
@@ -44,9 +44,9 @@ class BilibiliHandler(currentClient: OkHttpClient) {
val mangaUrl = getMangaUrl(externalUrl)
val chapters = getChapterList(mangaUrl)
val chapter = chapters
.find { it.number == chapterNumber.toFloatOrNull() }
.find { it.chapter_number == chapterNumber.toFloatOrNull() }
?: throw Exception("Unknown chapter $chapterNumber")
chapter.key
chapter.url
}
return fetchPageList(chapterUrl)
@@ -91,12 +91,12 @@ class BilibiliHandler(currentClient: OkHttpClient) {
)
}
suspend fun getChapterList(mangaUrl: String): List<ChapterInfo> {
suspend fun getChapterList(mangaUrl: String): List<SChapter> {
val response = client.newCall(mangaDetailsApiRequest(mangaUrl)).await()
return chapterListParse(response)
}
fun chapterListParse(response: Response): List<ChapterInfo> {
fun chapterListParse(response: Response): List<SChapter> {
val result = response.parseAs<BilibiliResultDto<BilibiliComicDto>>()
if (result.code != 0) {
@@ -108,10 +108,10 @@ class BilibiliHandler(currentClient: OkHttpClient) {
.map { ep -> chapterFromObject(ep, result.data.id) }
}
private fun chapterFromObject(episode: BilibiliEpisodeDto, comicId: Int): ChapterInfo = ChapterInfo(
key = "/mc$comicId/${episode.id}",
private fun chapterFromObject(episode: BilibiliEpisodeDto, comicId: Int): SChapter = SChapter(
url = "/mc$comicId/${episode.id}",
name = "Ep. " + episode.order.toString().removeSuffix(".0") + " - " + episode.title,
number = episode.order,
chapter_number = episode.order,
)
private suspend fun fetchPageList(chapterUrl: String): List<Page> {
@@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.toSManga
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.md.dto.MangaDataDto
import exh.md.dto.PersonalRatingDto
@@ -57,7 +56,7 @@ class FollowsHandler(
MdUtil.createMangaEntry(
it,
lang,
).toSManga() to MangaDexSearchMetadata().apply {
) to MangaDexSearchMetadata().apply {
followStatus = FollowStatus.fromDex(statuses[it.id]).int
}
}.sortedWith(comparator)
@@ -3,9 +3,6 @@ package exh.md.handlers
import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.toMangaInfo
import eu.kanade.tachiyomi.source.model.toSChapter
import eu.kanade.tachiyomi.source.model.toSManga
import eu.kanade.tachiyomi.util.lang.runAsObservable
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.md.dto.ChapterDataDto
@@ -19,8 +16,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import rx.Observable
import tachiyomi.source.model.ChapterInfo
import tachiyomi.source.model.MangaInfo
class MangaHandler(
private val lang: String,
@@ -28,9 +23,9 @@ class MangaHandler(
private val apiMangaParser: ApiMangaParser,
private val followsHandler: FollowsHandler,
) {
suspend fun getMangaDetails(manga: MangaInfo, sourceId: Long): MangaInfo {
suspend fun getMangaDetails(manga: SManga, sourceId: Long): SManga {
return coroutineScope {
val mangaId = MdUtil.getMangaId(manga.key)
val mangaId = MdUtil.getMangaId(manga.url)
val response = async(Dispatchers.IO) { service.viewManga(mangaId) }
val simpleChapters = async(Dispatchers.IO) { getSimpleChapters(manga) }
val statistics = async(Dispatchers.IO) { service.mangasRating(mangaId).statistics[mangaId] }
@@ -46,19 +41,19 @@ class MangaHandler(
fun fetchMangaDetailsObservable(manga: SManga, sourceId: Long): Observable<SManga> {
return runAsObservable {
getMangaDetails(manga.toMangaInfo(), sourceId).toSManga()
getMangaDetails(manga, sourceId)
}
}
fun fetchChapterListObservable(manga: SManga, blockedGroups: String, blockedUploaders: String): Observable<List<SChapter>> = runAsObservable {
getChapterList(manga.toMangaInfo(), blockedGroups, blockedUploaders).map { it.toSChapter() }
getChapterList(manga, blockedGroups, blockedUploaders)
}
suspend fun getChapterList(manga: MangaInfo, blockedGroups: String, blockedUploaders: String): List<ChapterInfo> {
suspend fun getChapterList(manga: SManga, blockedGroups: String, blockedUploaders: String): List<SChapter> {
return withIOContext {
val results = mdListCall {
service.viewChapters(
MdUtil.getMangaId(manga.key),
MdUtil.getMangaId(manga.url),
lang,
it,
blockedGroups,
@@ -109,8 +104,8 @@ class MangaHandler(
}
}
private suspend fun getSimpleChapters(manga: MangaInfo): List<String> {
return runCatching { service.aggregateChapters(MdUtil.getMangaId(manga.key), lang) }
private suspend fun getSimpleChapters(manga: SManga): List<String> {
return runCatching { service.aggregateChapters(MdUtil.getMangaId(manga.url), lang) }
.onFailure {
if (it is CancellationException) throw it
}
@@ -4,7 +4,9 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.track.mdlist.MdList
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.log.xLogD
import exh.md.dto.AtHomeDto
@@ -14,8 +16,6 @@ import exh.md.utils.MdUtil
import okhttp3.Headers
import okhttp3.Response
import rx.Observable
import tachiyomi.source.Source
import tachiyomi.source.model.ChapterInfo
import kotlin.reflect.full.superclasses
import kotlin.reflect.jvm.isAccessible
@@ -31,9 +31,9 @@ class PageHandler(
private val mdList: MdList,
) {
suspend fun fetchPageList(chapter: ChapterInfo, isLogged: Boolean, usePort443Only: Boolean, dataSaver: Boolean, mangadex: Source): List<Page> {
suspend fun fetchPageList(chapter: SChapter, isLogged: Boolean, usePort443Only: Boolean, dataSaver: Boolean, mangadex: Source): List<Page> {
return withIOContext {
val chapterResponse = service.viewChapter(MdUtil.getChapterId(chapter.key))
val chapterResponse = service.viewChapter(MdUtil.getChapterId(chapter.url))
if (chapterResponse.data.attributes.externalUrl != null && chapterResponse.data.attributes.pages == 0) {
when {
@@ -63,9 +63,9 @@ class PageHandler(
}
val atHomeRequestUrl = if (usePort443Only) {
"${MdApi.atHomeServer}/${MdUtil.getChapterId(chapter.key)}?forcePort443=true"
"${MdApi.atHomeServer}/${MdUtil.getChapterId(chapter.url)}?forcePort443=true"
} else {
"${MdApi.atHomeServer}/${MdUtil.getChapterId(chapter.key)}"
"${MdApi.atHomeServer}/${MdUtil.getChapterId(chapter.url)}"
}
updateExtensionVariable(mangadex, atHomeRequestUrl)
@@ -1,7 +1,7 @@
package exh.md.handlers
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.toSManga
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.md.dto.RelationListDto
import exh.md.dto.SimilarMangaDto
@@ -10,7 +10,6 @@ import exh.md.service.SimilarService
import exh.md.utils.MangaDexRelation
import exh.md.utils.MdUtil
import exh.metadata.metadata.MangaDexSearchMetadata
import tachiyomi.source.model.MangaInfo
class SimilarHandler(
private val lang: String,
@@ -18,8 +17,8 @@ class SimilarHandler(
private val similarService: SimilarService,
) {
suspend fun getSimilar(manga: MangaInfo): MetadataMangasPage {
val similarDto = withIOContext { similarService.getSimilarManga(MdUtil.getMangaId(manga.key)) }
suspend fun getSimilar(manga: SManga): MetadataMangasPage {
val similarDto = withIOContext { similarService.getSimilarManga(MdUtil.getMangaId(manga.url)) }
return similarDtoToMangaListPage(similarDto)
}
@@ -31,14 +30,14 @@ class SimilarHandler(
}
val mangaList = service.viewMangas(ids).data.map {
MdUtil.createMangaEntry(it, lang).toSManga()
MdUtil.createMangaEntry(it, lang)
}
return MetadataMangasPage(mangaList, false, List(mangaList.size) { MangaDexSearchMetadata().also { it.relation = MangaDexRelation.SIMILAR } })
}
suspend fun getRelated(manga: MangaInfo): MetadataMangasPage {
val relatedListDto = withIOContext { service.relatedManga(MdUtil.getMangaId(manga.key)) }
suspend fun getRelated(manga: SManga): MetadataMangasPage {
val relatedListDto = withIOContext { service.relatedManga(MdUtil.getMangaId(manga.url)) }
return relatedDtoToMangaListPage(relatedListDto)
}
@@ -50,7 +49,7 @@ class SimilarHandler(
.map { it.id }
val mangaList = service.viewMangas(ids).data.map {
MdUtil.createMangaEntry(it, lang).toSManga()
MdUtil.createMangaEntry(it, lang)
}
return MetadataMangasPage(
@@ -1,7 +1,6 @@
package exh.md.similar
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toMangaInfo
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.ui.browse.source.browse.NoResultsException
@@ -16,8 +15,8 @@ class MangaDexSimilarPager(val manga: Manga, val source: MangaDex) : Pager() {
override suspend fun requestNextPage() {
val mangasPage = coroutineScope {
val similarPageDef = async { source.getMangaSimilar(manga.toMangaInfo()) }
val relatedPageDef = async { source.getMangaRelated(manga.toMangaInfo()) }
val similarPageDef = async { source.getMangaSimilar(manga.toSManga()) }
val relatedPageDef = async { source.getMangaRelated(manga.toSManga()) }
val similarPage = similarPageDef.await()
val relatedPage = relatedPageDef.await()
+9 -10
View File
@@ -3,6 +3,7 @@ package exh.md.utils
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.track.mdlist.MdList
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.all.MangaDex
import exh.log.xLogD
@@ -24,8 +25,6 @@ import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import org.jsoup.parser.Parser
import tachiyomi.source.model.ChapterInfo
import tachiyomi.source.model.MangaInfo
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.text.SimpleDateFormat
@@ -233,7 +232,7 @@ class MdUtil {
return scanlators.sorted().joinToString(scanlatorSeparator)
}
fun getMissingChapterCount(chapters: List<ChapterInfo>, mangaStatus: Int): String? {
fun getMissingChapterCount(chapters: List<SChapter>, mangaStatus: Int): String? {
if (mangaStatus == SManga.COMPLETED) return null
val remove0ChaptersFromCount = chapters.distinctBy {
@@ -242,14 +241,14 @@ class MdUtil {
} else {*/
it.name
/*}*/
}.sortedByDescending { it.number }
}.sortedByDescending { it.chapter_number }
remove0ChaptersFromCount.firstOrNull()?.let { chapter ->
val chpNumber = chapter.number.floor()
val chpNumber = chapter.chapter_number.floor()
val allChapters = (1..chpNumber).toMutableSet()
remove0ChaptersFromCount.forEach {
allChapters.remove(it.number.floor())
allChapters.remove(it.chapter_number.floor())
}
if (allChapters.isEmpty()) return null
@@ -264,11 +263,11 @@ class MdUtil {
fun parseDate(dateAsString: String): Long =
dateFormatter.parse(dateAsString)?.time ?: 0
fun createMangaEntry(json: MangaDataDto, lang: String): MangaInfo {
return MangaInfo(
key = buildMangaUrl(json.id),
fun createMangaEntry(json: MangaDataDto, lang: String): SManga {
return SManga(
url = buildMangaUrl(json.id),
title = cleanString(getTitleFromManga(json.attributes, lang)),
cover = json.relationships
thumbnail_url = json.relationships
.firstOrNull { relationshipDto -> relationshipDto.type == MdConstants.Types.coverArt }
?.attributes
?.fileName