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
This commit is contained in:
Cuong-Tran 2026-04-16 12:52:51 +07:00 committed by GitHub
parent 6f06974524
commit fd60bc7f13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -75,6 +75,7 @@ import eu.kanade.tachiyomi.util.system.toast
import exh.debug.DebugToggles import exh.debug.DebugToggles
import exh.eh.EHentaiUpdateHelper import exh.eh.EHentaiUpdateHelper
import exh.log.xLogD import exh.log.xLogD
import exh.log.xLogE
import exh.md.utils.FollowStatus import exh.md.utils.FollowStatus
import exh.metadata.metadata.RaisedSearchMetadata import exh.metadata.metadata.RaisedSearchMetadata
import exh.metadata.metadata.base.FlatMetadata import exh.metadata.metadata.base.FlatMetadata
@ -1851,7 +1852,7 @@ class MangaScreenModel(
} }
// KMK: auto track MangaDex // KMK: auto track MangaDex
mdTrack.id !in tracks.map { it.trackerId } -> { mdTrack.id !in tracks.map { it.trackerId } -> {
tracks + createMdListTrack() createMdListTrack()?.let { tracks + it } ?: tracks
} }
else -> tracks else -> tracks
} }
@ -1880,21 +1881,27 @@ class MangaScreenModel(
} }
// SY --> // SY -->
private suspend fun createMdListTrack(): Track { private suspend fun createMdListTrack(): Track? {
val state = successState!! try {
val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds } val state = successState!!
?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds } val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds }
?: throw IllegalArgumentException("Could not create initial track") ?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds }
val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga) ?: throw IllegalArgumentException("Entry does not belong to MangaDex")
.toDomainTrack(false)!! val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga)
insertTrack.await(track) .toDomainTrack(false)
/* KMK --> ?: throw IllegalStateException("Could not create initial track")
return TrackItem( insertTrack.await(track)
getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }, /* KMK -->
trackerManager.mdList, return TrackItem(
) getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id },
KMK <-- */ trackerManager.mdList,
return getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id } )
KMK <-- */
return getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }
} catch (e: Exception) {
xLogE("Failed to create MangaDex track", e)
return null
}
} }
// SY <-- // SY <--