Add source to merged chapters without messing with the scanlators
This commit is contained in:
parent
1acb7a1a35
commit
0a6672a768
@ -118,7 +118,7 @@ class SYDomainModule : InjektModule {
|
||||
addFactory { GetMergedManga(get()) }
|
||||
addFactory { GetMergedMangaById(get()) }
|
||||
addFactory { GetMergedReferencesById(get()) }
|
||||
addFactory { GetMergedChapterByMangaId(get(), get(), get()) }
|
||||
addFactory { GetMergedChapterByMangaId(get(), get()) }
|
||||
addFactory { InsertMergedReference(get()) }
|
||||
addFactory { UpdateMergedSettings(get()) }
|
||||
addFactory { DeleteByMergeId(get()) }
|
||||
|
@ -3,7 +3,6 @@ package eu.kanade.domain.chapter.interactor
|
||||
import eu.kanade.domain.chapter.model.Chapter
|
||||
import eu.kanade.domain.chapter.repository.ChapterRepository
|
||||
import eu.kanade.domain.manga.interactor.GetMergedReferencesById
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.util.system.logcat
|
||||
import exh.merged.sql.models.MergedMangaReference
|
||||
import exh.source.MERGED_SOURCE_ID
|
||||
@ -15,18 +14,17 @@ import logcat.LogPriority
|
||||
class GetMergedChapterByMangaId(
|
||||
private val chapterRepository: ChapterRepository,
|
||||
private val getMergedReferencesById: GetMergedReferencesById,
|
||||
private val sourceManager: SourceManager,
|
||||
) {
|
||||
|
||||
suspend fun await(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<Chapter> {
|
||||
return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId), editScanlators, dedupe)
|
||||
suspend fun await(mangaId: Long, dedupe: Boolean = true): List<Chapter> {
|
||||
return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId), dedupe)
|
||||
}
|
||||
|
||||
suspend fun subscribe(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): Flow<List<Chapter>> {
|
||||
suspend fun subscribe(mangaId: Long, dedupe: Boolean = true): Flow<List<Chapter>> {
|
||||
return try {
|
||||
chapterRepository.getMergedChapterByMangaIdAsFlow(mangaId)
|
||||
.combine(getMergedReferencesById.subscribe(mangaId)) { chapters, references ->
|
||||
transformMergedChapters(references, chapters, editScanlators, dedupe)
|
||||
transformMergedChapters(references, chapters, dedupe)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
logcat(LogPriority.ERROR, e)
|
||||
@ -44,27 +42,8 @@ class GetMergedChapterByMangaId(
|
||||
}
|
||||
|
||||
// TODO more chapter dedupe
|
||||
fun transformMergedChapters(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>, editScanlators: Boolean, dedupe: Boolean): List<Chapter> {
|
||||
val chapters = if (editScanlators) {
|
||||
val sources = mangaReferences.map { sourceManager.getOrStub(it.mangaSourceId) to it.mangaId }
|
||||
chapterList.map { chapter ->
|
||||
val source = sources.firstOrNull { chapter.mangaId == it.second }?.first
|
||||
if (source != null) {
|
||||
chapter.copy(
|
||||
scanlator = if (chapter.scanlator.isNullOrBlank()) {
|
||||
source.name
|
||||
} else {
|
||||
"$source: ${chapter.scanlator}"
|
||||
},
|
||||
)
|
||||
} else {
|
||||
chapter
|
||||
}
|
||||
}
|
||||
} else {
|
||||
chapterList
|
||||
}
|
||||
return if (dedupe) dedupeChapterList(mangaReferences, chapters) else chapters
|
||||
fun transformMergedChapters(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>, dedupe: Boolean): List<Chapter> {
|
||||
return if (dedupe) dedupeChapterList(mangaReferences, chapterList) else chapterList
|
||||
}
|
||||
|
||||
private fun dedupeChapterList(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>): List<Chapter> {
|
||||
|
@ -810,6 +810,9 @@ private fun LazyListScope.sharedChapterItems(
|
||||
date = chapterItem.dateUploadString,
|
||||
readProgress = chapterItem.readProgressString,
|
||||
scanlator = chapterItem.chapter.scanlator.takeIf { !it.isNullOrBlank() /* SY --> */ && chapterItem.showScanlator /* SY <-- */ },
|
||||
// SY -->
|
||||
sourceName = chapterItem.sourceName,
|
||||
// SY <--
|
||||
read = chapterItem.chapter.read,
|
||||
bookmark = chapterItem.chapter.bookmark,
|
||||
selected = chapterItem.selected,
|
||||
|
@ -42,6 +42,9 @@ fun MangaChapterListItem(
|
||||
date: String?,
|
||||
readProgress: String?,
|
||||
scanlator: String?,
|
||||
// SY -->
|
||||
sourceName: String?,
|
||||
// SY <--
|
||||
read: Boolean,
|
||||
bookmark: Boolean,
|
||||
selected: Boolean,
|
||||
@ -104,7 +107,7 @@ fun MangaChapterListItem(
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
if (readProgress != null || scanlator != null) DotSeparatorText()
|
||||
if (readProgress != null || scanlator != null /* SY --> */ || sourceName != null/* SY <-- */) DotSeparatorText()
|
||||
}
|
||||
if (readProgress != null) {
|
||||
Text(
|
||||
@ -113,8 +116,18 @@ fun MangaChapterListItem(
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
modifier = Modifier.alpha(ReadItemAlpha),
|
||||
)
|
||||
if (scanlator != null/* SY --> */ || sourceName != null/* SY <-- */) DotSeparatorText()
|
||||
}
|
||||
// SY -->
|
||||
if (sourceName != null) {
|
||||
Text(
|
||||
text = sourceName,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
if (scanlator != null) DotSeparatorText()
|
||||
}
|
||||
// SY <--
|
||||
if (scanlator != null) {
|
||||
Text(
|
||||
text = scanlator,
|
||||
|
@ -13,10 +13,13 @@ fun Source.getPreferenceKey(): String = "source_$id"
|
||||
|
||||
fun Source.toSourceData(): SourceData = SourceData(id = id, lang = lang, name = name)
|
||||
|
||||
fun Source.getNameForMangaInfo(mergeSources: List<Source>?): String {
|
||||
val preferences = Injekt.get<SourcePreferences>()
|
||||
val enabledLanguages = preferences.enabledLanguages().get()
|
||||
.filterNot { it in listOf("all", "other") }
|
||||
fun Source.getNameForMangaInfo(
|
||||
// SY -->
|
||||
mergeSources: List<Source>?,
|
||||
enabledLanguages: List<String> = Injekt.get<SourcePreferences>().enabledLanguages().get()
|
||||
.filterNot { it in listOf("all", "other") },
|
||||
// SY <--
|
||||
): String {
|
||||
val hasOneActiveLanguages = enabledLanguages.size == 1
|
||||
val isInEnabledLanguages = lang in enabledLanguages
|
||||
return when {
|
||||
|
@ -45,6 +45,7 @@ import eu.kanade.domain.manga.model.PagePreview
|
||||
import eu.kanade.domain.manga.model.TriStateFilter
|
||||
import eu.kanade.domain.manga.model.isLocal
|
||||
import eu.kanade.domain.manga.model.toDbManga
|
||||
import eu.kanade.domain.source.service.SourcePreferences
|
||||
import eu.kanade.domain.track.interactor.GetTracks
|
||||
import eu.kanade.domain.track.interactor.InsertTrack
|
||||
import eu.kanade.domain.track.model.toDbTrack
|
||||
@ -66,6 +67,7 @@ import eu.kanade.tachiyomi.source.LocalSource
|
||||
import eu.kanade.tachiyomi.source.PagePreviewSource
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.getNameForMangaInfo
|
||||
import eu.kanade.tachiyomi.source.online.MetadataSource
|
||||
import eu.kanade.tachiyomi.source.online.all.MergedSource
|
||||
import eu.kanade.tachiyomi.ui.manga.track.TrackItem
|
||||
@ -324,7 +326,7 @@ class MangaInfoScreenModel(
|
||||
coroutineScope.launchIO {
|
||||
val manga = getMangaAndChapters.awaitManga(mangaId)
|
||||
// SY -->
|
||||
val chapters = (if (manga.source == MERGED_SOURCE_ID) getMergedChapterByMangaId.await(mangaId, true) else getMangaAndChapters.awaitChapters(mangaId))
|
||||
val chapters = (if (manga.source == MERGED_SOURCE_ID) getMergedChapterByMangaId.await(mangaId) else getMangaAndChapters.awaitChapters(mangaId))
|
||||
.toChapterItemsParams(manga, null)
|
||||
val mergedData = getMergedReferencesById.await(mangaId).takeIf { it.isNotEmpty() }?.let { references ->
|
||||
MergedMangaData(
|
||||
@ -933,11 +935,15 @@ class MangaInfoScreenModel(
|
||||
): List<ChapterItem> {
|
||||
// SY -->
|
||||
val isExhManga = manga.isEhBasedManga()
|
||||
val enabledLanguages = Injekt.get<SourcePreferences>().enabledLanguages().get()
|
||||
.filterNot { it in listOf("all", "other") }
|
||||
// SY <--
|
||||
return map { chapter ->
|
||||
val activeDownload = downloadManager.queue.find { chapter.id == it.chapter.id }
|
||||
val chapter = chapter.let { if (mergedData != null) it.toMergedDownloadedChapter() else it }
|
||||
// SY -->
|
||||
val manga = mergedData?.manga?.get(chapter.mangaId) ?: manga
|
||||
val source = mergedData?.sources?.find { manga.source == it.id }
|
||||
// SY <--
|
||||
val downloaded = downloadManager.isChapterDownloaded(
|
||||
// SY -->
|
||||
chapter.name,
|
||||
@ -979,6 +985,7 @@ class MangaInfoScreenModel(
|
||||
)
|
||||
},
|
||||
// SY -->
|
||||
sourceName = source?.getNameForMangaInfo(null, enabledLanguages = enabledLanguages),
|
||||
showScanlator = !isExhManga,
|
||||
// SY <--
|
||||
)
|
||||
@ -986,10 +993,6 @@ class MangaInfoScreenModel(
|
||||
}
|
||||
|
||||
// SY -->
|
||||
private fun Chapter.toMergedDownloadedChapter() = copy(
|
||||
scanlator = scanlator?.substringAfter(": "),
|
||||
)
|
||||
|
||||
private fun getPagePreviews(manga: Manga, source: Source) {
|
||||
coroutineScope.launchIO {
|
||||
when (val result = getPagePreviews.await(manga, source, 1)) {
|
||||
@ -1174,7 +1177,7 @@ class MangaInfoScreenModel(
|
||||
if (state.source is MergedSource) {
|
||||
chapters.groupBy { it.mangaId }.forEach { map ->
|
||||
val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach
|
||||
downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadedChapter() })
|
||||
downloadManager.downloadChapters(manga, map.value)
|
||||
}
|
||||
} else { /* SY <-- */
|
||||
val manga = state.manga
|
||||
@ -1661,7 +1664,8 @@ data class ChapterItem(
|
||||
val selected: Boolean = false,
|
||||
|
||||
// SY -->
|
||||
val showScanlator: Boolean = true,
|
||||
val sourceName: String?,
|
||||
val showScanlator: Boolean,
|
||||
// SY <--
|
||||
) {
|
||||
val isDownloaded = downloadState == Download.State.DOWNLOADED
|
||||
|
Loading…
x
Reference in New Issue
Block a user