Dantotsu/app/src/main/java/ani/dantotsu/parsers/MangaParser.kt
TwistedUmbrellaX 7bcc01b94e
Merging stuff. Cleaning up code. The usual (#297)
* chore: merge core extension view

* fix: clean up a sloppy fix

* chore: merge name adapters

* fix: offset the indentation of example
2024-03-27 17:45:01 -05:00

101 lines
3.1 KiB
Kotlin

package ani.dantotsu.parsers
import ani.dantotsu.FileUrl
import ani.dantotsu.media.MediaNameAdapter
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import java.io.Serializable
abstract class MangaParser : BaseParser() {
/**
* Takes ShowResponse.link and ShowResponse.extra (if any) as arguments & gives a list of total chapters present on the site.
* **/
abstract suspend fun loadChapters(
mangaLink: String,
extra: Map<String, String>?,
sManga: SManga
): List<MangaChapter>
/**
* Takes ShowResponse.link, ShowResponse.extra & the Last Largest Chapter Number known by app as arguments
*
* Returns the latest chapter (If overriding, Make sure the chapter is actually the latest chapter)
* Returns null, if no latest chapter is found.
* **/
open suspend fun getLatestChapter(
mangaLink: String,
extra: Map<String, String>?,
sManga: SManga,
latest: Float
): MangaChapter? {
val chapter = loadChapters(mangaLink, extra, sManga)
val max = chapter
.maxByOrNull { MediaNameAdapter.findChapterNumber(it.number) ?: 0f }
return max
?.takeIf { latest < (MediaNameAdapter.findChapterNumber(it.number) ?: 0.001f) }
}
/**
* Takes MangaChapter.link as an argument & returns a list of MangaImages with their Url (with headers & transformations, if needed)
* **/
abstract suspend fun loadImages(chapterLink: String, sChapter: SChapter): List<MangaImage>
open fun getTransformation(): BitmapTransformation? = null
}
class EmptyMangaParser : MangaParser() {
override val name: String = "None"
override val saveName: String = "None"
override suspend fun loadChapters(
mangaLink: String,
extra: Map<String, String>?,
sManga: SManga
): List<MangaChapter> = emptyList()
override suspend fun loadImages(chapterLink: String, sChapter: SChapter): List<MangaImage> =
emptyList()
override suspend fun search(query: String): List<ShowResponse> = emptyList()
}
data class MangaChapter(
/**
* Number of the Chapter in "String",
*
* useful in cases where chapter is not a number
* **/
val number: String,
/**
* Link that links to the chapter page containing videos
* **/
val link: String,
//Self-Descriptive
val title: String? = null,
val description: String? = null,
val scanlator: String? = null,
val sChapter: SChapter,
val date: Long? = null,
)
data class MangaImage(
/**
* The direct url to the Image of a page in a chapter
*
* Supports jpeg,jpg,png & gif(non animated) afaik
* **/
val url: FileUrl,
val useTransformation: Boolean = false,
val page: Page? = null,
) : Serializable {
constructor(url: String, useTransformation: Boolean = false, page: Page? = null)
: this(FileUrl(url), useTransformation, page)
}