From 88c8dc47617e6714565817e9e02d1cb10c8d8666 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Thu, 14 Dec 2023 14:50:56 +0200 Subject: [PATCH] Fix crashes --- app/build.gradle | 6 +++--- .../details/service/MangaPrefetchService.kt | 20 +++++++++++-------- .../local/data/LocalMangaRepository.kt | 6 ++++-- .../local/data/input/LocalMangaDirInput.kt | 4 ++-- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b9f376daa..7cb8df61d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId 'org.koitharu.kotatsu' minSdk = 21 targetSdk = 34 - versionCode = 604 - versionName = '6.5-b2' + versionCode = 605 + versionName = '6.5-b3' generatedDensities = [] testInstrumentationRunner 'org.koitharu.kotatsu.HiltTestRunner' ksp { @@ -82,7 +82,7 @@ afterEvaluate { } dependencies { //noinspection GradleDependency - implementation('com.github.KotatsuApp:kotatsu-parsers:87f99addbb') { + implementation('com.github.KotatsuApp:kotatsu-parsers:75cc0716fd') { exclude group: 'org.json', module: 'json' } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/service/MangaPrefetchService.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/service/MangaPrefetchService.kt index e2944b6fd..385c7e416 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/service/MangaPrefetchService.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/service/MangaPrefetchService.kt @@ -91,7 +91,7 @@ class MangaPrefetchService : CoroutineIntentService() { val intent = Intent(context, MangaPrefetchService::class.java) intent.action = ACTION_PREFETCH_DETAILS intent.putExtra(EXTRA_MANGA, ParcelableManga(manga)) - context.startService(intent) + tryStart(context, intent) } fun prefetchPages(context: Context, chapter: MangaChapter) { @@ -99,19 +99,14 @@ class MangaPrefetchService : CoroutineIntentService() { val intent = Intent(context, MangaPrefetchService::class.java) intent.action = ACTION_PREFETCH_PAGES intent.putExtra(EXTRA_CHAPTER, ParcelableChapter(chapter)) - try { - context.startService(intent) - } catch (e: IllegalStateException) { - // probably app is in background - e.printStackTraceDebug() - } + tryStart(context, intent) } fun prefetchLast(context: Context) { if (!isPrefetchAvailable(context, null)) return val intent = Intent(context, MangaPrefetchService::class.java) intent.action = ACTION_PREFETCH_LAST - context.startService(intent) + tryStart(context, intent) } private fun isPrefetchAvailable(context: Context, source: MangaSource?): Boolean { @@ -127,5 +122,14 @@ class MangaPrefetchService : CoroutineIntentService() { ) return entryPoint.contentCache.isCachingEnabled && entryPoint.settings.isContentPrefetchEnabled } + + private fun tryStart(context: Context, intent: Intent) { + try { + context.startService(intent) + } catch (e: IllegalStateException) { + // probably app is in background + e.printStackTraceDebug() + } + } } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/LocalMangaRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/LocalMangaRepository.kt index 6a3b17028..e7e32de3f 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/LocalMangaRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/LocalMangaRepository.kt @@ -133,7 +133,7 @@ class LocalMangaRepository @Inject constructor( }.getOrNull() } - suspend fun findSavedManga(remoteManga: Manga): LocalManga? { + suspend fun findSavedManga(remoteManga: Manga): LocalManga? = runCatchingCancellable { // fast path LocalMangaInput.find(storageManager.getReadableDirs(), remoteManga)?.let { return it.getManga() @@ -155,7 +155,9 @@ class LocalMangaRepository @Inject constructor( } } }.firstOrNull()?.getManga() - } + }.onFailure { + it.printStackTraceDebug() + }.getOrNull() override suspend fun getPageUrl(page: MangaPage) = page.url diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt index f8e6879ea..c43712b90 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt @@ -49,8 +49,8 @@ class LocalMangaDirInput(root: File) : LocalMangaInput(root) { url = mangaUri, coverUrl = cover, largeCoverUrl = cover, - chapters = info.chapters?.mapIndexed { i, c -> - c.copy(url = chapterFiles[i].toUri().toString(), source = MangaSource.LOCAL) + chapters = info.chapters?.zip(chapterFiles) { c, f -> + c.copy(url = f.toUri().toString(), source = MangaSource.LOCAL) }, ) ?: Manga( id = root.absolutePath.longHashCode(),