Version 1.4 - Translations, Like toasts Queue redesign.
This commit is contained in:
@@ -8,11 +8,17 @@
|
||||
import SwiftUI
|
||||
import UIKit
|
||||
|
||||
enum FavoritesTab: String, CaseIterable {
|
||||
case artists = "Artists"
|
||||
case albums = "Albums"
|
||||
case radios = "Radios"
|
||||
case podcasts = "Podcasts"
|
||||
enum FavoritesTab: CaseIterable {
|
||||
case artists, albums, radios, podcasts
|
||||
|
||||
var title: LocalizedStringKey {
|
||||
switch self {
|
||||
case .artists: return "Artists"
|
||||
case .albums: return "Albums"
|
||||
case .radios: return "Radios"
|
||||
case .podcasts: return "Podcasts"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct FavoritesView: View {
|
||||
@@ -41,7 +47,7 @@ struct FavoritesView: View {
|
||||
ToolbarItem(placement: .principal) {
|
||||
Picker("Favorites", selection: $selectedTab) {
|
||||
ForEach(FavoritesTab.allCases, id: \.self) { tab in
|
||||
Text(tab.rawValue).tag(tab)
|
||||
Text(tab.title).tag(tab)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.segmented)
|
||||
@@ -58,6 +64,8 @@ struct FavoritesView: View {
|
||||
private struct FavoriteArtistsSection: View {
|
||||
@Environment(MAService.self) private var service
|
||||
@State private var scrollPosition: String?
|
||||
@State private var errorMessage: String?
|
||||
@State private var showError = false
|
||||
|
||||
private var favoriteArtists: [MAArtist] {
|
||||
// Merge artists + albumArtists, deduplicate by URI, filter favorites
|
||||
@@ -147,6 +155,24 @@ private struct FavoriteArtistsSection: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.refreshable {
|
||||
await reloadArtists()
|
||||
}
|
||||
.alert("Error", isPresented: $showError) {
|
||||
Button("OK", role: .cancel) { }
|
||||
} message: {
|
||||
if let errorMessage { Text(errorMessage) }
|
||||
}
|
||||
}
|
||||
|
||||
private func reloadArtists() async {
|
||||
do {
|
||||
try await service.libraryManager.loadArtists(refresh: true)
|
||||
try await service.libraryManager.loadAlbumArtists(refresh: true)
|
||||
} catch {
|
||||
errorMessage = error.localizedDescription
|
||||
showError = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,6 +180,8 @@ private struct FavoriteArtistsSection: View {
|
||||
|
||||
private struct FavoriteAlbumsSection: View {
|
||||
@Environment(MAService.self) private var service
|
||||
@State private var errorMessage: String?
|
||||
@State private var showError = false
|
||||
|
||||
private var favoriteAlbums: [MAAlbum] {
|
||||
service.libraryManager.albums
|
||||
@@ -189,6 +217,23 @@ private struct FavoriteAlbumsSection: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.refreshable {
|
||||
await reloadAlbums()
|
||||
}
|
||||
.alert("Error", isPresented: $showError) {
|
||||
Button("OK", role: .cancel) { }
|
||||
} message: {
|
||||
if let errorMessage { Text(errorMessage) }
|
||||
}
|
||||
}
|
||||
|
||||
private func reloadAlbums() async {
|
||||
do {
|
||||
try await service.libraryManager.loadAlbums(refresh: true)
|
||||
} catch {
|
||||
errorMessage = error.localizedDescription
|
||||
showError = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,6 +295,7 @@ private struct FavoriteRadiosSection: View {
|
||||
.sheet(item: $selectedRadio) { radio in
|
||||
EnhancedPlayerPickerView(
|
||||
players: players,
|
||||
showNowPlayingOnSelect: true,
|
||||
onSelect: { player in
|
||||
Task { await playRadio(radio, on: player) }
|
||||
}
|
||||
@@ -291,6 +337,8 @@ private struct FavoriteRadiosSection: View {
|
||||
|
||||
private struct FavoritePodcastsSection: View {
|
||||
@Environment(MAService.self) private var service
|
||||
@State private var errorMessage: String?
|
||||
@State private var showError = false
|
||||
|
||||
private var favoritePodcasts: [MAPodcast] {
|
||||
service.libraryManager.podcasts
|
||||
@@ -315,6 +363,23 @@ private struct FavoritePodcastsSection: View {
|
||||
.listStyle(.plain)
|
||||
}
|
||||
}
|
||||
.refreshable {
|
||||
await reloadPodcasts()
|
||||
}
|
||||
.alert("Error", isPresented: $showError) {
|
||||
Button("OK", role: .cancel) { }
|
||||
} message: {
|
||||
if let errorMessage { Text(errorMessage) }
|
||||
}
|
||||
}
|
||||
|
||||
private func reloadPodcasts() async {
|
||||
do {
|
||||
try await service.libraryManager.loadPodcasts(refresh: true)
|
||||
} catch {
|
||||
errorMessage = error.localizedDescription
|
||||
showError = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user