WIP: local PDF saving
This commit is contained in:
@ -142,6 +142,7 @@ import Utils
|
||||
// NOTE: the issue here is the PDF is downloaded, but saved to a URL we don't know about
|
||||
// because it is changed.
|
||||
let pdfURL = await viewModel.downloadPDF(dataService: dataService)
|
||||
print("PDF URL", pdfURL)
|
||||
if let pdfURL = pdfURL {
|
||||
let document = HighlightedDocument(url: pdfURL, viewModel: viewModel)
|
||||
pdfStateObject.document = document
|
||||
|
||||
@ -3,6 +3,7 @@ import CoreData
|
||||
import Foundation
|
||||
import Models
|
||||
import Services
|
||||
import Utils
|
||||
|
||||
public final class PDFViewerViewModel: ObservableObject {
|
||||
@Published public var errorMessage: String?
|
||||
@ -93,6 +94,12 @@ public final class PDFViewerViewModel: ObservableObject {
|
||||
if itemDownloaded {
|
||||
return pdfItem.localPdfURL
|
||||
}
|
||||
if let tempURL = pdfItem.tempPDFURL {
|
||||
if let localURL = try? PDFUtils.copyToLocal(url: tempURL) {
|
||||
return tempURL
|
||||
// return URL(string: localURL)
|
||||
}
|
||||
}
|
||||
if let localURL = try await dataService.fetchPDFData(slug: pdfItem.slug, pageURLString: pdfItem.originalArticleURL) {
|
||||
return localURL
|
||||
}
|
||||
|
||||
@ -44,6 +44,7 @@
|
||||
<attribute name="siteName" optional="YES" attributeType="String"/>
|
||||
<attribute name="slug" attributeType="String"/>
|
||||
<attribute name="state" optional="YES" attributeType="String"/>
|
||||
<attribute name="tempPDFURL" optional="YES" attributeType="URI"/>
|
||||
<attribute name="title" attributeType="String"/>
|
||||
<attribute name="updatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<relationship name="highlights" toMany="YES" deletionRule="Cascade" destinationEntity="Highlight" inverseName="linkedItem" inverseEntity="Highlight"/>
|
||||
@ -91,7 +92,7 @@
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="Highlight" positionX="27" positionY="225" width="128" height="224"/>
|
||||
<element name="LinkedItem" positionX="-18" positionY="63" width="128" height="434"/>
|
||||
<element name="LinkedItem" positionX="-18" positionY="63" width="128" height="449"/>
|
||||
<element name="LinkedItemLabel" positionX="-36" positionY="18" width="128" height="134"/>
|
||||
<element name="NewsletterEmail" positionX="0" positionY="180" width="128" height="74"/>
|
||||
<element name="Viewer" positionX="45" positionY="234" width="128" height="89"/>
|
||||
|
||||
@ -47,7 +47,7 @@ public extension LinkedItem {
|
||||
var isReadyToRead: Bool {
|
||||
if isPDF {
|
||||
// If its a PDF we verify the local file is available
|
||||
return PDFUtils.exists(filename: localPDF)
|
||||
return PDFUtils.exists(filename: localPDF) || PDFUtils.tempExists(tempPDFURL: tempPDFURL)
|
||||
}
|
||||
// Check the state and whether we have HTML
|
||||
return state == "SUCCEEDED"
|
||||
|
||||
@ -7,6 +7,7 @@ public struct PDFItem {
|
||||
public let itemID: String
|
||||
public let pdfURL: URL?
|
||||
public let localPDF: String?
|
||||
public let tempPDFURL: URL?
|
||||
public let title: String
|
||||
public let slug: String
|
||||
public let readingProgress: Double
|
||||
@ -24,6 +25,7 @@ public struct PDFItem {
|
||||
itemID: item.unwrappedID,
|
||||
pdfURL: URL(string: item.unwrappedPageURLString),
|
||||
localPDF: item.localPDF,
|
||||
tempPDFURL: item.tempPDFURL,
|
||||
title: item.unwrappedID,
|
||||
slug: item.unwrappedSlug,
|
||||
readingProgress: item.readingProgress,
|
||||
|
||||
@ -148,9 +148,8 @@ public final class DataService: ObservableObject {
|
||||
switch pageScrape.contentType {
|
||||
case let .pdf(localUrl):
|
||||
linkedItem.contentReader = "PDF"
|
||||
linkedItem.tempPDFURL = localUrl
|
||||
linkedItem.title = PDFUtils.titleFromPdfFile(pageScrape.url)
|
||||
print("PERSISTING PDF", localUrl)
|
||||
linkedItem.localPDF = try PDFUtils.copyToLocal(url: localUrl)
|
||||
case let .html(html: html, title: title, iconURL: iconURL):
|
||||
linkedItem.contentReader = "WEB"
|
||||
linkedItem.originalHtml = html
|
||||
|
||||
@ -45,6 +45,13 @@ public enum PDFUtils {
|
||||
return false
|
||||
}
|
||||
|
||||
public static func tempExists(tempPDFURL: URL?) -> Bool {
|
||||
if let tempPDFURL = tempPDFURL {
|
||||
return FileManager.default.fileExists(atPath: tempPDFURL.path)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
public static func titleFromPdfFile(_ urlStr: String) -> String {
|
||||
let url = URL(string: urlStr)
|
||||
if let url = url {
|
||||
|
||||
Reference in New Issue
Block a user