Live Activities fix
This commit is contained in:
@@ -351,6 +351,50 @@ final class MAService {
|
||||
)
|
||||
}
|
||||
|
||||
/// Get genres
|
||||
func getGenres() async throws -> [MAGenre] {
|
||||
logger.debug("Fetching genres")
|
||||
return try await webSocketClient.sendCommand(
|
||||
"music/genres/library_items",
|
||||
resultType: [MAGenre].self
|
||||
)
|
||||
}
|
||||
|
||||
/// Browse items under a genre URI.
|
||||
/// MA returns provider sub-folders at the first level, so we auto-expand
|
||||
/// them with a second browse pass to surface actual artists/albums.
|
||||
func browseGenre(genreUri: String) async throws -> [MAMediaItem] {
|
||||
logger.debug("Browsing genre \(genreUri)")
|
||||
let firstLevel = try await webSocketClient.sendCommand(
|
||||
"music/browse",
|
||||
args: ["uri": genreUri],
|
||||
resultType: [MAMediaItem].self
|
||||
)
|
||||
|
||||
// If first level already contains real media items, return them.
|
||||
let realItems = firstLevel.filter {
|
||||
guard let t = $0.mediaType else { return false }
|
||||
return t != .unknown
|
||||
}
|
||||
if !realItems.isEmpty { return realItems }
|
||||
|
||||
// Otherwise these are sub-folders (providers) — browse each one.
|
||||
var allItems: [MAMediaItem] = []
|
||||
var seen = Set<String>()
|
||||
for folder in firstLevel {
|
||||
let items = (try? await webSocketClient.sendCommand(
|
||||
"music/browse",
|
||||
args: ["uri": folder.uri],
|
||||
resultType: [MAMediaItem].self
|
||||
)) ?? []
|
||||
for item in items where seen.insert(item.uri).inserted {
|
||||
allItems.append(item)
|
||||
}
|
||||
}
|
||||
logger.debug("Genre browse returned \(allItems.count) items after expanding \(firstLevel.count) folders")
|
||||
return allItems
|
||||
}
|
||||
|
||||
/// Get radio stations
|
||||
func getRadios() async throws -> [MAMediaItem] {
|
||||
logger.debug("Fetching radios")
|
||||
|
||||
Reference in New Issue
Block a user