refactor(chapter): Make chapter recognition return its value

Also move it to domain module
This commit is contained in:
Ahmad Ansori Palembani 2024-08-16 08:32:03 +07:00
parent 1cd40907ef
commit 497d387c4b
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 26 additions and 30 deletions

View file

@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.chapter.ChapterRecognition
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
import eu.kanade.tachiyomi.util.storage.EpubFile import eu.kanade.tachiyomi.util.storage.EpubFile
import eu.kanade.tachiyomi.util.storage.fillMetadata import eu.kanade.tachiyomi.util.storage.fillMetadata
@ -19,6 +18,10 @@ import eu.kanade.tachiyomi.util.system.extension
import eu.kanade.tachiyomi.util.system.nameWithoutExtension import eu.kanade.tachiyomi.util.system.nameWithoutExtension
import eu.kanade.tachiyomi.util.system.withIOContext import eu.kanade.tachiyomi.util.system.withIOContext
import eu.kanade.tachiyomi.util.system.writeText import eu.kanade.tachiyomi.util.system.writeText
import java.io.FileInputStream
import java.io.InputStream
import java.nio.charset.StandardCharsets
import java.util.concurrent.*
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -34,13 +37,10 @@ import yokai.core.metadata.COMIC_INFO_FILE
import yokai.core.metadata.ComicInfo import yokai.core.metadata.ComicInfo
import yokai.core.metadata.copyFromComicInfo import yokai.core.metadata.copyFromComicInfo
import yokai.core.metadata.toComicInfo import yokai.core.metadata.toComicInfo
import yokai.domain.chapter.services.ChapterRecognition
import yokai.domain.storage.StorageManager import yokai.domain.storage.StorageManager
import yokai.i18n.MR import yokai.i18n.MR
import yokai.util.lang.getString import yokai.util.lang.getString
import java.io.FileInputStream
import java.io.InputStream
import java.nio.charset.StandardCharsets
import java.util.concurrent.*
class LocalSource(private val context: Context) : CatalogueSource, UnmeteredSource { class LocalSource(private val context: Context) : CatalogueSource, UnmeteredSource {
companion object { companion object {
@ -101,9 +101,9 @@ class LocalSource(private val context: Context) : CatalogueSource, UnmeteredSour
val comicInfo = decodeComicInfo(stream) val comicInfo = decodeComicInfo(stream)
comicInfo.title?.let { chapter.name = it.value } comicInfo.title?.let { chapter.name = it.value }
comicInfo.number?.value?.toFloatOrNull()?.let { chapter.chapter_number =
chapter.chapter_number = it comicInfo.number?.value?.toFloatOrNull()
} ?: ChapterRecognition.parseChapterNumber(chapter, manga) ?: ChapterRecognition.parseChapterNumber(chapter.name, manga.title, chapter.chapter_number)
comicInfo.translator?.let { chapter.scanlator = it.value } comicInfo.translator?.let { chapter.scanlator = it.value }
} }
@ -297,7 +297,10 @@ class LocalSource(private val context: Context) : CatalogueSource, UnmeteredSour
date_upload = chapterFile.lastModified() date_upload = chapterFile.lastModified()
val success = updateMetadata(this, manga, chapterFile) val success = updateMetadata(this, manga, chapterFile)
if (!success) ChapterRecognition.parseChapterNumber(this, manga) if (!success) {
chapter_number =
ChapterRecognition.parseChapterNumber(this.name, manga.title, this.chapter_number)
}
} }
} }
.sortedWith { c1, c2 -> .sortedWith { c1, c2 ->

View file

@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.domain.manga.models.Manga
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import java.util.*
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
@ -15,9 +16,9 @@ import yokai.domain.chapter.interactor.GetChapter
import yokai.domain.chapter.interactor.InsertChapter import yokai.domain.chapter.interactor.InsertChapter
import yokai.domain.chapter.interactor.UpdateChapter import yokai.domain.chapter.interactor.UpdateChapter
import yokai.domain.chapter.models.ChapterUpdate import yokai.domain.chapter.models.ChapterUpdate
import yokai.domain.chapter.services.ChapterRecognition
import yokai.domain.manga.interactor.UpdateManga import yokai.domain.manga.interactor.UpdateManga
import yokai.domain.manga.models.MangaUpdate import yokai.domain.manga.models.MangaUpdate
import java.util.*
/** /**
* Helper method for syncing the list of chapters from the source with the ones from the database. * Helper method for syncing the list of chapters from the source with the ones from the database.
@ -76,7 +77,8 @@ suspend fun syncChaptersWithSource(
source.prepareNewChapter(sourceChapter, manga) source.prepareNewChapter(sourceChapter, manga)
} }
ChapterRecognition.parseChapterNumber(sourceChapter, manga) sourceChapter.chapter_number =
ChapterRecognition.parseChapterNumber(sourceChapter.name, manga.title, sourceChapter.chapter_number)
if (shouldUpdateDbChapter(dbChapter, sourceChapter)) { if (shouldUpdateDbChapter(dbChapter, sourceChapter)) {
if ((dbChapter.name != sourceChapter.name || dbChapter.scanlator != sourceChapter.scanlator) && if ((dbChapter.name != sourceChapter.name || dbChapter.scanlator != sourceChapter.scanlator) &&
@ -102,7 +104,7 @@ suspend fun syncChaptersWithSource(
if (source is HttpSource) { if (source is HttpSource) {
source.prepareNewChapter(it, manga) source.prepareNewChapter(it, manga)
} }
ChapterRecognition.parseChapterNumber(it, manga) it.chapter_number = ChapterRecognition.parseChapterNumber(it.name, manga.title, it.chapter_number)
} }
// Chapters from the db not in the source. // Chapters from the db not in the source.

View file

@ -1,7 +1,4 @@
package eu.kanade.tachiyomi.util.chapter package yokai.domain.chapter.services
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
/** /**
* -R> = regex conversion. * -R> = regex conversion.
@ -33,17 +30,17 @@ object ChapterRecognition {
*/ */
private val unwantedWhiteSpace = Regex("""\s(?=extra|special|omake)""") private val unwantedWhiteSpace = Regex("""\s(?=extra|special|omake)""")
fun parseChapterNumber(chapter: SChapter, manga: SManga) { fun parseChapterNumber(chapterName: String, mangaTitle: String, chapterNumber: Float? = null): Float {
// If chapter number is known return. // If chapter number is known return.
if (chapter.chapter_number == -2f || chapter.chapter_number > -1f) { if (chapterNumber != null && (chapterNumber == -2f || chapterNumber > -1f)) {
return return chapterNumber
} }
// Get chapter title with lower case // Get chapter title with lower case
var name = chapter.name.lowercase() var name = chapterName.lowercase()
// Remove manga title from chapter title. // Remove manga title from chapter title.
name = name.replace(manga.title.lowercase(), "").trim() name = name.replace(mangaTitle.lowercase(), "").trim()
// Remove comma's or hyphens. // Remove comma's or hyphens.
name = name.replace(',', '.').replace('-', '.') name = name.replace(',', '.').replace('-', '.')
@ -54,17 +51,11 @@ object ChapterRecognition {
// Remove unwanted tags. // Remove unwanted tags.
name = unwanted.replace(name, "") name = unwanted.replace(name, "")
basic.find(name)?.let { basic.find(name)?.let { return getChapterNumberFromMatch(it) }
chapter.chapter_number = getChapterNumberFromMatch(it)
return
}
number.find(name)?.let { number.find(name)?.let { return getChapterNumberFromMatch(it) }
chapter.chapter_number = getChapterNumberFromMatch(it)
return
}
// if (chapter.chapter_number == null) chapter.chapter_number = -1f return chapterNumber ?: -1f
} }
/** /**