This commit is contained in:
Jobobby04 2021-06-29 19:00:34 -04:00
parent 56f4b1f224
commit 60f9391b4e
4 changed files with 21 additions and 20 deletions

View File

@ -612,7 +612,7 @@ class MangaController :
// SY --> // SY -->
fun openMergedMangaWebview() { fun openMergedMangaWebview() {
val sourceManager: SourceManager = Injekt.get() val sourceManager: SourceManager = Injekt.get()
val mergedManga = presenter.mergedManga.filterNot { it.source == MERGED_SOURCE_ID } val mergedManga = presenter.mergedManga.values.filterNot { it.source == MERGED_SOURCE_ID }
val sources = mergedManga.map { sourceManager.getOrStub(it.source) } val sources = mergedManga.map { sourceManager.getOrStub(it.source) }
MaterialDialog(activity!!) MaterialDialog(activity!!)
.title(R.string.action_open_in_web_view) .title(R.string.action_open_in_web_view)

View File

@ -148,7 +148,7 @@ class MangaPresenter(
var meta: RaisedSearchMetadata? = null var meta: RaisedSearchMetadata? = null
var mergedManga = emptyList<Manga>() var mergedManga = emptyMap<Long, Manga>()
private set private set
var dedupe: Boolean = true var dedupe: Boolean = true
@ -161,7 +161,7 @@ class MangaPresenter(
// SY --> // SY -->
if (source is MergedSource) { if (source is MergedSource) {
launchIO { mergedManga = db.getMergedMangas(manga.id!!).executeAsBlocking() } launchIO { mergedManga = db.getMergedMangas(manga.id!!).executeAsBlocking().associateBy { it.id!! } }
} }
// SY <-- // SY <--
@ -559,7 +559,7 @@ class MangaPresenter(
fun deleteDownloads() { fun deleteDownloads() {
// SY --> // SY -->
if (source is MergedSource) { if (source is MergedSource) {
val mergedManga = mergedManga.map { it to sourceManager.getOrStub(it.source) } val mergedManga = mergedManga.map { it.value to sourceManager.getOrStub(it.value.source) }
mergedManga.forEach { (manga, source) -> mergedManga.forEach { (manga, source) ->
downloadManager.deleteManga(manga, source) downloadManager.deleteManga(manga, source)
} }
@ -685,7 +685,7 @@ class MangaPresenter(
private fun observeDownloads() { private fun observeDownloads() {
// SY --> // SY -->
val isMergedSource = source is MergedSource val isMergedSource = source is MergedSource
val mergedIds = if (isMergedSource) mergedManga.mapNotNull { it.id } else emptyList() val mergedIds = if (isMergedSource) mergedManga.keys else emptySet()
// SY <-- // SY <--
observeDownloadsStatusSubscription?.let { remove(it) } observeDownloadsStatusSubscription?.let { remove(it) }
observeDownloadsStatusSubscription = downloadManager.queue.getStatusObservable() observeDownloadsStatusSubscription = downloadManager.queue.getStatusObservable()
@ -741,7 +741,7 @@ class MangaPresenter(
val isMergedSource = source is MergedSource val isMergedSource = source is MergedSource
// SY <-- // SY <--
chapters chapters
.filter { downloadManager.isChapterDownloaded(/* SY --> */ if (isMergedSource) it.toMergedDownloadChapter() else it, if (isMergedSource) mergedManga.firstOrNull { manga -> it.manga_id == manga.id } ?: manga else /* SY <-- */ manga) } .filter { downloadManager.isChapterDownloaded(/* SY --> */ if (isMergedSource) it.toMergedDownloadChapter() else it, if (isMergedSource) mergedManga[it.manga_id] ?: manga else /* SY <-- */ manga) }
.forEach { it.status = Download.State.DOWNLOADED } .forEach { it.status = Download.State.DOWNLOADED }
} }
@ -921,7 +921,7 @@ class MangaPresenter(
// SY --> // SY -->
if (source is MergedSource) { if (source is MergedSource) {
chapters.groupBy { it.manga_id }.forEach { map -> chapters.groupBy { it.manga_id }.forEach { map ->
val manga = mergedManga.firstOrNull { it.id == map.key } ?: return@forEach val manga = mergedManga[map.key] ?: return@forEach
downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadChapter() }) downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadChapter() })
} }
} else /* SY <-- */ downloadManager.downloadChapters(manga, chapters) } else /* SY <-- */ downloadManager.downloadChapters(manga, chapters)
@ -1117,7 +1117,7 @@ class MangaPresenter(
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
// SY --> // SY -->
.map { trackItems -> .map { trackItems ->
if (manga.source in mangaDexSourceIds || mergedManga.any { it.source in mangaDexSourceIds }) { if (manga.source in mangaDexSourceIds || mergedManga.values.any { it.source in mangaDexSourceIds }) {
val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST } val mdTrack = trackItems.firstOrNull { it.service.id == TrackManager.MDLIST }
when { when {
mdTrack == null -> { mdTrack == null -> {
@ -1137,7 +1137,7 @@ class MangaPresenter(
// SY --> // SY -->
private fun createMdListTrack(): TrackItem { private fun createMdListTrack(): TrackItem {
val mdManga = mergedManga.find { it.source in mangaDexSourceIds } val mdManga = mergedManga.values.find { it.source in mangaDexSourceIds }
val track = trackManager.mdList.createInitialTracker(manga, mdManga ?: manga) val track = trackManager.mdList.createInitialTracker(manga, mdManga ?: manga)
track.id = db.insertTrack(track).executeAsBlocking().insertedId() track.id = db.insertTrack(track).executeAsBlocking().insertedId()
return TrackItem(track, trackManager.mdList) return TrackItem(track, trackManager.mdList)

View File

@ -84,7 +84,7 @@ class ReaderPresenter(
// SY --> // SY -->
var meta: RaisedSearchMetadata? = null var meta: RaisedSearchMetadata? = null
private set private set
var mergedManga: List<Manga>? = null var mergedManga: Map<Long, Manga>? = null
private set private set
// SY <-- // SY <--
@ -284,8 +284,8 @@ class ReaderPresenter(
val context = Injekt.get<Application>() val context = Injekt.get<Application>()
val source = sourceManager.getOrStub(manga.source) val source = sourceManager.getOrStub(manga.source)
val mergedReferences = if (source is MergedSource) db.getMergedMangaReferences(manga.id!!).executeAsBlocking() else emptyList() val mergedReferences = if (source is MergedSource) db.getMergedMangaReferences(manga.id!!).executeAsBlocking() else emptyList()
mergedManga = if (source is MergedSource) db.getMergedMangas(manga.id!!).executeAsBlocking() else emptyList() mergedManga = if (source is MergedSource) db.getMergedMangas(manga.id!!).executeAsBlocking().associateBy { it.id!! } else emptyMap()
loader = ChapterLoader(context, downloadManager, manga, source, sourceManager, mergedReferences, mergedManga ?: emptyList()) loader = ChapterLoader(context, downloadManager, manga, source, sourceManager, mergedReferences, mergedManga ?: emptyMap())
Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga) Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga)
viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters) viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters)
@ -601,11 +601,12 @@ class ReaderPresenter(
// SY --> // SY -->
return when { return when {
resolveDefault && readingMode == ReadingModeType.DEFAULT && preferences.useAutoWebtoon().get() -> { resolveDefault && readingMode == ReadingModeType.DEFAULT && preferences.useAutoWebtoon().get() -> {
manga.defaultReaderType(manga.mangaType(sourceName = sourceManager.get(manga.source)?.name)) ?: if (manga.readingModeType == ReadingModeType.DEFAULT.flagValue) { manga.defaultReaderType(manga.mangaType(sourceName = sourceManager.get(manga.source)?.name))
default ?: if (manga.readingModeType == ReadingModeType.DEFAULT.flagValue) {
} else { default
readingMode.prefValue } else {
} readingMode.prefValue
}
} }
resolveDefault && readingMode == ReadingModeType.DEFAULT -> default resolveDefault && readingMode == ReadingModeType.DEFAULT -> default
else -> manga.readingModeType else -> manga.readingModeType
@ -929,7 +930,7 @@ class ReaderPresenter(
val manga = if (mergedManga.isNullOrEmpty()) { val manga = if (mergedManga.isNullOrEmpty()) {
manga manga
} else { } else {
mergedManga?.find { it.id == chapter.chapter.manga_id } mergedManga.orEmpty()[chapter.chapter.manga_id]
} ?: return } ?: return
// SY <-- // SY <--

View File

@ -29,7 +29,7 @@ class ChapterLoader(
// SY --> // SY -->
private val sourceManager: SourceManager, private val sourceManager: SourceManager,
private val mergedReferences: List<MergedMangaReference>, private val mergedReferences: List<MergedMangaReference>,
private val mergedManga: List<Manga> private val mergedManga: Map<Long, Manga>
// SY <-- // SY <--
) { ) {
@ -93,7 +93,7 @@ class ChapterLoader(
source is MergedSource -> { source is MergedSource -> {
val mangaReference = mergedReferences.firstOrNull { it.mangaId == chapter.chapter.manga_id } ?: error("Merge reference null") val mangaReference = mergedReferences.firstOrNull { it.mangaId == chapter.chapter.manga_id } ?: error("Merge reference null")
val source = sourceManager.get(mangaReference.mangaSourceId) ?: error("Source ${mangaReference.mangaSourceId} was null") val source = sourceManager.get(mangaReference.mangaSourceId) ?: error("Source ${mangaReference.mangaSourceId} was null")
val manga = mergedManga.firstOrNull { it.id == chapter.chapter.manga_id } ?: error("Manga for merged chapter was null") val manga = mergedManga[chapter.chapter.manga_id] ?: error("Manga for merged chapter was null")
val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(chapter.chapter, manga, true) val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(chapter.chapter, manga, true)
when { when {
isMergedMangaDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager) isMergedMangaDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager)