Genres fix
This commit is contained in:
@@ -360,39 +360,25 @@ final class MAService {
|
||||
)
|
||||
}
|
||||
|
||||
/// 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],
|
||||
/// Get artists belonging to one or more genre IDs.
|
||||
/// Uses the native `genre` parameter of music/artists/library_items (int | list[int]).
|
||||
func getArtistsByGenre(genreIds: [Int], limit: Int = 500) async throws -> [MAMediaItem] {
|
||||
logger.debug("Fetching artists for genre ids \(genreIds)")
|
||||
return try await webSocketClient.sendCommand(
|
||||
"music/artists/library_items",
|
||||
args: ["limit": limit, "genre": genreIds as [Any]],
|
||||
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 albums belonging to one or more genre IDs.
|
||||
func getAlbumsByGenre(genreIds: [Int], limit: Int = 500) async throws -> [MAMediaItem] {
|
||||
logger.debug("Fetching albums for genre ids \(genreIds)")
|
||||
return try await webSocketClient.sendCommand(
|
||||
"music/albums/library_items",
|
||||
args: ["limit": limit, "genre": genreIds as [Any]],
|
||||
resultType: [MAMediaItem].self
|
||||
)
|
||||
}
|
||||
|
||||
/// Get radio stations
|
||||
|
||||
Reference in New Issue
Block a user