feat: /api/* library reads, search, and media endpoints #15

Merged
bvandeusen merged 262 commits from dev into main 2026-04-21 23:02:29 -04:00
Showing only changes of commit 43d436573c - Show all commits
@@ -30,8 +30,6 @@ import com.composables.icons.lucide.User
import com.fabledsword.minstrel.models.ArtistSuggestionRef import com.fabledsword.minstrel.models.ArtistSuggestionRef
import com.fabledsword.minstrel.models.LidarrSearchResultRef import com.fabledsword.minstrel.models.LidarrSearchResultRef
internal enum class AvatarShape { CIRCLE, ROUNDED }
@Composable @Composable
internal fun SuggestionTile(s: ArtistSuggestionRef, onRequest: () -> Unit) { internal fun SuggestionTile(s: ArtistSuggestionRef, onRequest: () -> Unit) {
Row( Row(
@@ -41,7 +39,7 @@ internal fun SuggestionTile(s: ArtistSuggestionRef, onRequest: () -> Unit) {
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp),
) { ) {
Avatar(imageUrl = s.imageUrl, fallback = Lucide.User, shape = AvatarShape.CIRCLE) Avatar(imageUrl = s.imageUrl, fallback = Lucide.User, circular = true)
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text( Text(
text = s.name, text = s.name,
@@ -78,7 +76,7 @@ internal fun ResultTile(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp),
) { ) {
Avatar(imageUrl = row.imageUrl, fallback = Lucide.Disc3, shape = AvatarShape.ROUNDED) Avatar(imageUrl = row.imageUrl, fallback = Lucide.Disc3, circular = false)
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text( Text(
text = row.name, text = row.name,
@@ -107,11 +105,8 @@ internal fun ResultTile(
} }
@Composable @Composable
private fun Avatar(imageUrl: String, fallback: ImageVector, shape: AvatarShape) { private fun Avatar(imageUrl: String, fallback: ImageVector, circular: Boolean) {
val clip = when (shape) { val clip = if (circular) CircleShape else RoundedCornerShape(6.dp)
AvatarShape.CIRCLE -> CircleShape
AvatarShape.ROUNDED -> RoundedCornerShape(6.dp)
}
Box( Box(
modifier = Modifier modifier = Modifier
.size(56.dp) .size(56.dp)