feat(libraries): add size property to Library and related models for better content representation

This commit is contained in:
2026-05-02 20:56:05 +02:00
parent 2753a45645
commit 53bc6246e4
10 changed files with 18 additions and 1 deletions

View File

@@ -392,6 +392,7 @@ class TvHomeContentTest {
name = "Movies",
type = LibraryKind.MOVIES,
posterUrl = "",
size = 1,
isEmpty = false
)
)

View File

@@ -25,6 +25,7 @@ class TvLibrariesOverviewScreenTest {
name = "Movies",
type = LibraryKind.MOVIES,
posterUrl = "",
size = 1,
isEmpty = false
),
LibraryUiModel(
@@ -32,6 +33,7 @@ class TvLibrariesOverviewScreenTest {
name = "Shows",
type = LibraryKind.SERIES,
posterUrl = "",
size = 1,
isEmpty = false
)
)

View File

@@ -110,6 +110,7 @@ class TvHomeHeroStateTest {
name = "Movies",
type = LibraryKind.MOVIES,
posterUrl = "",
size = 1,
isEmpty = isEmpty
)
}

View File

@@ -2,6 +2,7 @@ package hu.bbara.purefin.ui.screen.libraries.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import hu.bbara.purefin.model.LibraryKind
import hu.bbara.purefin.ui.common.card.MediaImageCard
import hu.bbara.purefin.ui.model.LibraryUiModel
@@ -14,6 +15,7 @@ fun LibraryListItem(
MediaImageCard(
imageUrl = uiModel.posterUrl,
title = uiModel.name,
subtitle = "${uiModel.size} ${if (uiModel.type == LibraryKind.SERIES) "series" else "movies"}",
onClick = onClick,
modifier = modifier
)

View File

@@ -7,6 +7,7 @@ data class Library(
val name: String,
val type: LibraryKind,
val posterUrl: String,
val size: Int,
val series: List<Series>? = null,
val movies: List<Movie>? = null,
) {

View File

@@ -57,6 +57,7 @@ class AppViewModel @Inject constructor(
name = it.name,
type = it.type,
posterUrl = it.posterUrl,
size = it.size,
isEmpty = when (it.type) {
LibraryKind.MOVIES -> mediaCatalogReader.movies.value.isEmpty()
LibraryKind.SERIES -> mediaCatalogReader.series.value.isEmpty()

View File

@@ -8,5 +8,6 @@ data class LibraryUiModel(
val name: String,
val type: LibraryKind,
val posterUrl: String,
val size: Int,
val isEmpty: Boolean
)

View File

@@ -230,9 +230,11 @@ class InMemoryAppContentRepository @Inject constructor(
return when (library.type) {
LibraryKind.MOVIES -> library.copy(
movies = contentItem.map { it.toMovie(serverUrl()) },
size = contentItem.size,
)
LibraryKind.SERIES -> library.copy(
series = contentItem.map { it.toSeries(serverUrl()) },
size = contentItem.size,
)
}
}

View File

@@ -27,6 +27,7 @@ fun BaseItemDto.toLibrary(serverUrl: String): Library {
artworkKind = ArtworkKind.PRIMARY
),
type = LibraryKind.MOVIES,
size = childCount ?: 0,
movies = emptyList(),
)
CollectionType.TVSHOWS -> Library(
@@ -38,6 +39,7 @@ fun BaseItemDto.toLibrary(serverUrl: String): Library {
artworkKind = ArtworkKind.PRIMARY
),
type = LibraryKind.SERIES,
size = childCount ?: 0,
series = emptyList(),
)
else -> throw UnsupportedOperationException("Unsupported library type: $collectionType")
@@ -133,4 +135,4 @@ private fun formatRuntime(ticks: Long?): String {
val hours = TimeUnit.SECONDS.toHours(totalSeconds)
val minutes = TimeUnit.SECONDS.toMinutes(totalSeconds) % 60
return if (hours > 0) "${hours}h ${minutes}m" else "${minutes}m"
}
}

View File

@@ -79,6 +79,7 @@ data class CachedLibrary(
val name: String,
val type: String,
val posterUrl: String,
val size: Int = 0,
val series: List<CachedSeries>? = null,
val movies: List<CachedMovie>? = null,
)
@@ -100,6 +101,7 @@ fun Library.toCachedLibrary() = CachedLibrary(
name = name,
type = type.name,
posterUrl = posterUrl,
size = size,
series = series?.map { it.toCachedSeries() },
movies = movies?.map { it.toCachedMovie() },
)
@@ -112,6 +114,7 @@ fun CachedLibrary.toLibrary(): Library? {
name = name,
type = LibraryKind.MOVIES,
posterUrl = posterUrl,
size = size,
movies = movies?.mapNotNull { it.toMovie() } ?: emptyList(),
)
"SERIES" -> Library(
@@ -119,6 +122,7 @@ fun CachedLibrary.toLibrary(): Library? {
name = name,
type = LibraryKind.SERIES,
posterUrl = posterUrl,
size = size,
series = series?.mapNotNull { it.toSeries() } ?: emptyList(),
)
else -> null