Skip to content

Commit 1a9833d

Browse files
committed
Add RSS feed support in Reader search
1 parent 4b0e0fb commit 1a9833d

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

Modules/Sources/AsyncImageKit/Helpers/FaviconService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ private final class FaviconCache: @unchecked Sendable {
7474
}
7575

7676
private let regex: NSRegularExpression? = {
77-
let pattern = "<link[^>]*rel=\"apple-touch-icon\"[^>]*href=\"([^\"]+)\"[^>]*>"
77+
let pattern = "<link[^>]*rel=\"apple-touch-icon|apple-touch-icon-precomposed\"[^>]*href=\"([^\"]+)\"[^>]*>"
7878
return try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
7979
}()
8080

WordPress/Classes/ViewRelated/Reader/Controllers/ReaderFeedCell.swift

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import WordPressKit
44

55
struct 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

4359
extension 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

Comments
 (0)