diff --git a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt index 8c23dfeed..c0824722c 100644 --- a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt @@ -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()) } diff --git a/app/src/main/java/eu/kanade/domain/chapter/interactor/GetMergedChapterByMangaId.kt b/app/src/main/java/eu/kanade/domain/chapter/interactor/GetMergedChapterByMangaId.kt index bf0c0ecf1..5f1dacc85 100644 --- a/app/src/main/java/eu/kanade/domain/chapter/interactor/GetMergedChapterByMangaId.kt +++ b/app/src/main/java/eu/kanade/domain/chapter/interactor/GetMergedChapterByMangaId.kt @@ -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 { - return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId), editScanlators, dedupe) + suspend fun await(mangaId: Long, dedupe: Boolean = true): List { + return transformMergedChapters(getMergedReferencesById.await(mangaId), getFromDatabase(mangaId), dedupe) } - suspend fun subscribe(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): Flow> { + suspend fun subscribe(mangaId: Long, dedupe: Boolean = true): Flow> { 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, chapterList: List, editScanlators: Boolean, dedupe: Boolean): List { - 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, chapterList: List, dedupe: Boolean): List { + return if (dedupe) dedupeChapterList(mangaReferences, chapterList) else chapterList } private fun dedupeChapterList(mangaReferences: List, chapterList: List): List { diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt index b2d4fe8e9..aefb4e5cb 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt @@ -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, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt index 33ca32055..0b719a178 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt @@ -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, diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt index 34ce39267..1051692bd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt @@ -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?): String { - val preferences = Injekt.get() - val enabledLanguages = preferences.enabledLanguages().get() - .filterNot { it in listOf("all", "other") } +fun Source.getNameForMangaInfo( + // SY --> + mergeSources: List?, + enabledLanguages: List = Injekt.get().enabledLanguages().get() + .filterNot { it in listOf("all", "other") }, + // SY <-- +): String { val hasOneActiveLanguages = enabledLanguages.size == 1 val isInEnabledLanguages = lang in enabledLanguages return when { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 6171d5544..1e1260830 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -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 { // SY --> val isExhManga = manga.isEhBasedManga() + val enabledLanguages = Injekt.get().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