diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/FindroidEpisode.kt b/data/src/main/java/dev/jdtech/jellyfin/models/FindroidEpisode.kt index af7e53f3..8b9e0768 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/models/FindroidEpisode.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/models/FindroidEpisode.kt @@ -35,34 +35,38 @@ data class FindroidEpisode( suspend fun BaseItemDto.toFindroidEpisode( jellyfinRepository: JellyfinRepository, database: ServerDatabaseDao? = null -): FindroidEpisode { +): FindroidEpisode? { val sources = mutableListOf() sources.addAll(mediaSources?.map { it.toFindroidSource(jellyfinRepository, id) } ?: emptyList()) if (database != null) { sources.addAll(database.getSources(id).map { it.toFindroidSource(database) }) } - return FindroidEpisode( - id = id, - name = name.orEmpty(), - originalTitle = originalTitle, - overview = overview.orEmpty(), - indexNumber = indexNumber ?: 0, - indexNumberEnd = indexNumberEnd, - parentIndexNumber = parentIndexNumber ?: 0, - sources = sources, - played = userData?.played ?: false, - favorite = userData?.isFavorite ?: false, - canPlay = playAccess != PlayAccess.NONE, - canDownload = canDownload ?: false, - runtimeTicks = runTimeTicks ?: 0, - playbackPositionTicks = userData?.playbackPositionTicks ?: 0L, - premiereDate = premiereDate, - seriesName = seriesName.orEmpty(), - seriesId = seriesId!!, - seasonId = seasonId!!, - communityRating = communityRating, - missing = locationType == LocationType.VIRTUAL, - ) + return try { + FindroidEpisode( + id = id, + name = name.orEmpty(), + originalTitle = originalTitle, + overview = overview.orEmpty(), + indexNumber = indexNumber ?: 0, + indexNumberEnd = indexNumberEnd, + parentIndexNumber = parentIndexNumber ?: 0, + sources = sources, + played = userData?.played ?: false, + favorite = userData?.isFavorite ?: false, + canPlay = playAccess != PlayAccess.NONE, + canDownload = canDownload ?: false, + runtimeTicks = runTimeTicks ?: 0, + playbackPositionTicks = userData?.playbackPositionTicks ?: 0L, + premiereDate = premiereDate, + seriesName = seriesName.orEmpty(), + seriesId = seriesId!!, + seasonId = seasonId!!, + communityRating = communityRating, + missing = locationType == LocationType.VIRTUAL, + ) + } catch (_: NullPointerException) { + null + } } fun FindroidEpisodeDto.toFindroidEpisode(database: ServerDatabaseDao, userId: UUID): FindroidEpisode { diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index d21d41a6..2af82e5b 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -74,7 +74,7 @@ class JellyfinRepositoryImpl( jellyfinApi.userLibraryApi.getItem( jellyfinApi.userId!!, itemId - ).content.toFindroidEpisode(this@JellyfinRepositoryImpl, database) + ).content.toFindroidEpisode(this@JellyfinRepositoryImpl, database)!! } override suspend fun getMovie(itemId: UUID): FindroidMovie = @@ -254,7 +254,7 @@ class JellyfinRepositoryImpl( seriesId = seriesId?.toString(), ).content.items .orEmpty() - .map { it.toFindroidEpisode(this@JellyfinRepositoryImpl) } + .mapNotNull { it.toFindroidEpisode(this@JellyfinRepositoryImpl) } } override suspend fun getEpisodes( @@ -276,7 +276,7 @@ class JellyfinRepositoryImpl( limit = limit, ).content.items .orEmpty() - .map { it.toFindroidEpisode(this@JellyfinRepositoryImpl, database) } + .mapNotNull { it.toFindroidEpisode(this@JellyfinRepositoryImpl, database) } } else { database.getEpisodesBySeasonId(seasonId).map { it.toFindroidEpisode(database, jellyfinApi.userId!!) } }