Files
NetNewsWire/Shared/HTMLMetadata/HTMLMetadataDownloader.swift

56 lines
1.4 KiB
Swift

//
// HTMLMetadataDownloader.swift
// NetNewsWire
//
// Created by Brent Simmons on 11/26/17.
// Copyright © 2017 Ranchero Software. All rights reserved.
//
import Foundation
import os
import Web
import Parser
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? {
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader download for \(url)")
}
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
if let data, !data.isEmpty, let response, response.statusIsOK {
let urlToUse = response.url ?? actualURL
let parserData = ParserData(url: urlToUse.absoluteString, data: data)
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader parsing metadata for \(url)")
}
return await parseMetadata(with: parserData)
}
if debugLoggingEnabled {
logger.debug("HTMLMetadataDownloader failed download for \(url)")
}
return nil
}
private static func parseMetadata(with parserData: ParserData) async -> HTMLMetadata? {
return HTMLMetadataParser.metadata(with: parserData)
}
}