X-Git-Url: https://git.r.bdr.sh/rbdr/captura/blobdiff_plain/9431168da5eb1338d8c9fc8cc92e6245c539e73d..5802c153cae64142d84e3cd5f762939501ee7e53:/Captura/CapturaApp.swift?ds=sidebyside diff --git a/Captura/CapturaApp.swift b/Captura/CapturaApp.swift index 67709a5..dc358f7 100644 --- a/Captura/CapturaApp.swift +++ b/Captura/CapturaApp.swift @@ -1,7 +1,24 @@ +/* + Copyright (C) 2024 Rubén Beltrán del Río + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see https://captura.tranquil.systems. + */ import SwiftUI import Cocoa import Combine import AVFoundation +import Sparkle @main struct CapturaApp: App { @@ -38,6 +55,10 @@ struct CapturaApp: App { var remoteFiles: [CapturaRemoteFile] = [] var captureSessionConfiguration: CaptureSessionConfiguration = CaptureSessionConfiguration() + // Sparkle Configuration + @IBOutlet var checkForUpdatesMenuItem: NSMenuItem! + let updaterController: SPUStandardUpdaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil) + @objc dynamic var scriptedPreferences: ScriptedPreferences = ScriptedPreferences() func applicationDidFinishLaunching(_ notification: Notification) { @@ -58,7 +79,7 @@ struct CapturaApp: App { statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) if let button = statusItem.button { - button.image = NSImage(systemSymbolName: "rectangle.dashed.badge.record", accessibilityDescription: "Captura") + button.image = NSImage(named: "Idle") } statusItem.isVisible = true @@ -89,6 +110,11 @@ struct CapturaApp: App { statusItem.menu?.addItem(NSMenuItem.separator()) statusItem.menu?.addItem(NSMenuItem(title: "Open Local Folder", action: #selector(CapturaAppDelegate.onOpenFolder), keyEquivalent: "")) statusItem.menu?.addItem(NSMenuItem.separator()) + + checkForUpdatesMenuItem = NSMenuItem(title: "Check for Updates", action: #selector(SPUStandardUpdaterController.checkForUpdates(_:)), keyEquivalent: "") + checkForUpdatesMenuItem.target = updaterController + statusItem.menu?.addItem(checkForUpdatesMenuItem) + statusItem.menu?.addItem(NSMenuItem(title: "Preferences", action: #selector(CapturaAppDelegate.onOpenPreferences), keyEquivalent: "")) statusItem.menu?.addItem(NSMenuItem(title: "Quit", action: #selector(CapturaAppDelegate.onQuit), keyEquivalent: "")) } @@ -132,9 +158,14 @@ struct CapturaApp: App { func menuWillOpen(_ menu: NSMenu) { if captureState != .idle { - menu.cancelTracking() + menu.cancelTrackingWithoutAnimation() + if captureState == .selectingArea { + NotificationCenter.default.post(name: .startRecording, object: nil, userInfo: nil) + return + } if captureState == .recording { NotificationCenter.default.post(name: .stopRecording, object: nil, userInfo: nil) + return } } } @@ -232,6 +263,7 @@ struct CapturaApp: App { helpShown = false if captureState != .selectingArea { captureState = .selectingArea + updateImage() if let button = statusItem.button { let rectInWindow = button.convert(button.bounds, to: nil) let rectInScreen = button.window?.convertToScreen(rectInWindow) @@ -396,19 +428,23 @@ struct CapturaApp: App { if let button = statusItem.button { let image: String = switch captureState { case .idle: - "rectangle.dashed.badge.record" + "Idle" case .selectingArea: - "circle.rectangle.dashed" + if recordingWindow?.recordingContentView.box != nil { + "Ready to Record" + } else { + "Selecting" + } case .recording: - "checkmark.rectangle" + "Stop Frame 1" case .uploading: - "dock.arrow.up.rectangle" + "Upload Frame 1" case .uploaded: - "checkmark.rectangle.fill" + "OK" case .error: - "xmark.rectangle.fill" + "ERR" } - button.image = NSImage(systemSymbolName: image, accessibilityDescription: "Captura") + button.image = NSImage(named: image) } }