From 992d448e608514231040be2742f76eae72063433 Mon Sep 17 00:00:00 2001 From: nimbold <11913706+nimbold@users.noreply.github.com> Date: Wed, 3 Jun 2026 04:35:18 +0330 Subject: [PATCH] feat: add tray icon and context menu for main window and queues --- Sources/Firelink/FirelinkApp.swift | 7 +++++- Sources/Firelink/TrayMenuView.swift | 38 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 Sources/Firelink/TrayMenuView.swift diff --git a/Sources/Firelink/FirelinkApp.swift b/Sources/Firelink/FirelinkApp.swift index d8ae891..a457196 100644 --- a/Sources/Firelink/FirelinkApp.swift +++ b/Sources/Firelink/FirelinkApp.swift @@ -15,7 +15,7 @@ struct FirelinkApp: App { } var body: some Scene { - WindowGroup { + WindowGroup(id: "main") { ContentView() .environmentObject(controller) .environmentObject(settings) @@ -50,5 +50,10 @@ struct FirelinkApp: App { .keyboardShortcut("r", modifiers: [.command]) } } + + MenuBarExtra("Firelink", systemImage: "arrow.down.circle") { + TrayMenuView() + .environmentObject(controller) + } } } diff --git a/Sources/Firelink/TrayMenuView.swift b/Sources/Firelink/TrayMenuView.swift new file mode 100644 index 0000000..5e90dfb --- /dev/null +++ b/Sources/Firelink/TrayMenuView.swift @@ -0,0 +1,38 @@ +import SwiftUI + +struct TrayMenuView: View { + @Environment(\.openWindow) private var openWindow + @EnvironmentObject private var controller: DownloadController + + var body: some View { + Button("Show main window") { + openWindow(id: "main") + NSApp.activate(ignoringOtherApps: true) + } + + Button("Add downloads") { + openWindow(id: "add-downloads") + NSApp.activate(ignoringOtherApps: true) + } + + Menu("Start queue") { + ForEach(controller.queues) { queue in + Button(queue.name) { + controller.startQueue(queueID: queue.id) + } + } + } + + Button("Stop downloads") { + for download in controller.downloads where download.status == .downloading { + controller.pause(download) + } + } + + Divider() + + Button("Exit") { + NSApplication.shared.terminate(nil) + } + } +}