diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift index 2437a21ed..24e631a21 100644 --- a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift @@ -22,4 +22,20 @@ public extension PlatformViewController { #endif return hostingController } + + static func makeLoggedOutShareExtensionController( + extensionContext: NSExtensionContext? + ) -> PlatformViewController { + registerFonts() + + let hostingController = PlatformHostingController( + rootView: LoggedOutShareExtensionView(extensionContext: extensionContext) + ) + #if os(iOS) + hostingController.view.layer.cornerRadius = 12 + hostingController.view.layer.masksToBounds = true + hostingController.view.layer.isOpaque = false + #endif + return hostingController + } } diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift index 7f5ad4aff..f8a29c7ba 100644 --- a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift @@ -17,7 +17,7 @@ public class ShareExtensionViewModel: ObservableObject { @Published var debugText: String? @Published var noteText: String = "" - let services = Services() + public let services = Services() let queue = OperationQueue() public init() {} diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/Views/ShareExtensionView.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/Views/ShareExtensionView.swift index b1b282a8e..4e0731b9d 100644 --- a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/Views/ShareExtensionView.swift +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/Views/ShareExtensionView.swift @@ -470,3 +470,26 @@ public struct ShareExtensionView: View { } } } + +public struct LoggedOutShareExtensionView: View { + let extensionContext: NSExtensionContext? + + public init( + extensionContext: NSExtensionContext?) + { + self.extensionContext = extensionContext + } + + public var body: some View { + VStack(spacing: 20) { + Text("You are not logged in. Please open the Omnivore app and log in to start saving items to your library") + Button(action: { + if let extensionContext = extensionContext { + extensionContext.completeRequest(returningItems: nil) + } + }, label: { Text("Dismiss") }) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(20) + } +} diff --git a/apple/OmnivoreKit/Sources/Models/CoreData/StorageProvider.swift b/apple/OmnivoreKit/Sources/Models/CoreData/StorageProvider.swift index 30e8e9429..409cb5813 100644 --- a/apple/OmnivoreKit/Sources/Models/CoreData/StorageProvider.swift +++ b/apple/OmnivoreKit/Sources/Models/CoreData/StorageProvider.swift @@ -7,7 +7,8 @@ let logger = Logger(subsystem: "app.omnivore", category: "models") /// An `NSPersistentContainer` subclass that lives in the `Models` package so that /// the data model is looked for in the same package bundle (rather than the main bundle) public class PersistentContainer: NSPersistentContainer { - public static var DatabaseFile = "store.sqlite" + public static var DatabaseVersion = "002" + public static var DatabaseFile = "store-v\(DatabaseVersion).sqlite" public static func path() -> URL? { // Store the sqlite file in the app group container. diff --git a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift index f113f72d4..70e798db2 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift @@ -53,10 +53,6 @@ public final class DataService: ObservableObject { } public init(appEnvironment: AppEnvironment, networker: Networker) { - if Self.isFirstTimeRunningNewAppBuild() { - Self.deleteLocalStorage() - } - self.appEnvironment = appEnvironment self.networker = networker self.persistentContainer = PersistentContainer.make() @@ -197,6 +193,7 @@ public final class DataService: ObservableObject { } } catch { print(error.localizedDescription) + print("ERROR: ", error) } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift index b6b920a25..1ad3d62f9 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift @@ -44,7 +44,7 @@ public extension DataService { continuation.resume(throwing: BasicError.message(messageText: "CoreData error")) } case .error: - continuation.resume(throwing: BasicError.message(messageText: "Newsletter Email fetch error")) + continuation.resume(throwing: BasicError.message(messageText: "labels fetch error")) } } } diff --git a/apple/Sources/ShareExtension/ShareExtensionViewController.swift b/apple/Sources/ShareExtension/ShareExtensionViewController.swift index bbf6dd0d6..c1efb133d 100644 --- a/apple/Sources/ShareExtension/ShareExtensionViewController.swift +++ b/apple/Sources/ShareExtension/ShareExtensionViewController.swift @@ -16,6 +16,16 @@ import Views super.viewDidLoad() view.backgroundColor = .clear + if !viewModel.services.authenticator.isLoggedIn, + !viewModel.services.dataService.appEnvironment.environmentConfigured + { + embed( + childViewController: UIViewController.makeLoggedOutShareExtensionController(extensionContext: extensionContext), + heightRatio: 0.60 + ) + return + } + NotificationCenter.default.addObserver( forName: Notification.Name("ShowAddNoteSheet"), object: nil,