Adds a Share Extension so users can share URLs from Safari (or any app) to open the main app with the ImportURLSheet pre-filled. Uses a custom URL scheme (nextcloud-cookbook://) as the bridge between the extension and the main app. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
57 lines
1.8 KiB
Swift
57 lines
1.8 KiB
Swift
//
|
|
// Nextcloud_Cookbook_iOS_ClientApp.swift
|
|
// Nextcloud Cookbook iOS Client
|
|
//
|
|
// Created by Vincent Meilinger on 06.09.23.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
import SwiftUI
|
|
|
|
@main
|
|
struct Nextcloud_Cookbook_iOS_ClientApp: App {
|
|
@AppStorage("onboarding") var onboarding = true
|
|
@AppStorage("language") var language = Locale.current.language.languageCode?.identifier ?? "en"
|
|
@AppStorage("appearanceMode") var appearanceMode = AppearanceMode.system.rawValue
|
|
|
|
@State private var pendingImportURL: String?
|
|
|
|
var colorScheme: ColorScheme? {
|
|
switch appearanceMode {
|
|
case AppearanceMode.light.rawValue: return .light
|
|
case AppearanceMode.dark.rawValue: return .dark
|
|
default: return nil
|
|
}
|
|
}
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
ZStack {
|
|
if onboarding {
|
|
OnboardingView()
|
|
} else {
|
|
MainView(pendingImportURL: $pendingImportURL)
|
|
}
|
|
}
|
|
.preferredColorScheme(colorScheme)
|
|
.transition(.slide)
|
|
.environment(
|
|
\.locale,
|
|
.init(identifier: language ==
|
|
SupportedLanguage.DEVICE.rawValue ? (Locale.current.language.languageCode?.identifier ?? "en") : language)
|
|
)
|
|
.onOpenURL { url in
|
|
guard !onboarding else { return }
|
|
guard url.scheme == "nextcloud-cookbook",
|
|
url.host == "import",
|
|
let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
|
|
let recipeURL = components.queryItems?.first(where: { $0.name == "url" })?.value,
|
|
!recipeURL.isEmpty
|
|
else { return }
|
|
pendingImportURL = recipeURL
|
|
}
|
|
}
|
|
}
|
|
}
|