63 lines
1.7 KiB
Kotlin
63 lines
1.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.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<FindroidMediaStream>,
|
|
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,
|
|
}
|