2024-10-31 22:35:22 +08:00
|
|
|
import SwiftUI
|
2024-11-07 16:14:42 +08:00
|
|
|
import Sparkle
|
2024-10-31 22:35:22 +08:00
|
|
|
|
|
|
|
|
@main
|
|
|
|
|
struct Adobe_DownloaderApp: App {
|
2024-11-06 15:18:57 +08:00
|
|
|
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
2024-11-05 20:30:18 +08:00
|
|
|
@State private var showBackupAlert = false
|
2024-11-06 10:09:16 +08:00
|
|
|
@State private var showTipsSheet = false
|
|
|
|
|
@State private var showLanguagePicker = false
|
2024-11-06 15:52:01 +08:00
|
|
|
@State private var showCreativeCloudAlert = false
|
2024-11-11 19:16:56 +08:00
|
|
|
@State private var showBackupResultAlert = false
|
2025-04-06 10:23:29 +08:00
|
|
|
@State private var showSettingsView = false
|
2025-03-27 14:49:57 +08:00
|
|
|
|
|
|
|
|
@StateObject private var backupResult = BackupResult()
|
2024-11-18 20:33:45 +08:00
|
|
|
|
|
|
|
|
private var storage: StorageData { StorageData.shared }
|
2024-11-07 16:14:42 +08:00
|
|
|
private let updaterController: SPUStandardUpdaterController
|
2024-11-13 15:54:25 +08:00
|
|
|
|
2024-11-01 13:19:01 +08:00
|
|
|
init() {
|
2025-02-27 23:02:40 +08:00
|
|
|
globalNetworkService = NewNetworkService()
|
|
|
|
|
globalNetworkManager = NetworkManager()
|
|
|
|
|
globalNewDownloadUtils = NewDownloadUtils()
|
2024-11-18 20:33:45 +08:00
|
|
|
updaterController = SPUStandardUpdaterController(
|
|
|
|
|
startingUpdater: true,
|
|
|
|
|
updaterDelegate: nil,
|
|
|
|
|
userDriverDelegate: nil
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if storage.installedHelperBuild == "0" {
|
|
|
|
|
storage.installedHelperBuild = "0"
|
2024-11-15 17:47:15 +08:00
|
|
|
}
|
2024-11-13 15:54:25 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
if storage.isFirstLaunch {
|
|
|
|
|
initializeFirstLaunch()
|
2024-11-01 13:19:01 +08:00
|
|
|
}
|
2024-11-13 15:54:25 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
if storage.apiVersion == "6" {
|
|
|
|
|
storage.apiVersion = "6"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func initializeFirstLaunch() {
|
|
|
|
|
storage.downloadAppleSilicon = AppStatics.isAppleSilicon
|
|
|
|
|
storage.confirmRedownload = true
|
|
|
|
|
|
|
|
|
|
let systemLanguage = Locale.current.identifier
|
|
|
|
|
let matchedLanguage = AppStatics.supportedLanguages.first {
|
|
|
|
|
systemLanguage.hasPrefix($0.code.prefix(2))
|
|
|
|
|
}?.code ?? "ALL"
|
|
|
|
|
storage.defaultLanguage = matchedLanguage
|
|
|
|
|
storage.useDefaultLanguage = true
|
|
|
|
|
|
|
|
|
|
if let downloadsURL = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first {
|
|
|
|
|
storage.defaultDirectory = downloadsURL.path
|
|
|
|
|
storage.useDefaultDirectory = true
|
2024-11-13 13:20:25 +08:00
|
|
|
}
|
2024-11-01 13:19:01 +08:00
|
|
|
}
|
2024-11-13 15:54:25 +08:00
|
|
|
|
2024-10-31 22:35:22 +08:00
|
|
|
var body: some Scene {
|
|
|
|
|
WindowGroup {
|
2025-03-27 01:05:20 +08:00
|
|
|
ZStack {
|
|
|
|
|
BlurView()
|
|
|
|
|
.ignoresSafeArea()
|
|
|
|
|
|
2025-04-06 10:23:29 +08:00
|
|
|
ContentView(showSettingsView: $showSettingsView)
|
2025-02-27 23:02:40 +08:00
|
|
|
.environmentObject(globalNetworkManager)
|
2025-03-27 01:05:20 +08:00
|
|
|
.frame(minWidth: 792, minHeight: 600)
|
|
|
|
|
.tint(.blue)
|
|
|
|
|
.task {
|
|
|
|
|
await setupApplication()
|
|
|
|
|
}
|
|
|
|
|
.sheet(isPresented: $showCreativeCloudAlert) {
|
|
|
|
|
ShouldExistsSetUpView()
|
|
|
|
|
.environmentObject(globalNetworkManager)
|
|
|
|
|
}
|
2025-03-27 14:49:57 +08:00
|
|
|
.sheet(isPresented: $showBackupAlert) {
|
|
|
|
|
SetupBackupAlertView(
|
|
|
|
|
onConfirm: {
|
|
|
|
|
showBackupAlert = false
|
|
|
|
|
handleBackup()
|
|
|
|
|
},
|
|
|
|
|
onCancel: {
|
|
|
|
|
showBackupAlert = false
|
|
|
|
|
}
|
|
|
|
|
)
|
2024-11-06 10:09:16 +08:00
|
|
|
}
|
2025-03-27 14:49:57 +08:00
|
|
|
.sheet(isPresented: $showBackupResultAlert) {
|
|
|
|
|
SetupBackupResultView(
|
|
|
|
|
isSuccess: backupResult.success,
|
|
|
|
|
message: backupResult.message,
|
|
|
|
|
onDismiss: {
|
|
|
|
|
showBackupResultAlert = false
|
|
|
|
|
}
|
|
|
|
|
)
|
2025-03-27 01:05:20 +08:00
|
|
|
}
|
|
|
|
|
.sheet(isPresented: $showTipsSheet) {
|
|
|
|
|
TipsSheetView(
|
|
|
|
|
showTipsSheet: $showTipsSheet,
|
|
|
|
|
showLanguagePicker: $showLanguagePicker
|
|
|
|
|
)
|
|
|
|
|
.environmentObject(globalNetworkManager)
|
|
|
|
|
.sheet(isPresented: $showLanguagePicker) {
|
|
|
|
|
LanguagePickerView(languages: AppStatics.supportedLanguages) { language in
|
|
|
|
|
storage.defaultLanguage = language
|
|
|
|
|
showLanguagePicker = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-06 10:23:29 +08:00
|
|
|
.sheet(isPresented: $showSettingsView) {
|
|
|
|
|
CustomSettingsView(updater: updaterController.updater)
|
|
|
|
|
.interactiveDismissDisabled(false)
|
|
|
|
|
}
|
2025-03-27 01:05:20 +08:00
|
|
|
}
|
2024-10-31 22:35:22 +08:00
|
|
|
}
|
|
|
|
|
.windowStyle(.hiddenTitleBar)
|
2024-11-08 22:26:19 +08:00
|
|
|
.windowResizabilityContentSize()
|
2024-11-07 16:14:42 +08:00
|
|
|
.commands {
|
|
|
|
|
CommandGroup(after: .appInfo) {
|
|
|
|
|
CheckForUpdatesView(updater: updaterController.updater)
|
2025-04-06 10:23:29 +08:00
|
|
|
|
|
|
|
|
Divider()
|
|
|
|
|
|
|
|
|
|
Button("设置...") {
|
|
|
|
|
showSettingsView = true
|
|
|
|
|
}
|
|
|
|
|
.keyboardShortcut(",", modifiers: .command)
|
2024-11-07 16:14:42 +08:00
|
|
|
}
|
|
|
|
|
}
|
2024-10-31 22:35:22 +08:00
|
|
|
}
|
2024-11-18 20:33:45 +08:00
|
|
|
|
|
|
|
|
private func setupApplication() async {
|
2025-08-17 14:04:13 +08:00
|
|
|
Task {
|
|
|
|
|
PrivilegedHelperAdapter.shared.checkInstall()
|
|
|
|
|
}
|
2025-07-20 01:38:27 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
await MainActor.run {
|
2025-02-27 23:02:40 +08:00
|
|
|
globalNetworkManager.loadSavedTasks()
|
2024-11-18 20:33:45 +08:00
|
|
|
}
|
2024-11-06 10:09:16 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
let needsBackup = !ModifySetup.isSetupBackup()
|
|
|
|
|
let needsSetup = !ModifySetup.isSetupExists()
|
2024-11-06 21:57:17 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
await MainActor.run {
|
2025-08-02 21:36:20 +08:00
|
|
|
#if !DEBUG
|
2024-11-18 20:33:45 +08:00
|
|
|
if needsSetup {
|
|
|
|
|
showCreativeCloudAlert = true
|
|
|
|
|
} else if needsBackup {
|
|
|
|
|
showBackupAlert = true
|
|
|
|
|
}
|
2025-08-02 21:36:20 +08:00
|
|
|
#endif
|
2024-11-06 21:57:17 +08:00
|
|
|
|
2024-11-18 20:33:45 +08:00
|
|
|
if storage.isFirstLaunch {
|
|
|
|
|
showTipsSheet = true
|
|
|
|
|
storage.isFirstLaunch = false
|
|
|
|
|
}
|
2024-11-06 21:57:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
2024-11-18 20:33:45 +08:00
|
|
|
|
|
|
|
|
private func handleBackup() {
|
|
|
|
|
ModifySetup.backupAndModifySetupFile { success, message in
|
2025-03-27 14:49:57 +08:00
|
|
|
DispatchQueue.main.async {
|
|
|
|
|
self.backupResult.success = success
|
|
|
|
|
self.backupResult.message = message
|
|
|
|
|
self.showBackupResultAlert = true
|
|
|
|
|
}
|
2024-11-06 15:52:01 +08:00
|
|
|
}
|
|
|
|
|
}
|
2024-10-31 22:35:22 +08:00
|
|
|
}
|
2024-11-08 22:26:19 +08:00
|
|
|
|
|
|
|
|
extension Scene {
|
|
|
|
|
func windowResizabilityContentSize() -> some Scene {
|
|
|
|
|
if #available(macOS 13.0, *) {
|
|
|
|
|
return windowResizability(.contentSize)
|
|
|
|
|
} else {
|
|
|
|
|
return self
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-27 14:49:57 +08:00
|
|
|
|
|
|
|
|
class BackupResult: ObservableObject {
|
|
|
|
|
@Published var success: Bool = false
|
|
|
|
|
@Published var message: String = ""
|
|
|
|
|
}
|