Files
NetNewsWire/Shared/HTMLMetadata/HTMLMetadataDownloader.swift

45 lines
1.1 KiB
Swift
Raw Normal View History

2017-11-26 14:03:08 -08:00
//
// HTMLMetadataDownloader.swift
2018-08-28 22:18:24 -07:00
// NetNewsWire
2017-11-26 14:03:08 -08:00
//
// Created by Brent Simmons on 11/26/17.
// Copyright © 2017 Ranchero Software. All rights reserved.
//
import Foundation
import Web
import Parser
2017-11-26 14:03:08 -08:00
2024-09-24 22:31:21 -07:00
extension HTMLMetadata: @unchecked Sendable {}
2017-11-26 14:03:08 -08:00
struct HTMLMetadataDownloader {
2024-09-24 22:31:21 -07:00
@MainActor static func downloadMetadata(for url: String) async -> HTMLMetadata? {
guard let actualURL = URL(string: url) else {
return nil
2017-11-26 14:03:08 -08:00
}
let downloadData = try? await DownloadWithCacheManager.shared.download(actualURL)
let data = downloadData?.data
let response = downloadData?.response
2017-11-26 14:03:08 -08:00
if let data, !data.isEmpty, let response, response.statusIsOK {
let urlToUse = response.url ?? actualURL
let parserData = ParserData(url: urlToUse.absoluteString, data: data)
return await parseMetadata(with: parserData)
2017-11-26 14:03:08 -08:00
}
return nil
2017-11-26 14:03:08 -08:00
}
2024-09-24 22:31:21 -07:00
@MainActor private static func parseMetadata(with parserData: ParserData) async -> HTMLMetadata? {
2024-09-24 22:31:21 -07:00
let task = Task.detached { () -> HTMLMetadata? in
HTMLMetadataParser.metadata(with: parserData)
}
return await task.value
}
2017-11-26 14:03:08 -08:00
}