From fd60bc7f13649bf2e5eba3b57996739c4103702e Mon Sep 17 00:00:00 2001 From: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:52:51 +0700 Subject: [PATCH] fix(MangaDex): Fix nullability issues in track creation for MangaDex (#1527) * fix(trackers-mangadex): Handle nullability in `createMdListTrack` * Return null instead of throwing exception in initial track creation * Improve error handling in `createMdListTrack` * Change exception to return null when track not found * handle nullability in MangaDex tracking --- .../tachiyomi/ui/manga/MangaScreenModel.kt | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) 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 216f00e46..e0ad1faf4 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 @@ -75,6 +75,7 @@ import eu.kanade.tachiyomi.util.system.toast import exh.debug.DebugToggles import exh.eh.EHentaiUpdateHelper import exh.log.xLogD +import exh.log.xLogE import exh.md.utils.FollowStatus import exh.metadata.metadata.RaisedSearchMetadata import exh.metadata.metadata.base.FlatMetadata @@ -1851,7 +1852,7 @@ class MangaScreenModel( } // KMK: auto track MangaDex mdTrack.id !in tracks.map { it.trackerId } -> { - tracks + createMdListTrack() + createMdListTrack()?.let { tracks + it } ?: tracks } else -> tracks } @@ -1880,21 +1881,27 @@ class MangaScreenModel( } // SY --> - private suspend fun createMdListTrack(): Track { - val state = successState!! - val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds } - ?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds } - ?: throw IllegalArgumentException("Could not create initial track") - val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga) - .toDomainTrack(false)!! - insertTrack.await(track) - /* KMK --> - return TrackItem( - getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }, - trackerManager.mdList, - ) - KMK <-- */ - return getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id } + private suspend fun createMdListTrack(): Track? { + try { + val state = successState!! + val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds } + ?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds } + ?: throw IllegalArgumentException("Entry does not belong to MangaDex") + val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga) + .toDomainTrack(false) + ?: throw IllegalStateException("Could not create initial track") + insertTrack.await(track) + /* KMK --> + return TrackItem( + getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }, + trackerManager.mdList, + ) + KMK <-- */ + return getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id } + } catch (e: Exception) { + xLogE("Failed to create MangaDex track", e) + return null + } } // SY <--