I think we're done
This commit is contained in:
@@ -106,10 +106,8 @@ public struct MusicBrainzClient: Sendable {
|
||||
}
|
||||
}
|
||||
|
||||
public func fetchCoverArt(releaseId: String) async throws(MusicBrainzError) -> CoverArtResponse
|
||||
{
|
||||
let data = try await fetchRaw(
|
||||
baseURL: MusicBrainzClient.caaBaseURL, "/release/\(releaseId)")
|
||||
public func fetchCoverArt(releaseId: String) async throws(MusicBrainzError) -> CoverArtResponse {
|
||||
let data = try await fetchRaw(baseURL: MusicBrainzClient.caaBaseURL, "/release/\(releaseId)")
|
||||
do {
|
||||
return try JSONDecoder().decode(CoverArtResponse.self, from: data)
|
||||
} catch {
|
||||
@@ -117,6 +115,47 @@ public struct MusicBrainzClient: Sendable {
|
||||
}
|
||||
}
|
||||
|
||||
public func resolveWikimediaImageURL(_ url: URL) async throws(MusicBrainzError) -> URL {
|
||||
let urlString = url.absoluteString
|
||||
guard urlString.contains("commons.wikimedia.org/wiki/File:") || urlString.contains("Special:FilePath") else {
|
||||
return url
|
||||
}
|
||||
|
||||
let filename: String
|
||||
if urlString.contains("/wiki/File:") {
|
||||
filename = urlString.components(separatedBy: "/wiki/File:").last ?? ""
|
||||
} else if urlString.contains("Special:FilePath/") {
|
||||
filename = urlString.components(separatedBy: "Special:FilePath/").last ?? ""
|
||||
} else {
|
||||
return url
|
||||
}
|
||||
|
||||
guard !filename.isEmpty else { return url }
|
||||
|
||||
let wikimediaBaseURL = URL(string: "https://commons.wikimedia.org/w/api.php")!
|
||||
let queryItems = [
|
||||
URLQueryItem(name: "action", value: "query"),
|
||||
URLQueryItem(name: "titles", value: "File:\(filename)"),
|
||||
URLQueryItem(name: "prop", value: "imageinfo"),
|
||||
URLQueryItem(name: "iiprop", value: "url"),
|
||||
URLQueryItem(name: "format", value: "json"),
|
||||
]
|
||||
|
||||
let data = try await fetchRaw(baseURL: wikimediaBaseURL, "", queryItems: queryItems)
|
||||
do {
|
||||
let response = try JSONDecoder().decode(WikimediaResponse.self, from: data)
|
||||
if let page = response.query.pages.values.first,
|
||||
let directURLString = page.imageinfo?.first?.url,
|
||||
let directURL = URL(string: directURLString)
|
||||
{
|
||||
return directURL
|
||||
}
|
||||
return url
|
||||
} catch {
|
||||
throw .decodingError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@available(
|
||||
*, deprecated, message: "Use search(_ action: MusicBrainzSearchAction<T>, ...) instead"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user