@@ -6,7 +6,7 @@ import Foundation
6
6
public class AcoustID {
7
7
let lookupEndpoint = " https://api.acoustid.org/v2/lookup "
8
8
9
- let session : URLSession
9
+ let session : URLSessionProtocol
10
10
let apiKey : String
11
11
let timeout : Double
12
12
@@ -57,17 +57,17 @@ public class AcoustID {
57
57
public let title : String ?
58
58
}
59
59
60
- init ( apiKey: String , timeout: Double , session: URLSession ) {
60
+ init ( apiKey: String , timeout: Double , session: URLSessionProtocol ) {
61
61
self . session = session
62
62
self . apiKey = apiKey
63
63
self . timeout = timeout
64
64
}
65
65
66
66
public convenience init ( apiKey: String , timeout: Double = 3.0 ) {
67
- self . init ( apiKey: apiKey, timeout: timeout, session: . shared)
67
+ self . init ( apiKey: apiKey, timeout: timeout, session: URLSession . shared)
68
68
}
69
69
70
- public func lookup( _ fingerprint: AudioFingerprint , completion : @escaping ( Result < [ APIResult ] , Error > ) -> Void ) {
70
+ public func lookup( _ fingerprint: AudioFingerprint ) async throws -> [ APIResult ] {
71
71
let query = [
72
72
URLQueryItem ( name: " client " , value: apiKey) ,
73
73
URLQueryItem ( name: " meta " , value: " recordings+releasegroups+compress " ) ,
@@ -78,41 +78,38 @@ public class AcoustID {
78
78
lookupURLComponents. queryItems = query
79
79
80
80
guard let lookupURL = lookupURLComponents. url else {
81
- completion ( . failure( Error . invalidURL) )
82
- return
81
+ throw Error . invalidURL
83
82
}
84
83
var request = URLRequest ( url: lookupURL)
85
84
request. timeoutInterval = timeout
86
85
87
- session. dataTask ( with: request) { ( data, _, error) in
88
- if error != nil {
89
- completion ( . failure( Error . networkFail) )
90
- } else if let data = data {
91
- guard let decodedResponse = try ? JSONDecoder ( ) . decode ( APIResponse . self, from: data) else {
92
- completion ( . failure( Error . parseFail) )
93
- return
94
- }
95
- if let apiError = decodedResponse. error {
96
- switch apiError. code {
97
- case 3 :
98
- completion ( . failure( Error . invalidFingerprint) )
99
- case 4 :
100
- completion ( . failure( Error . invalidApiKey) )
101
- case 8 :
102
- completion ( . failure( Error . invalidDuration) )
103
- case 14 :
104
- completion ( . failure( Error . tooManyRequests) )
105
- default :
106
- completion ( . failure( Error . apiFail) )
107
- }
108
- return
109
- }
110
- guard let results = decodedResponse. results else {
111
- completion ( . success( [ ] ) )
112
- return
113
- }
114
- completion ( . success( results) )
86
+ guard let ( data, _) = try ? await session. data ( for: request) else {
87
+ throw Error . networkFail
88
+ }
89
+
90
+ guard let decodedResponse = try ? JSONDecoder ( ) . decode ( APIResponse . self, from: data) else {
91
+ throw Error . parseFail
92
+ }
93
+
94
+ if let apiError = decodedResponse. error {
95
+ switch apiError. code {
96
+ case 3 :
97
+ throw Error . invalidFingerprint
98
+ case 4 :
99
+ throw Error . invalidApiKey
100
+ case 8 :
101
+ throw Error . invalidDuration
102
+ case 14 :
103
+ throw Error . tooManyRequests
104
+ default :
105
+ throw Error . apiFail
115
106
}
116
- } . resume ( )
107
+ }
108
+
109
+ guard let results = decodedResponse. results else {
110
+ return [ ]
111
+ }
112
+
113
+ return results
117
114
}
118
115
}
0 commit comments