Skip to content

Commit

Permalink
Add explicit methods for catalog and library search music items
Browse files Browse the repository at this point in the history
  • Loading branch information
rudrankriyam committed Aug 29, 2022
1 parent 1b9b1a8 commit 311f82b
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 3 deletions.
83 changes: 83 additions & 0 deletions Sources/MusadoraKit/Catalog/CatalogSearch.swift
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,89 @@ public extension MusadoraKit {
let response = try await request.response()
return response
}

static func catalogSearchSongs(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Songs {
var request = MusicCatalogSearchRequest(term: term, types: [Song.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.songs
}

static func catalogSearchPlaylists(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Playlists {
var request = MusicCatalogSearchRequest(term: term, types: [Playlist.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.playlists
}

static func catalogSearchAlbums(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Albums {
var request = MusicCatalogSearchRequest(term: term, types: [Album.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.albums
}

static func catalogSearchArtists(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Artists {
var request = MusicCatalogSearchRequest(term: term, types: [Artist.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.artists
}

@available(iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 9.0, *)
static func catalogSearchMusicVideos(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> MusicVideos {
var request = MusicCatalogSearchRequest(term: term, types: [MusicVideo.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.musicVideos
}

@available(iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 9.0, *)
static func catalogSearchCurators(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Curators {
var request = MusicCatalogSearchRequest(term: term, types: [Curator.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.curators
}

@available(iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 9.0, *)
static func catalogSearchRadioShows(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> RadioShows {
var request = MusicCatalogSearchRequest(term: term, types: [RadioShow.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.radioShows
}

static func catalogSearchStations(for term: String,
limit: Int? = nil,
offset: Int? = nil) async throws -> Stations {
var request = MusicCatalogSearchRequest(term: term, types: [Station.self])
request.limit = limit
request.offset = offset
let response = try await request.response()
return response.stations
}
}

#if compiler(>=5.7)
Expand Down
66 changes: 63 additions & 3 deletions Sources/MusadoraKit/Library/LibrarySearch.swift
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ public extension MusadoraKit {
}

#if compiler(>=5.7)
@available(iOS 16.0, tvOS 16.0, watchOS 9.0, *)
@available(macOS, unavailable)
@available(macCatalyst, unavailable)
public extension MusadoraKit {
@available(iOS 16.0, tvOS 16.0, watchOS 9.0, *)
@available(macOS, unavailable)
@available(macCatalyst, unavailable)
static func librarySearch(
for term: String,
types: [MusicLibrarySearchType],
Expand All @@ -88,5 +88,65 @@ public extension MusadoraKit {
request.includeTopResults = includeTopResults
return try await request.response()
}

static func librarySearchSongs(
for term: String,
limit: Int = 5,
offset: Int? = nil,
includeTopResults: Bool = false) async throws -> Songs {
var request = MusicLibrarySearchRequest(term: term, types: [Song.self])
request.limit = limit
request.includeTopResults = includeTopResults
let response = try await request.response()
return response.songs
}

static func librarySearchAlbums(
for term: String,
limit: Int = 5,
offset: Int? = nil,
includeTopResults: Bool = false) async throws -> Albums {
var request = MusicLibrarySearchRequest(term: term, types: [Album.self])
request.limit = limit
request.includeTopResults = includeTopResults
let response = try await request.response()
return response.albums
}

static func librarySearchPlaylists(
for term: String,
limit: Int = 5,
offset: Int? = nil,
includeTopResults: Bool = false) async throws -> Playlists {
var request = MusicLibrarySearchRequest(term: term, types: [Playlist.self])
request.limit = limit
request.includeTopResults = includeTopResults
let response = try await request.response()
return response.playlists
}

static func librarySearchMusicVideos(
for term: String,
limit: Int = 5,
offset: Int? = nil,
includeTopResults: Bool = false) async throws -> MusicVideos {
var request = MusicLibrarySearchRequest(term: term, types: [MusicVideo.self])
request.limit = limit
request.includeTopResults = includeTopResults
let response = try await request.response()
return response.musicVideos
}

static func librarySearchArtists(
for term: String,
limit: Int = 5,
offset: Int? = nil,
includeTopResults: Bool = false) async throws -> Artists {
var request = MusicLibrarySearchRequest(term: term, types: [Artist.self])
request.limit = limit
request.includeTopResults = includeTopResults
let response = try await request.response()
return response.artists
}
}
#endif

0 comments on commit 311f82b

Please sign in to comment.