Use HTMLMetadataCache.

This commit is contained in:
Brent Simmons
2024-10-14 22:47:16 -07:00
parent f7e23a9e69
commit c65eb3b000
3 changed files with 27 additions and 23 deletions

View File

@@ -13,7 +13,8 @@ let package = Package(
dependencies: [
.package(path: "../Core"),
.package(path: "../Articles"),
.package(path: "../Account")
.package(path: "../Account"),
.package(path: "../Web")
],
targets: [
.target(
@@ -21,7 +22,8 @@ let package = Package(
dependencies: [
"Core",
"Articles",
"Account"
"Account",
"Web"
]
// Disabled due to Sendable warnings about RSImage (NSImage).
// TODO: check if Swift 6 will allow us to deal with these warnings.

View File

@@ -11,21 +11,29 @@ import os
import Web
import Parser
struct HTMLMetadataDownloader {
public struct HTMLMetadataDownloader {
nonisolated(unsafe) private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HTMLMetadataDownloader")
private static let debugLoggingEnabled = true
static func downloadMetadata(for url: String) async -> HTMLMetadata? {
private static let cache = HTMLMetadataCache()
public static func downloadMetadata(for url: String) async -> HTMLMetadata? {
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader download for \(url)")
}
if let htmlMetadata = cache[url] {
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader returning cached metadata for \(url)")
}
return htmlMetadata
}
guard let actualURL = URL(string: url) else {
return nil
}
let downloadRecord = try? await DownloadWithCacheManager.shared.download(actualURL)
let data = downloadRecord?.data
let response = downloadRecord?.response
@@ -34,11 +42,19 @@ struct HTMLMetadataDownloader {
let urlToUse = response.url ?? actualURL
let parserData = ParserData(url: urlToUse.absoluteString, data: data)
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader parsing metadata for \(url)")
if let htmlMetadata = await parseMetadata(with: parserData) {
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader caching parsed metadata for \(url)")
}
cache[url] = htmlMetadata
return htmlMetadata
}
return await parseMetadata(with: parserData)
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader parser returned nil for \(url)")
}
return nil
}
if debugLoggingEnabled {