From 1bc029833ff2ce4019a12a7562c10ed87f7ce8f5 Mon Sep 17 00:00:00 2001 From: Rudrank Riyam Date: Sat, 11 Mar 2023 22:04:11 +0530 Subject: [PATCH] Update all genres and storefronts --- Sources/MusadoraKit/Catalog/CatalogGenre.swift | 5 ++++- Sources/MusadoraKit/Storefronts.swift | 13 +++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Sources/MusadoraKit/Catalog/CatalogGenre.swift b/Sources/MusadoraKit/Catalog/CatalogGenre.swift index 1f4fda70f..29857effd 100644 --- a/Sources/MusadoraKit/Catalog/CatalogGenre.swift +++ b/Sources/MusadoraKit/Catalog/CatalogGenre.swift @@ -67,7 +67,10 @@ extension MCatalog { } } -extension MCatalog { +public extension MCatalog { + /// Fetch all genres from the Apple Music catalog across all Apple Music storefronts. + /// + /// - Returns: Unique `Genres` from all storefronts. static func allGenres() async throws -> Genres { try await withThrowingTaskGroup(of: Genres.self) { group in let storefronts = try await MCatalog.storefronts().map { $0.id } diff --git a/Sources/MusadoraKit/Storefronts.swift b/Sources/MusadoraKit/Storefronts.swift index 1c8f02ded..7522144dc 100644 --- a/Sources/MusadoraKit/Storefronts.swift +++ b/Sources/MusadoraKit/Storefronts.swift @@ -6,9 +6,11 @@ // import MusicKit -import StoreKit +import Foundation -public struct Storefronts: Codable { +public typealias Storefronts = [StorefrontsData.Storefront] + +public struct StorefrontsData: Codable { let data: [Storefront] public struct Storefront: Codable { @@ -36,11 +38,14 @@ public struct Storefronts: Codable { } public extension MCatalog { - static func storefronts() async throws -> [Storefronts.Storefront] { + /// Fetch all storefronts of Apple Music. + /// + /// - Returns: `Storefronts` as array of storefronts. + static func storefronts() async throws -> Storefronts { let url = URL(string: "https://api.music.apple.com/v1/storefronts")! let request = MusicDataRequest(urlRequest: .init(url: url)) let response = try await request.response() - let storefronts = try JSONDecoder().decode(Storefronts.self, from: response.data) + let storefronts = try JSONDecoder().decode(StorefrontsData.self, from: response.data) return storefronts.data } }