101 lines
3.7 KiB
Kotlin
101 lines
3.7 KiB
Kotlin
package dev.jdtech.jellyfin.models
|
|
|
|
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
|
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
|
import org.jellyfin.sdk.model.DateTime
|
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
|
import org.jellyfin.sdk.model.api.LocationType
|
|
import org.jellyfin.sdk.model.api.PlayAccess
|
|
import java.util.UUID
|
|
|
|
data class FindroidEpisode(
|
|
override val id: UUID,
|
|
override val name: String,
|
|
override val originalTitle: String?,
|
|
override val overview: String,
|
|
val indexNumber: Int,
|
|
val indexNumberEnd: Int?,
|
|
val parentIndexNumber: Int,
|
|
override val sources: List<FindroidSource>,
|
|
override val played: Boolean,
|
|
override val favorite: Boolean,
|
|
override val canPlay: Boolean,
|
|
override val canDownload: Boolean,
|
|
override val runtimeTicks: Long,
|
|
override val playbackPositionTicks: Long,
|
|
val premiereDate: DateTime?,
|
|
val seriesName: String,
|
|
val seriesId: UUID,
|
|
val seasonId: UUID,
|
|
val communityRating: Float?,
|
|
override val unplayedItemCount: Int? = null,
|
|
val missing: Boolean = false,
|
|
override val images: FindroidImages,
|
|
override val chapters: List<FindroidChapter>?,
|
|
) : FindroidItem, FindroidSources
|
|
|
|
suspend fun BaseItemDto.toFindroidEpisode(
|
|
jellyfinRepository: JellyfinRepository,
|
|
database: ServerDatabaseDao? = null,
|
|
): FindroidEpisode? {
|
|
val sources = mutableListOf<FindroidSource>()
|
|
sources.addAll(mediaSources?.map { it.toFindroidSource(jellyfinRepository, id) } ?: emptyList())
|
|
if (database != null) {
|
|
sources.addAll(database.getSources(id).map { it.toFindroidSource(database) })
|
|
}
|
|
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?.let { Math.round(it * 10).div(10F) },
|
|
missing = locationType == LocationType.VIRTUAL,
|
|
images = toFindroidImages(jellyfinRepository),
|
|
chapters = toFindroidChapters(),
|
|
)
|
|
} catch (_: NullPointerException) {
|
|
null
|
|
}
|
|
}
|
|
|
|
fun FindroidEpisodeDto.toFindroidEpisode(database: ServerDatabaseDao, userId: UUID): FindroidEpisode {
|
|
val userData = database.getUserDataOrCreateNew(id, userId)
|
|
return FindroidEpisode(
|
|
id = id,
|
|
name = name,
|
|
originalTitle = "",
|
|
overview = overview,
|
|
indexNumber = indexNumber,
|
|
indexNumberEnd = indexNumberEnd,
|
|
parentIndexNumber = parentIndexNumber,
|
|
sources = database.getSources(id).map { it.toFindroidSource(database) },
|
|
played = userData.played,
|
|
favorite = userData.favorite,
|
|
canPlay = true,
|
|
canDownload = false,
|
|
runtimeTicks = runtimeTicks,
|
|
playbackPositionTicks = userData.playbackPositionTicks,
|
|
premiereDate = premiereDate,
|
|
seriesName = seriesName,
|
|
seriesId = seriesId,
|
|
seasonId = seasonId,
|
|
communityRating = communityRating,
|
|
images = FindroidImages(),
|
|
chapters = chapters,
|
|
)
|
|
}
|