set linked item so apply labels view can be shown in share extension

This commit is contained in:
Satindar Dhillon
2022-07-19 20:46:42 -07:00
parent 07a03b4d48
commit 6aa9e07f35
5 changed files with 32 additions and 6 deletions

View File

@ -153,6 +153,15 @@
"version" : "2.1.0"
}
},
{
"identity" : "pspdfkit-sp",
"kind" : "remoteSourceControl",
"location" : "https://github.com/PSPDFKit/PSPDFKit-SP",
"state" : {
"branch" : "master",
"revision" : "e9757beadad1b30de84073d3c33c1cd0f7a94b80"
}
},
{
"identity" : "sovran-swift",
"kind" : "remoteSourceControl",

View File

@ -56,7 +56,7 @@ let package = Package(
var appPackageDependencies: [Target.Dependency] {
var deps: [Target.Dependency] = ["Views", "Services", "Models", "Utils"]
// #if canImport(UIKit)
// deps.append(.product(name: "PSPDFKit", package: "PSPDFKit-SP"))
deps.append(.product(name: "PSPDFKit", package: "PSPDFKit-SP"))
// #endif
return deps
}
@ -70,7 +70,7 @@ var dependencies: [Package.Dependency] {
.package(url: "https://github.com/google/GoogleSignIn-iOS", from: "6.2.2")
]
// #if canImport(UIKit)
// deps.append(.package(url: "https://github.com/PSPDFKit/PSPDFKit-SP", branch: "master"))
deps.append(.package(url: "https://github.com/PSPDFKit/PSPDFKit-SP", branch: "master"))
// #endif
return deps
}

View File

@ -1,3 +1,4 @@
import CoreData
import Models
import SwiftUI
import Utils
@ -104,9 +105,13 @@ public class ShareExtensionViewModel: ObservableObject {
func createPage(pageScrapePayload: PageScrapePayload) async -> Bool {
var newRequestID: String?
var linkedItemObjectID: NSManagedObjectID?
do {
try await services.dataService.persistPageScrapePayload(pageScrapePayload, requestId: requestId)
linkedItemObjectID = try await services.dataService.persistPageScrapePayload(
pageScrapePayload,
requestId: requestId
)
} catch {
updateStatusOnMain(
requestId: nil,
@ -116,7 +121,7 @@ public class ShareExtensionViewModel: ObservableObject {
}
do {
updateStatusOnMain(requestId: requestId, newStatus: .saved)
updateStatusOnMain(requestId: requestId, newStatus: .saved, objectID: linkedItemObjectID)
switch pageScrapePayload.contentType {
case .none:
@ -147,12 +152,16 @@ public class ShareExtensionViewModel: ObservableObject {
return true
}
func updateStatusOnMain(requestId: String?, newStatus: ShareExtensionStatus) {
func updateStatusOnMain(requestId: String?, newStatus: ShareExtensionStatus, objectID: NSManagedObjectID? = nil) {
DispatchQueue.main.async {
self.status = newStatus
if let requestId = requestId {
self.requestId = requestId
}
if let objectID = objectID {
self.linkedItem = self.services.dataService.viewContext.object(with: objectID) as? LinkedItem
}
}
}
}

View File

@ -154,6 +154,7 @@ public struct ShareExtensionView: View {
Spacer()
if let item = viewModel.linkedItem {
// TODO: modify view to work for share ext only
ApplyLabelsView(mode: .item(item), onSave: nil)
}

View File

@ -126,7 +126,12 @@ public final class DataService: ObservableObject {
}
// swiftlint:disable:next function_body_length
public func persistPageScrapePayload(_ pageScrape: PageScrapePayload, requestId: String) async throws {
public func persistPageScrapePayload(
_ pageScrape: PageScrapePayload,
requestId: String
) async throws -> NSManagedObjectID? {
var objectID: NSManagedObjectID?
let normalizedURL = normalizeURL(pageScrape.url)
try await backgroundContext.perform { [weak self] in
@ -179,6 +184,7 @@ public final class DataService: ObservableObject {
do {
try self.backgroundContext.save()
logger.debug("ArticleContent saved succesfully")
objectID = linkedItem.objectID
} catch {
self.backgroundContext.rollback()
@ -186,5 +192,6 @@ public final class DataService: ObservableObject {
throw error
}
}
return objectID
}
}