From 4d2909340e56b6594f72e1345512fd7f57a4ab9d Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 23 Aug 2024 08:13:00 +0700 Subject: [PATCH] fix(extension): Prevent crashes related to extensions Mostly to prevent "NetworkOnMainThreadException" --- CHANGELOG.md | 2 +- .../java/eu/kanade/tachiyomi/data/download/Downloader.kt | 5 +++-- .../eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt | 3 ++- .../java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt | 3 ++- .../kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt | 3 ++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f3c26a01..a34f9a3981 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,4 +10,4 @@ ## Other ?? Technical stuff, what happened behind the scene --> ## Fixes -- Fixed custom cover set from reader didn't show up on manga details +- Fixed crashes caused by certain extension implementation diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 41297cf433..552d9d2be9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -646,12 +646,13 @@ class Downloader( ) { val categories = db.getCategoriesForManga(manga).executeAsBlocking().map { it.name.trim() }.takeUnless { it.isEmpty() } - val urls = source.getChapterUrl(manga, chapter)?.let { listOf(it) } ?: listOf() + val url = try { source.getChapterUrl(chapter) } catch (_: Exception) { null } + ?: source.getChapterUrl(manga, chapter).takeIf { !it.isNullOrBlank() } // FIXME: Not sure if this is necessary val comicInfo = getComicInfo( manga, chapter, - urls, + url?.let { listOf(it) } ?: listOf(), categories, source.name, source.lang, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt index 85857101da..a8605b8398 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt @@ -308,7 +308,8 @@ class MangaDetailsPresenter( fun getChapterUrl(chapter: Chapter): String? { val source = source as? HttpSource ?: return null val chapterUrl = try { source.getChapterUrl(chapter) } catch (_: Exception) { null } - return chapterUrl.takeIf { !it.isNullOrBlank() } ?: source.getChapterUrl(manga, chapter) + return chapterUrl.takeIf { !it.isNullOrBlank() } + ?: try { source.getChapterUrl(manga, chapter) } catch (_: Exception) { null } } private fun getScrollType(chapters: List) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt index b45ceab36e..6a4fa3f281 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt @@ -682,7 +682,8 @@ class ReaderViewModel( val source = getSource() ?: return null val chapter = mainChapter ?: getCurrentChapter()?.chapter ?: return null val chapterUrl = try { source.getChapterUrl(chapter) } catch (_: Exception) { null } - return chapterUrl.takeIf { !it.isNullOrBlank() } ?: source.getChapterUrl(manga, chapter) + return chapterUrl.takeIf { !it.isNullOrBlank() } + ?: try { source.getChapterUrl(manga, chapter) } catch (_: Exception) { null } } fun getSource() = manga?.source?.let { sourceManager.getOrStub(it) } as? HttpSource diff --git a/source/api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt b/source/api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt index 52e13ec3c7..78c390d2d3 100644 --- a/source/api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt +++ b/source/api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt @@ -448,9 +448,10 @@ abstract class HttpSource : CatalogueSource { * @return url of the chapter */ open fun getChapterUrl(chapter: SChapter): String { - return "" + return pageListRequest(chapter).url.toString() } + // FIXME: Not sure if this is necessary, feels like this should be handled by the extension not by the app fun getChapterUrl(manga: SManga?, chapter: SChapter): String? { manga ?: return null