|
5 | 5 | // Created by Adrian Castro on 10.07.23.
|
6 | 6 | //
|
7 | 7 |
|
8 |
| -import SwiftUI |
9 | 8 | import Defaults
|
10 | 9 | import MenuBarExtraAccess
|
| 10 | +import SwiftUI |
| 11 | + |
11 | 12 | #if NOT_APP_STORE
|
12 |
| -import Sparkle |
| 13 | + import Sparkle |
13 | 14 | #endif
|
14 | 15 |
|
15 | 16 | @main
|
16 | 17 | struct ishare: App {
|
17 | 18 | @Default(.menuBarIcon) var menubarIcon
|
18 | 19 | @Default(.showMainMenu) var showMainMenu
|
19 | 20 | @StateObject private var appState = AppState()
|
20 |
| - @NSApplicationDelegateAdaptor private var appDelegate : AppDelegate |
21 |
| - |
| 21 | + @NSApplicationDelegateAdaptor private var appDelegate: AppDelegate |
| 22 | + |
22 | 23 | var body: some Scene {
|
23 |
| - MenuBarExtra() { |
| 24 | + MenuBarExtra { |
24 | 25 | MainMenuView()
|
25 | 26 | }
|
26 |
| - label: { |
27 |
| - switch menubarIcon { |
28 |
| - case .DEFAULT: Image(nsImage: GlyphIcon) |
29 |
| - case .APPICON: Image(nsImage: AppIcon) |
30 |
| - case .SYSTEM: Image(systemName: "photo.on.rectangle.angled") |
| 27 | + label: { |
| 28 | + switch menubarIcon { |
| 29 | + case .DEFAULT: Image(nsImage: GlyphIcon) |
| 30 | + case .APPICON: Image(nsImage: AppIcon) |
| 31 | + case .SYSTEM: Image(systemName: "photo.on.rectangle.angled") |
| 32 | + } |
31 | 33 | }
|
32 |
| - } |
33 |
| - .menuBarExtraAccess(isPresented: $showMainMenu) |
| 34 | + .menuBarExtraAccess(isPresented: $showMainMenu) |
34 | 35 | Settings {
|
35 | 36 | SettingsMenuView()
|
36 | 37 | }
|
37 | 38 | }
|
38 | 39 | }
|
39 | 40 |
|
40 | 41 | #if NOT_APP_STORE
|
41 |
| -class AppDelegate: NSObject, NSApplicationDelegate, SPUUpdaterDelegate { |
42 |
| - static private(set) var shared: AppDelegate! = nil |
43 |
| - var recordGif = false |
44 |
| - var screenRecorder: ScreenRecorder! |
45 |
| - var updaterController: SPUStandardUpdaterController! |
46 |
| - |
47 |
| - func application(_ application: NSApplication, open urls: [URL]) { |
48 |
| - if urls.count == 1 { |
49 |
| - importIscu(urls.first!) |
| 42 | + class AppDelegate: NSObject, NSApplicationDelegate, SPUUpdaterDelegate { |
| 43 | + private(set) static var shared: AppDelegate! = nil |
| 44 | + var recordGif = false |
| 45 | + var screenRecorder: ScreenRecorder! |
| 46 | + var updaterController: SPUStandardUpdaterController! |
| 47 | + |
| 48 | + func application(_: NSApplication, open urls: [URL]) { |
| 49 | + if urls.first!.isFileURL { |
| 50 | + importIscu(urls.first!) |
| 51 | + } |
| 52 | + |
| 53 | + if let url = urls.first { |
| 54 | + let path = url.host |
| 55 | + let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems |
| 56 | + |
| 57 | + if path == "upload" { |
| 58 | + if let fileItem = queryItems?.first(where: { $0.name == "file" }) { |
| 59 | + if let encodedFileURLString = fileItem.value, let decodedFileURLString = encodedFileURLString.removingPercentEncoding, let fileURL = URL(string: decodedFileURLString) { |
| 60 | + print("Received file URL: \(fileURL.absoluteString)") |
| 61 | + |
| 62 | + @Default(.uploadType) var uploadType |
| 63 | + |
| 64 | + uploadFile(fileURL: fileURL, uploadType: uploadType) { |
| 65 | + showToast(fileURL: fileURL) { |
| 66 | + NSSound.beep() |
| 67 | + } |
| 68 | + } |
| 69 | + } |
| 70 | + } |
| 71 | + } |
| 72 | + } |
50 | 73 | }
|
51 |
| - } |
52 |
| - |
53 |
| - func applicationDidFinishLaunching(_ notification: Notification) { |
54 |
| - AppDelegate.shared = self |
55 |
| - |
56 |
| - Task { |
57 |
| - screenRecorder = ScreenRecorder() |
| 74 | + |
| 75 | + func applicationDidFinishLaunching(_: Notification) { |
| 76 | + AppDelegate.shared = self |
| 77 | + |
| 78 | + Task { |
| 79 | + screenRecorder = ScreenRecorder() |
| 80 | + } |
| 81 | + |
| 82 | + updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: self, userDriverDelegate: nil) |
58 | 83 | }
|
59 |
| - |
60 |
| - updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: self, userDriverDelegate: nil) |
61 |
| - } |
62 |
| - |
63 |
| - func stopRecording() { |
64 |
| - Task { |
65 |
| - await screenRecorder.stop { [self] result in |
66 |
| - switch result { |
67 |
| - case .success(let url): |
68 |
| - print("Recording stopped successfully. URL: \(url)") |
69 |
| - postRecordingTasks(url, recordGif) |
70 |
| - case .failure(let error): |
71 |
| - print("Error while stopping recording: \(error.localizedDescription)") |
| 84 | + |
| 85 | + func stopRecording() { |
| 86 | + Task { |
| 87 | + await screenRecorder.stop { [self] result in |
| 88 | + switch result { |
| 89 | + case let .success(url): |
| 90 | + print("Recording stopped successfully. URL: \(url)") |
| 91 | + postRecordingTasks(url, recordGif) |
| 92 | + case let .failure(error): |
| 93 | + print("Error while stopping recording: \(error.localizedDescription)") |
| 94 | + } |
72 | 95 | }
|
73 | 96 | }
|
74 | 97 | }
|
75 | 98 | }
|
76 |
| -} |
77 | 99 | #else
|
78 |
| -class AppDelegate: NSObject, NSApplicationDelegate { |
79 |
| - static private(set) var shared: AppDelegate! = nil |
80 |
| - var recordGif = false |
81 |
| - var screenRecorder: ScreenRecorder! |
82 |
| - |
83 |
| - func application(_ application: NSApplication, open urls: [URL]) { |
84 |
| - if urls.count == 1 { |
85 |
| - importIscu(urls.first!) |
| 100 | + |
| 101 | + class AppDelegate: NSObject, NSApplicationDelegate { |
| 102 | + private(set) static var shared: AppDelegate! = nil |
| 103 | + var recordGif = false |
| 104 | + var screenRecorder: ScreenRecorder! |
| 105 | + |
| 106 | + func application(_: NSApplication, open urls: [URL]) { |
| 107 | + if urls.first!.isFileURL { |
| 108 | + importIscu(urls.first!) |
| 109 | + } |
| 110 | + |
| 111 | + if let url = urls.first { |
| 112 | + let path = url.host |
| 113 | + let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems |
| 114 | + |
| 115 | + if path == "upload" { |
| 116 | + if let fileItem = queryItems?.first(where: { $0.name == "file" }) { |
| 117 | + if let encodedFileURLString = fileItem.value, let decodedFileURLString = encodedFileURLString.removingPercentEncoding, let fileURL = URL(string: decodedFileURLString) { |
| 118 | + print("Received file URL: \(fileURL.absoluteString)") |
| 119 | + |
| 120 | + @Default(.uploadType) var uploadType |
| 121 | + |
| 122 | + uploadFile(fileURL: fileURL, uploadType: uploadType) { |
| 123 | + showToast(fileURL: fileURL) { |
| 124 | + NSSound.beep() |
| 125 | + } |
| 126 | + } |
| 127 | + } |
| 128 | + } |
| 129 | + } |
| 130 | + } |
86 | 131 | }
|
87 |
| - } |
88 |
| - |
89 |
| - func applicationDidFinishLaunching(_ notification: Notification) { |
90 |
| - AppDelegate.shared = self |
91 |
| - |
92 |
| - Task { |
93 |
| - screenRecorder = ScreenRecorder() |
| 132 | + |
| 133 | + func applicationDidFinishLaunching(_: Notification) { |
| 134 | + AppDelegate.shared = self |
| 135 | + |
| 136 | + Task { |
| 137 | + screenRecorder = ScreenRecorder() |
| 138 | + } |
94 | 139 | }
|
95 |
| - } |
96 |
| - |
97 |
| - func stopRecording() { |
98 |
| - Task { |
99 |
| - await screenRecorder.stop { [self] result in |
100 |
| - switch result { |
101 |
| - case .success(let url): |
102 |
| - print("Recording stopped successfully. URL: \(url)") |
103 |
| - postRecordingTasks(url, recordGif) |
104 |
| - case .failure(let error): |
105 |
| - print("Error while stopping recording: \(error.localizedDescription)") |
| 140 | + |
| 141 | + func stopRecording() { |
| 142 | + Task { |
| 143 | + await screenRecorder.stop { [self] result in |
| 144 | + switch result { |
| 145 | + case let .success(url): |
| 146 | + print("Recording stopped successfully. URL: \(url)") |
| 147 | + postRecordingTasks(url, recordGif) |
| 148 | + case let .failure(error): |
| 149 | + print("Error while stopping recording: \(error.localizedDescription)") |
| 150 | + } |
106 | 151 | }
|
107 | 152 | }
|
108 | 153 | }
|
109 | 154 | }
|
110 |
| -} |
111 | 155 | #endif
|
0 commit comments