package dev.jdtech.jellyfin.models import dev.jdtech.jellyfin.database.ServerDatabaseDao import dev.jdtech.jellyfin.repository.JellyfinRepository import org.jellyfin.sdk.model.api.MediaProtocol import org.jellyfin.sdk.model.api.MediaSourceInfo import java.io.File import java.util.UUID data class FindroidSource( val id: String, val name: String, val type: FindroidSourceType, val path: String, val size: Long, val mediaStreams: List, val downloadId: Long? = null, ) suspend fun MediaSourceInfo.toFindroidSource( jellyfinRepository: JellyfinRepository, itemId: UUID, includePath: Boolean = false, ): FindroidSource { val path = when (protocol) { MediaProtocol.FILE -> { try { if (includePath) jellyfinRepository.getStreamUrl(itemId, id.orEmpty()) else "" } catch (e: Exception) { "" } } MediaProtocol.HTTP -> this.path.orEmpty() else -> "" } return FindroidSource( id = id.orEmpty(), name = name.orEmpty(), type = FindroidSourceType.REMOTE, path = path, size = size ?: 0, mediaStreams = mediaStreams?.map { it.toFindroidMediaStream(jellyfinRepository) } ?: emptyList(), ) } fun FindroidSourceDto.toFindroidSource( serverDatabaseDao: ServerDatabaseDao, ): FindroidSource { return FindroidSource( id = id, name = name, type = type, path = path, size = File(path).length(), mediaStreams = serverDatabaseDao.getMediaStreamsBySourceId(id).map { it.toFindroidMediaStream() }, downloadId = downloadId, ) } enum class FindroidSourceType { REMOTE, LOCAL, }