Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Modules/Sources/AsyncImageKit/Helpers/FaviconService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private final class FaviconCache: @unchecked Sendable {
}

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

Expand Down
1 change: 1 addition & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
* [*] Add permalink preview in the slug editor and make other improvements [#24949]
* [*] Add two accessible font sizes to Reader display settings [#25013]
* [*] Fix an issue with Reader failing to parse some search results [#25022]
* [*] Fix search for RSS feeds in Reader [#25023]
* [*] Add "Taxonomies" to Site Settings [#24955]
* [*] Update "Categories" picker to indicate multiple selection [#24952]
* [*] Fix overly long related post titles in Reader [#25011]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import WordPressKit

struct ReaderFeedCell: View {
let feed: ReaderFeed
@State private var faviconURL: URL?

var body: some View {
HStack(alignment: .center, spacing: 16) {
SiteIconView(viewModel: .init(feed: feed))
SiteIconView(viewModel: .init(feed: feed, faviconURL: faviconURL))
.frame(width: 40, height: 40)

VStack(alignment: .leading) {
Expand All @@ -23,6 +24,21 @@ struct ReaderFeedCell: View {
}
}
}
.task {
await loadFaviconIfNeeded()
}
}

private func loadFaviconIfNeeded() async {
guard feed.blavatarURL == nil, let url = feed.url else {
return
}

if let cachedFavicon = FaviconService.shared.cachedFavicon(forURL: url) {
faviconURL = cachedFavicon
} else {
faviconURL = try? await FaviconService.shared.favicon(forURL: url)
}
}

var title: String {
Expand All @@ -41,10 +57,12 @@ struct ReaderFeedCell: View {
}

extension SiteIconViewModel {
init(feed: ReaderFeed, size: Size = .regular) {
init(feed: ReaderFeed, faviconURL: URL? = nil, size: Size = .regular) {
self.init(size: size)
if let iconURL = feed.blavatarURL {
self.imageURL = SiteIconViewModel.optimizedURL(for: iconURL.absoluteString, imageSize: size.size)
} else if let faviconURL {
self.imageURL = faviconURL
}
}
}
Expand Down