@@ -4,10 +4,11 @@ import WordPressKit
44
55struct ReaderFeedCell : View {
66 let feed : ReaderFeed
7+ @State private var faviconURL : URL ?
78
89 var body : some View {
910 HStack ( alignment: . center, spacing: 16 ) {
10- SiteIconView ( viewModel: . init( feed: feed) )
11+ SiteIconView ( viewModel: . init( feed: feed, faviconURL : faviconURL ) )
1112 . frame ( width: 40 , height: 40 )
1213
1314 VStack ( alignment: . leading) {
@@ -23,6 +24,21 @@ struct ReaderFeedCell: View {
2324 }
2425 }
2526 }
27+ . task {
28+ await loadFaviconIfNeeded ( )
29+ }
30+ }
31+
32+ private func loadFaviconIfNeeded( ) async {
33+ guard feed. blavatarURL == nil , let url = feed. url else {
34+ return
35+ }
36+
37+ if let cachedFavicon = FaviconService . shared. cachedFavicon ( forURL: url) {
38+ faviconURL = cachedFavicon
39+ } else {
40+ faviconURL = try ? await FaviconService . shared. favicon ( forURL: url)
41+ }
2642 }
2743
2844 var title : String {
@@ -41,10 +57,12 @@ struct ReaderFeedCell: View {
4157}
4258
4359extension SiteIconViewModel {
44- init ( feed: ReaderFeed , size: Size = . regular) {
60+ init ( feed: ReaderFeed , faviconURL : URL ? = nil , size: Size = . regular) {
4561 self . init ( size: size)
4662 if let iconURL = feed. blavatarURL {
4763 self . imageURL = SiteIconViewModel . optimizedURL ( for: iconURL. absoluteString, imageSize: size. size)
64+ } else if let faviconURL {
65+ self . imageURL = faviconURL
4866 }
4967 }
5068}
0 commit comments