@@ -14,10 +14,11 @@ internal extension URL {
14
14
// MARK: - Canteens
15
15
16
16
extension Canteen {
17
- public static func all( session: URLSession = . shared) async throws ( EmealError) -> [ Canteen ] {
17
+ public static func all( session: URLSessionProtocol = URLSession . shared) async throws ( EmealError) -> [ Canteen ] {
18
18
Logger . emealKit. debug ( " Fetching all canteens " )
19
19
do {
20
20
let ( data, _) = try await session. data ( from: URL . Mensa. canteens)
21
+ print ( String ( data: data, encoding: . utf8) !)
21
22
let canteens = try JSONDecoder ( ) . decode ( [ Canteen ] . self, from: data)
22
23
Logger . emealKit. debug ( " Successfully fetched \( canteens. count) canteens " )
23
24
return canteens
@@ -31,30 +32,35 @@ extension Canteen {
31
32
// MARK: - Meals
32
33
33
34
extension Meal {
34
- public static func `for`( canteen: Int , on date: Date , session: URLSession = . shared) async throws ( EmealError) -> [ Meal ] {
35
+ public static func `for`( canteen: Int , on date: Date , session: URLSessionProtocol = URLSession . shared) async throws ( EmealError) -> [ Meal ] {
35
36
Logger . emealKit. debug ( " Fetching meals for canteen \( canteen) on \( date) " )
36
37
do {
37
38
let ( data, _) = try await session. data ( from: URL . Mensa. meals ( canteen: canteen, date: date) )
38
39
let meals = try JSONDecoder ( ) . decode ( [ Meal ] . self, from: data)
39
40
Logger . emealKit. debug ( " Successfully fetched \( meals. count) meals " )
40
41
41
- let feedItems = try await Self . rssData ( )
42
- return meals. map { meal in
43
- var meal = meal
44
- let matchingItem = feedItems. first { $0. matches ( meal: meal) }
45
- if let matchingItem {
46
- Logger . emealKit. debug ( " Found matching feeditem for \( meal. id) " )
47
- meal. isSoldOut = matchingItem. isSoldOut
42
+ do {
43
+ let feedItems = try await Self . rssData ( )
44
+ return meals. map { meal in
45
+ var meal = meal
46
+ let matchingItem = feedItems. first { $0. matches ( meal: meal) }
47
+ if let matchingItem {
48
+ Logger . emealKit. debug ( " Found matching feeditem for \( meal. id) " )
49
+ meal. isSoldOut = matchingItem. isSoldOut
50
+ }
51
+ return meal
48
52
}
49
- return meal
53
+ } catch ( let error) {
54
+ Logger . emealKit. log ( " Failed to fetch rss data, continuing without: \( String ( describing: error) ) " )
55
+ return meals
50
56
}
51
57
} catch ( let error) {
52
58
Logger . emealKit. error ( " Failed to fetch meal data: \( String ( describing: error) ) " )
53
59
throw . other( error)
54
60
}
55
61
}
56
62
57
- public static func `for`( canteen: CanteenId , on date: Date , session: URLSession = . shared) async throws ( EmealError) -> [ Meal ] {
63
+ public static func `for`( canteen: CanteenId , on date: Date , session: URLSessionProtocol = URLSession . shared) async throws ( EmealError) -> [ Meal ] {
58
64
try await Self . for ( canteen: canteen. rawValue, on: date, session: session)
59
65
}
60
66
}
0 commit comments