1- import WidgetKit
2- import SwiftUI
3- import Network
41import DesignSystem
52import Models
3+ import Network
4+ import SwiftUI
65import Timeline
6+ import WidgetKit
77
88struct LatestPostsWidgetProvider : AppIntentTimelineProvider {
9- func placeholder( in context : Context ) -> PostsWidgetEntry {
9+ func placeholder( in _ : Context ) -> PostsWidgetEntry {
1010 . init( date: Date ( ) ,
1111 title: " Home " ,
1212 statuses: [ . placeholder( ) ] ,
1313 images: [ : ] )
1414 }
15-
15+
1616 func snapshot( for configuration: LatestPostsWidgetConfiguration , in context: Context ) async -> PostsWidgetEntry {
1717 if let entry = await timeline ( for: configuration, context: context) . entries. first {
1818 return entry
@@ -22,30 +22,30 @@ struct LatestPostsWidgetProvider: AppIntentTimelineProvider {
2222 statuses: [ ] ,
2323 images: [ : ] )
2424 }
25-
25+
2626 func timeline( for configuration: LatestPostsWidgetConfiguration , in context: Context ) async -> Timeline < PostsWidgetEntry > {
2727 await timeline ( for: configuration, context: context)
2828 }
29-
29+
3030 private func timeline( for configuration: LatestPostsWidgetConfiguration , context: Context ) async -> Timeline < PostsWidgetEntry > {
3131 do {
3232 let statuses = await loadStatuses ( for: configuration. timeline. timeline,
3333 account: configuration. account,
3434 widgetFamily: context. family)
35- let images = try await loadImages ( urls: statuses. map { $0. account. avatar } )
35+ let images = try await loadImages ( urls: statuses. map { $0. account. avatar } )
3636 return Timeline ( entries: [ . init( date: Date ( ) ,
3737 title: configuration. timeline. timeline. title,
38- statuses: statuses,
39- images: images) ] , policy: . atEnd)
38+ statuses: statuses,
39+ images: images) ] , policy: . atEnd)
4040 } catch {
4141 return Timeline ( entries: [ . init( date: Date ( ) ,
4242 title: configuration. timeline. timeline. title,
4343 statuses: [ ] ,
4444 images: [ : ] ) ] ,
45- policy: . atEnd)
45+ policy: . atEnd)
4646 }
4747 }
48-
48+
4949 private func loadImages( urls: [ URL ] ) async throws -> [ URL : UIImage ] {
5050 try await withThrowingTaskGroup ( of: ( URL, UIImage? ) . self) { group in
5151 for url in urls {
@@ -54,25 +54,26 @@ struct LatestPostsWidgetProvider: AppIntentTimelineProvider {
5454 return ( url, UIImage ( data: response. 0 ) )
5555 }
5656 }
57-
57+
5858 var images : [ URL : UIImage ] = [ : ]
59-
59+
6060 for try await (url, image) in group {
6161 images [ url] = image
6262 }
63-
63+
6464 return images
6565 }
6666 }
6767}
6868
6969struct LatestPostsWidget : Widget {
7070 let kind : String = " LatestPostsWidget "
71-
71+
7272 var body : some WidgetConfiguration {
7373 AppIntentConfiguration ( kind: kind,
7474 intent: LatestPostsWidgetConfiguration . self,
75- provider: LatestPostsWidgetProvider ( ) ) { entry in
75+ provider: LatestPostsWidgetProvider ( ) )
76+ { entry in
7677 PostsWidgetView ( entry: entry)
7778 . containerBackground ( Color ( " WidgetBackground " ) . gradient, for: . widget)
7879 }
@@ -82,11 +83,10 @@ struct LatestPostsWidget: Widget {
8283 }
8384}
8485
85-
8686#Preview( as: . systemMedium) {
8787 LatestPostsWidget ( )
8888} timeline: {
89- PostsWidgetEntry ( date: . now,
89+ PostsWidgetEntry ( date: . now,
9090 title: " Mastodon " ,
9191 statuses: [ . placeholder( ) , . placeholder( ) , . placeholder( ) , . placeholder( ) ] ,
9292 images: [ : ] )
0 commit comments