diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0150095..b9bdd86e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -319,7 +319,7 @@ jobs: channel: master - run: | sudo apt update -y - sudo apt install -y ninja-build libgtk-3-dev libayatana-appindicator3-1 libayatana-appindicator3-dev rpm patchelf libfuse2 locate imagemagick potrace + sudo apt install -y ninja-build libgtk-3-dev libayatana-appindicator3-1 libayatana-appindicator3-dev rpm patchelf libfuse2 locate imagemagick potrace libkeybinder-3.0-dev arch=$(uname -m) wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${arch}.AppImage" chmod +x appimagetool @@ -476,6 +476,7 @@ jobs: - cmake - curl - libgtk-3-dev + - libkeybinder-3.0-dev - ninja-build - unzip - xz-utils @@ -491,6 +492,7 @@ jobs: plugin: nil stage-packages: - libgtk-3-dev + - libkeybinder-3.0-dev - libappindicator3-dev override-build: | # work around pub get stack overflow # https://github.com/dart-lang/sdk/issues/51068#issuecomment-1396588253 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2d784ba1..27c8f74a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -94,7 +94,7 @@ jobs: - if: runner.os == 'Linux' run: | sudo apt-get update -y - sudo apt-get install -y ninja-build libgtk-3-dev libayatana-appindicator3-dev + sudo apt-get install -y ninja-build libgtk-3-dev libayatana-appindicator3-dev libkeybinder-3.0-dev go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared -o ui/flutter/linux/bundle/lib/libgopeed.so github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter flutter build linux diff --git a/ui/flutter/lib/app/modules/app/controllers/app_controller.dart b/ui/flutter/lib/app/modules/app/controllers/app_controller.dart index 96a3e188..f1b6577b 100644 --- a/ui/flutter/lib/app/modules/app/controllers/app_controller.dart +++ b/ui/flutter/lib/app/modules/app/controllers/app_controller.dart @@ -115,6 +115,9 @@ class AppController extends GetxController with WindowListener, TrayListener { @override void onWindowFocus() { refresh(); + if (Util.isMacos() && Database.instance.getRunAsMenubarApp()) { + windowManager.setSkipTaskbar(true); + } } @override diff --git a/ui/flutter/lib/app/modules/setting/views/setting_view.dart b/ui/flutter/lib/app/modules/setting/views/setting_view.dart index a388ee10..beb8337c 100644 --- a/ui/flutter/lib/app/modules/setting/views/setting_view.dart +++ b/ui/flutter/lib/app/modules/setting/views/setting_view.dart @@ -9,9 +9,11 @@ import 'package:gopeed/app/views/copy_button.dart'; import 'package:intl/intl.dart'; import 'package:launch_at_startup/launch_at_startup.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:window_manager/window_manager.dart'; import '../../../../api/api.dart' as api; import '../../../../api/model/downloader_config.dart'; +import '../../../../database/database.dart'; import '../../../../i18n/message.dart'; import '../../../../util/input_formatter.dart'; import '../../../../util/locale_manager.dart'; @@ -369,6 +371,46 @@ class SettingView extends GetView { ); }); + // Menubar mode only for macOS + final buildMenubarMode = !Util.isMacos() + ? () => null + : _buildConfigItem('runAsMenubarApp', () { + return Database.instance.getRunAsMenubarApp() ? 'on'.tr : 'off'.tr; + }, (Key key) { + return Container( + alignment: Alignment.centerLeft, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Switch( + value: Database.instance.getRunAsMenubarApp(), + onChanged: (bool value) async { + // Save to database (single source of truth) + Database.instance.saveRunAsMenubarApp(value); + // Apply dock icon visibility + await windowManager.setSkipTaskbar(value); + // Small delay to let macOS process the activation policy change + await Future.delayed(const Duration(milliseconds: 100)); + // Ensure window stays visible after toggle + await windowManager.show(); + await windowManager.focus(); + // Force UI refresh + controller.clearTap(); + await debounceSave(); + }, + ), + Text( + 'runAsMenubarAppDesc'.tr, + style: TextStyle( + fontSize: 12, + color: Theme.of(context).hintColor, + ), + ), + ], + ), + ); + }); + // http config items start final httpConfig = downloaderCfg.value.protocolConfig.http; final buildHttpUa = @@ -1353,6 +1395,7 @@ class SettingView extends GetView { buildDefaultDirectDownload(), buildBrowserExtension(), buildAutoStartup(), + buildMenubarMode(), ]), )), Text('archives'.tr), diff --git a/ui/flutter/lib/database/database.dart b/ui/flutter/lib/database/database.dart index d939b048..2100f466 100644 --- a/ui/flutter/lib/database/database.dart +++ b/ui/flutter/lib/database/database.dart @@ -10,6 +10,7 @@ const String _windowState = 'windowState'; const String _bookmark = 'bookmark'; const String _createHistory = 'createHistory'; const String _webToken = 'webToken'; +const String _runAsMenubarApp = 'runAsMenubarApp'; class Database { static final Database _instance = Database._internal(); @@ -109,4 +110,12 @@ class Database { void clearCreateHistory() { clear(_createHistory); } + + void saveRunAsMenubarApp(bool value) { + box.put(_runAsMenubarApp, value); + } + + bool getRunAsMenubarApp() { + return box.get(_runAsMenubarApp, defaultValue: false) as bool; + } } diff --git a/ui/flutter/lib/i18n/langs/de_de.dart b/ui/flutter/lib/i18n/langs/de_de.dart index 3b2ed6bd..2da0d8eb 100644 --- a/ui/flutter/lib/i18n/langs/de_de.dart +++ b/ui/flutter/lib/i18n/langs/de_de.dart @@ -106,6 +106,8 @@ const deDE = { 'Vielen Dank an alle Mitwirkenden, die beim Aufbau und der Entwicklung der Gopeed-Community geholfen haben!', 'browserExtension': 'Browsererweiterung', 'launchAtStartup': 'Beim Start starten', + 'runAsMenubarApp': 'Als Menüleisten-App ausführen', + 'runAsMenubarAppDesc': 'Dock-Symbol ausblenden und nur in der Menüleiste ausführen', 'seedConfig': 'Seed-Konfiguration', 'seedKeep': 'Weiter-seeden bis manuell gestoppt', 'seedRatio': 'Seed Verhältniss', diff --git a/ui/flutter/lib/i18n/langs/en_us.dart b/ui/flutter/lib/i18n/langs/en_us.dart index 8cd21cd8..a532defb 100644 --- a/ui/flutter/lib/i18n/langs/en_us.dart +++ b/ui/flutter/lib/i18n/langs/en_us.dart @@ -114,6 +114,8 @@ const enUS = { 'Thanks to all the contributors who have helped build and develop the Gopeed community!', 'browserExtension': 'Browser Extension', 'launchAtStartup': 'Launch at Startup', + 'runAsMenubarApp': 'Run as menubar app', + 'runAsMenubarAppDesc': 'Hide dock icon and run in menubar only', 'seedConfig': 'Seed Config', 'seedKeep': 'Keep seeding until manually stopped', 'seedRatio': 'Seed ratio', diff --git a/ui/flutter/lib/i18n/langs/es_es.dart b/ui/flutter/lib/i18n/langs/es_es.dart index 0b974f08..b1bd5400 100644 --- a/ui/flutter/lib/i18n/langs/es_es.dart +++ b/ui/flutter/lib/i18n/langs/es_es.dart @@ -99,6 +99,8 @@ const esES = { '¡Gracias a todos los contribuyentes que han ayudado a construir y desarrollar la comunidad Gopeed!', 'browserExtension': 'Extensión del Navegador', 'launchAtStartup': 'Iniciar al Arranque', + 'runAsMenubarApp': 'Ejecutar como aplicación de barra de menú', + 'runAsMenubarAppDesc': 'Ocultar icono del Dock y ejecutar solo en la barra de menú', 'seedConfig': 'Configuración de Semilla', 'seedKeep': 'Mantener sembrado', 'seedRatio': 'Ratio de semilla', diff --git a/ui/flutter/lib/i18n/langs/fa_ir.dart b/ui/flutter/lib/i18n/langs/fa_ir.dart index b06c0984..f9fb4079 100644 --- a/ui/flutter/lib/i18n/langs/fa_ir.dart +++ b/ui/flutter/lib/i18n/langs/fa_ir.dart @@ -86,5 +86,8 @@ const faIR = { 'categoryPath': 'مسیر دسته‌بندی', 'builtInCategory': 'دسته‌بندی داخلی قابل حذف نیست', 'selectCategory': 'انتخاب دسته‌بندی', + 'launchAtStartup': 'راه‌اندازی در استارت‌آپ', + 'runAsMenubarApp': 'اجرا به عنوان برنامه نوار منو', + 'runAsMenubarAppDesc': 'پنهان کردن آیکون Dock و اجرا فقط در نوار منو', } }; diff --git a/ui/flutter/lib/i18n/langs/fr_fr.dart b/ui/flutter/lib/i18n/langs/fr_fr.dart index 77da3e63..4f138207 100644 --- a/ui/flutter/lib/i18n/langs/fr_fr.dart +++ b/ui/flutter/lib/i18n/langs/fr_fr.dart @@ -99,6 +99,8 @@ const frFR = { 'Merci à tous les contributeurs qui ont aidé à construire et développer la communauté Gopeed !', 'browserExtension': 'Extension du navigateur', 'launchAtStartup': 'Lancer au démarrage', + 'runAsMenubarApp': 'Exécuter en tant qu\'application de barre de menus', + 'runAsMenubarAppDesc': 'Masquer l\'icône du Dock et exécuter uniquement dans la barre de menus', 'skipVerifyCert': 'Ignorer la vérification du certificat', 'archives': 'Archives', 'autoExtract': 'Extraire automatiquement les archives', diff --git a/ui/flutter/lib/i18n/langs/hu_hu.dart b/ui/flutter/lib/i18n/langs/hu_hu.dart index e91c5cd8..c69b4815 100644 --- a/ui/flutter/lib/i18n/langs/hu_hu.dart +++ b/ui/flutter/lib/i18n/langs/hu_hu.dart @@ -106,6 +106,8 @@ const huHU = { 'Köszönet minden hozzájárulónak, aki segített a Gopeed közösség építésében és fejlesztésében!', 'browserExtension': 'Böngésző bővítmény', 'launchAtStartup': 'Indítás indításkor', + 'runAsMenubarApp': 'Futtatás menüsáv alkalmazásként', + 'runAsMenubarAppDesc': 'Dock ikon elrejtése és csak a menüsávban való futtatás', 'seedConfig': 'Seed beállítás', 'seedKeep': 'Tartsa a seedet amíg manuálisan le nem állítják', 'seedRatio': 'Seed arány', diff --git a/ui/flutter/lib/i18n/langs/id_id.dart b/ui/flutter/lib/i18n/langs/id_id.dart index 093517b2..bd74e3cc 100644 --- a/ui/flutter/lib/i18n/langs/id_id.dart +++ b/ui/flutter/lib/i18n/langs/id_id.dart @@ -101,6 +101,8 @@ const idID = { 'Terima kasih kepada semua kontributor yang telah membantu membangun dan mengembangkan komunitas Gopeed!', 'browserExtension': 'Ekstensi Perambanan', 'launchAtStartup': 'Luncurkan saat Startup', + 'runAsMenubarApp': 'Jalankan sebagai aplikasi bilah menu', + 'runAsMenubarAppDesc': 'Sembunyikan ikon Dock dan jalankan hanya di bilah menu', 'seedConfig': 'Konfigurasi Seed', 'seedKeep': 'Terus seeding hingga dihentikan secara manual', 'seedRatio': 'Rasio Seed', diff --git a/ui/flutter/lib/i18n/langs/it_it.dart b/ui/flutter/lib/i18n/langs/it_it.dart index 16e53cc4..0281c587 100644 --- a/ui/flutter/lib/i18n/langs/it_it.dart +++ b/ui/flutter/lib/i18n/langs/it_it.dart @@ -97,6 +97,8 @@ const itIT = { 'Grazie a tutti i contributori che hanno contribuito a costruire e sviluppare la comunità Gopeed!', 'browserExtension': 'Estensione del browser', 'launchAtStartup': "Lancia all'avvio", + 'runAsMenubarApp': 'Esegui come app della barra dei menu', + 'runAsMenubarAppDesc': 'Nascondi icona Dock ed esegui solo nella barra dei menu', 'skipVerifyCert': 'Salta la verifica del certificato', 'archives': 'Archivi', 'autoExtract': 'Estrai automaticamente gli archivi', diff --git a/ui/flutter/lib/i18n/langs/ja_jp.dart b/ui/flutter/lib/i18n/langs/ja_jp.dart index 18e88f48..4170e3d5 100644 --- a/ui/flutter/lib/i18n/langs/ja_jp.dart +++ b/ui/flutter/lib/i18n/langs/ja_jp.dart @@ -87,5 +87,8 @@ const jaJP = { 'categoryPath': 'カテゴリパス', 'builtInCategory': '内蔵カテゴリは削除できません', 'selectCategory': 'カテゴリを選択', + 'launchAtStartup': '起動時に起動', + 'runAsMenubarApp': 'メニューバーアプリとして実行', + 'runAsMenubarAppDesc': 'Dockアイコンを非表示にして、メニューバーのみで実行', } }; diff --git a/ui/flutter/lib/i18n/langs/pl_pl.dart b/ui/flutter/lib/i18n/langs/pl_pl.dart index 113414b8..c9e08fb0 100644 --- a/ui/flutter/lib/i18n/langs/pl_pl.dart +++ b/ui/flutter/lib/i18n/langs/pl_pl.dart @@ -95,6 +95,8 @@ const plPL = { 'Dziękuję wszystkim za pomoc przy powstawaniu aplikacji Gopeed!', 'browserExtension': 'Wtyczka dla przeglądarki', 'launchAtStartup': 'Uruchom na starcie', + 'runAsMenubarApp': 'Uruchom jako aplikacja paska menu', + 'runAsMenubarAppDesc': 'Ukryj ikonę Docka i uruchom tylko w pasku menu', 'skipVerifyCert': 'Pomiń weryfikację certyfikatu', 'archives': 'Archiwa', 'autoExtract': 'Automatycznie wyodrębnij archiwa', diff --git a/ui/flutter/lib/i18n/langs/pt_br.dart b/ui/flutter/lib/i18n/langs/pt_br.dart index f9960d83..e720d4a9 100644 --- a/ui/flutter/lib/i18n/langs/pt_br.dart +++ b/ui/flutter/lib/i18n/langs/pt_br.dart @@ -103,6 +103,8 @@ const ptBR = { 'Obrigado a todos os colaboradores que ajudaram a construir e desenvolver a comunidade Gopeed!', 'browserExtension': 'Extensões para Navegadores', 'launchAtStartup': 'Launch at Startup', + 'runAsMenubarApp': 'Executar como aplicativo da barra de menus', + 'runAsMenubarAppDesc': 'Ocultar ícone do Dock e executar apenas na barra de menus', 'seedConfig': 'Seed Config', 'seedKeep': 'Keep seeding until manually stopped', 'seedRatio': 'Seed ratio', diff --git a/ui/flutter/lib/i18n/langs/ru_ru.dart b/ui/flutter/lib/i18n/langs/ru_ru.dart index 4260eb16..be9dd850 100644 --- a/ui/flutter/lib/i18n/langs/ru_ru.dart +++ b/ui/flutter/lib/i18n/langs/ru_ru.dart @@ -103,6 +103,8 @@ const ruRU = { 'Благодарим всех участников за их вклад в строительство и развитие сообщества Gopeed!', 'browserExtension': 'Расширение браузера', 'launchAtStartup': 'Запускать при загрузке системы', + 'runAsMenubarApp': 'Запускать как приложение в строке меню', + 'runAsMenubarAppDesc': 'Скрыть значок в Dock и запускать только в строке меню', 'seedConfig': 'Настройка раздачи', 'seedKeep': 'Раздавать пока не остановлю вручную', 'seedRatio': 'Коэффициент раздачи', diff --git a/ui/flutter/lib/i18n/langs/ta_ta.dart b/ui/flutter/lib/i18n/langs/ta_ta.dart index 8dc4607c..aa200f56 100644 --- a/ui/flutter/lib/i18n/langs/ta_ta.dart +++ b/ui/flutter/lib/i18n/langs/ta_ta.dart @@ -97,6 +97,8 @@ const taTA = { 'Gopeed சமூகத்தை உருவாக்கவும் மற்றும் மேம்படுத்த உதவிய அனைத்து பங்களிப்பாளர்களுக்கும் நன்றி!', 'browserExtension': 'உலாவி நீட்டிப்பு', 'launchAtStartup': 'தொடக்கத்தின் போது இயங்கு', + 'runAsMenubarApp': 'மெனுபார் பயன்பாடாக இயக்கு', + 'runAsMenubarAppDesc': 'டாக் ஐகானை மறைத்து மெனுபாரில் மட்டும் இயக்கு', 'skipVerifyCert': 'திருத்தி சான்று சரிபார்க்கவும்', 'archives': 'காப்பகங்கள்', 'autoExtract': 'காப்பகங்களை தானாக பிரித்தெடு', diff --git a/ui/flutter/lib/i18n/langs/tr_tr.dart b/ui/flutter/lib/i18n/langs/tr_tr.dart index 78534d76..475919f4 100644 --- a/ui/flutter/lib/i18n/langs/tr_tr.dart +++ b/ui/flutter/lib/i18n/langs/tr_tr.dart @@ -104,6 +104,8 @@ const trTR = { 'Gopeed topluluğunun inşasında ve geliştirilmesinde katkıda bulunan herkese teşekkürler!', 'browserExtension': 'Tarayıcı Eklentisi', 'launchAtStartup': 'Başlangıçta Çalıştır', + 'runAsMenubarApp': 'Menü çubuğu uygulaması olarak çalıştır', + 'runAsMenubarAppDesc': 'Dock simgesini gizle ve yalnızca menü çubuğunda çalıştır', 'seedConfig': 'Seed Ayarları', 'seedKeep': 'Manuel olarak durdurulana kadar seed etmeye devam et', 'seedRatio': 'Seed oranı', diff --git a/ui/flutter/lib/i18n/langs/uk_ua.dart b/ui/flutter/lib/i18n/langs/uk_ua.dart index d18d7c41..bda0db79 100644 --- a/ui/flutter/lib/i18n/langs/uk_ua.dart +++ b/ui/flutter/lib/i18n/langs/uk_ua.dart @@ -103,6 +103,8 @@ const ukUA = { 'Дякуємо всім учасникам, які допомогли створити та розвивати спільноту Gopeed!', 'browserExtension': 'Розширення для браузера', 'launchAtStartup': 'Запускати під час завантаження системи', + 'runAsMenubarApp': 'Запускати як додаток у рядку меню', + 'runAsMenubarAppDesc': 'Приховати значок у Dock і запускати лише в рядку меню', 'seedConfig': 'Налаштування роздачі', 'seedKeep': 'Роздавати доки не зупиню вручну', 'seedRatio': 'Коефіцієнт роздачі', diff --git a/ui/flutter/lib/i18n/langs/vi_vn.dart b/ui/flutter/lib/i18n/langs/vi_vn.dart index 6dd0bc3a..cdf1b966 100644 --- a/ui/flutter/lib/i18n/langs/vi_vn.dart +++ b/ui/flutter/lib/i18n/langs/vi_vn.dart @@ -114,5 +114,8 @@ const viVN = { 'categoryPath': 'Đường dẫn danh mục', 'builtInCategory': 'Không thể xóa danh mục tích hợp', 'selectCategory': 'Chọn danh mục', + 'launchAtStartup': 'Khởi động cùng hệ thống', + 'runAsMenubarApp': 'Chạy như ứng dụng thanh menu', + 'runAsMenubarAppDesc': 'Ẩn biểu tượng Dock và chỉ chạy trong thanh menu', }, }; diff --git a/ui/flutter/lib/i18n/langs/zh_cn.dart b/ui/flutter/lib/i18n/langs/zh_cn.dart index ee08e6f3..ca1f4a42 100644 --- a/ui/flutter/lib/i18n/langs/zh_cn.dart +++ b/ui/flutter/lib/i18n/langs/zh_cn.dart @@ -112,6 +112,8 @@ const zhCN = { 'thanksDesc': '感谢所有为 Gopeed 社区建设添砖加瓦的贡献者们!', 'browserExtension': '浏览器扩展', 'launchAtStartup': '开机自动运行', + 'runAsMenubarApp': '以菜单栏应用运行', + 'runAsMenubarAppDesc': '隐藏程序坞图标,仅在菜单栏运行', 'seedConfig': '做种设置', 'seedKeep': '持续做种直到手动停止', 'seedRatio': '做种分享率', diff --git a/ui/flutter/lib/i18n/langs/zh_tw.dart b/ui/flutter/lib/i18n/langs/zh_tw.dart index f24614b5..a459593e 100644 --- a/ui/flutter/lib/i18n/langs/zh_tw.dart +++ b/ui/flutter/lib/i18n/langs/zh_tw.dart @@ -100,6 +100,8 @@ const zhTW = { 'thanksDesc': '感謝所有幫助建立和發展 Gopeed 社群的貢獻者!', 'browserExtension': '瀏覽器擴充功能', 'launchAtStartup': '開機自動執行', + 'runAsMenubarApp': '以選單列應用程式執行', + 'runAsMenubarAppDesc': '隱藏 Dock 圖示,僅在選單列執行', 'seedConfig': '做種設定', 'seedKeep': '持續做種直到手動停止', 'seedRatio': '做種分享率', diff --git a/ui/flutter/lib/main.dart b/ui/flutter/lib/main.dart index 81d31dc1..72177dd0 100644 --- a/ui/flutter/lib/main.dart +++ b/ui/flutter/lib/main.dart @@ -1,8 +1,10 @@ import 'package:args/args.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_foreground_task/flutter_foreground_task.dart'; import 'package:get/get.dart'; +import 'package:hotkey_manager/hotkey_manager.dart'; import 'package:window_manager/window_manager.dart'; import 'api/api.dart' as api; @@ -67,10 +69,14 @@ Future init(Args args) async { if (Util.isDesktop()) { await windowManager.ensureInitialized(); final windowState = Database.instance.getWindowState(); + + // Check if menubar mode is enabled (only for macOS) + final runAsMenubarApp = Util.isMacos() && Database.instance.getRunAsMenubarApp(); + final windowOptions = WindowOptions( size: Size(windowState?.width ?? 800, windowState?.height ?? 600), center: true, - skipTaskbar: false, + skipTaskbar: runAsMenubarApp, ); await windowManager.waitUntilReadyToShow(windowOptions, () async { if (!args.hidden) { @@ -84,6 +90,22 @@ Future init(Args args) async { // await windowManager.maximize(); // } }); + + // Register Cmd+W hotkey on macOS to close window + if (Util.isMacos()) { + await hotKeyManager.unregisterAll(); + HotKey hotKey = HotKey( + key: PhysicalKeyboardKey.keyW, + modifiers: [HotKeyModifier.meta], + scope: HotKeyScope.inapp, + ); + await hotKeyManager.register( + hotKey, + keyDownHandler: (hotKey) { + windowManager.hide(); + }, + ); + } } initLogger(); diff --git a/ui/flutter/linux/packaging/deb/make_config.yaml b/ui/flutter/linux/packaging/deb/make_config.yaml index 91f54ae0..b3d565a8 100644 --- a/ui/flutter/linux/packaging/deb/make_config.yaml +++ b/ui/flutter/linux/packaging/deb/make_config.yaml @@ -15,6 +15,7 @@ icon: assets/icon/icon.svg dependencies: - libayatana-appindicator3-1 - gir1.2-ayatanaappindicator3-0.1 + - libkeybinder-3.0-0 keywords: - Application diff --git a/ui/flutter/macos/Podfile.lock b/ui/flutter/macos/Podfile.lock index 84da3e2e..9481da62 100644 --- a/ui/flutter/macos/Podfile.lock +++ b/ui/flutter/macos/Podfile.lock @@ -6,6 +6,12 @@ PODS: - device_info_plus (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) + - HotKey (0.2.1) + - hotkey_manager_macos (0.0.1): + - FlutterMacOS + - HotKey + - open_dir_macos (0.0.1): + - FlutterMacOS - package_info_plus (0.0.1): - FlutterMacOS - path_provider_foundation (0.0.1): @@ -30,6 +36,8 @@ DEPENDENCIES: - desktop_drop (from `Flutter/ephemeral/.symlinks/plugins/desktop_drop/macos`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - FlutterMacOS (from `Flutter/ephemeral`) + - hotkey_manager_macos (from `Flutter/ephemeral/.symlinks/plugins/hotkey_manager_macos/macos`) + - open_dir_macos (from `Flutter/ephemeral/.symlinks/plugins/open_dir_macos/macos`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`) @@ -39,6 +47,10 @@ DEPENDENCIES: - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`) +SPEC REPOS: + trunk: + - HotKey + EXTERNAL SOURCES: app_links: :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos @@ -48,6 +60,10 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos FlutterMacOS: :path: Flutter/ephemeral + hotkey_manager_macos: + :path: Flutter/ephemeral/.symlinks/plugins/hotkey_manager_macos/macos + open_dir_macos: + :path: Flutter/ephemeral/.symlinks/plugins/open_dir_macos/macos package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: @@ -66,19 +82,22 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - app_links: 10e0a0ab602ffaf34d142cd4862f29d34b303b2a - desktop_drop: 69eeff437544aa619c8db7f4481b3a65f7696898 - device_info_plus: 74e614483d05c89290d30a4c8feae15d555f7427 + app_links: 9028728e32c83a0831d9db8cf91c526d16cc5468 + desktop_drop: e0b672a7d84c0a6cbc378595e82cdb15f2970a43 + device_info_plus: 724ebb83a99d517430554a1810445ff28fe71fa3 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - package_info_plus: f5790acc797bf17c3e959e9d6cf162cc68ff7523 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38 - share_plus: fd717ef89a2801d3491e737630112b80c310640e - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - tray_manager: 9064e219c56d75c476e46b9a21182087930baf90 - url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 - window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8 + HotKey: 400beb7caa29054ea8d864c96f5ba7e5b4852277 + hotkey_manager_macos: a4317849af96d2430fa89944d3c58977ca089fbe + open_dir_macos: 79810d7921d777f8732bf6358b3a0839a8fad9b5 + package_info_plus: 8147fd5037235202932580f35ebe195f7a55e3cd + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + screen_retriever: 4f97c103641aab8ce183fa5af3b87029df167936 + share_plus: b818fd6bf0e537317735186d977a68a125703488 + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166 + url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock index 2d7a5dda..38dd6c36 100644 --- a/ui/flutter/pubspec.lock +++ b/ui/flutter/pubspec.lock @@ -5,15 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "72.0.0" - _macros: - dependency: transitive - description: dart - source: sdk - version: "0.3.2" + version: "67.0.0" after_layout: dependency: transitive description: @@ -26,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.7.0" + version: "6.4.1" animations: dependency: transitive description: @@ -298,10 +293,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.7" + version: "2.3.6" desktop_drop: dependency: "direct main" description: @@ -530,6 +525,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.3" + hotkey_manager: + dependency: "direct main" + description: + name: hotkey_manager + sha256: "06f0655b76c8dd322fb7101dc615afbdbf39c3d3414df9e059c33892104479cd" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + hotkey_manager_linux: + dependency: transitive + description: + name: hotkey_manager_linux + sha256: "83676bda8210a3377bc6f1977f193bc1dbdd4c46f1bdd02875f44b6eff9a8473" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + hotkey_manager_macos: + dependency: transitive + description: + name: hotkey_manager_macos + sha256: "03b5967e64357b9ac05188ea4a5df6fe4ed4205762cb80aaccf8916ee1713c96" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + hotkey_manager_platform_interface: + dependency: transitive + description: + name: hotkey_manager_platform_interface + sha256: "98ffca25b8cc9081552902747b2942e3bc37855389a4218c9d50ca316b653b13" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + hotkey_manager_windows: + dependency: transitive + description: + name: hotkey_manager_windows + sha256: "0d03ced9fe563ed0b68f0a0e1b22c9ffe26eb8053cb960e401f68a4f070e0117" + url: "https://pub.dev" + source: hosted + version: "0.2.0" http: dependency: transitive description: @@ -683,14 +718,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - macros: - dependency: transitive - description: - name: macros - sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" - url: "https://pub.dev" - source: hosted - version: "0.1.2-main.4" matcher: dependency: transitive description: @@ -783,10 +810,10 @@ packages: dependency: "direct main" description: name: open_filex - sha256: ba425ea49affd0a98a234aa9344b9ea5d4c4f7625a1377961eae9fe194c3d523 + sha256: "9976da61b6a72302cf3b1efbce259200cd40232643a467aac7370addf94d6900" url: "https://pub.dev" source: hosted - version: "4.5.0" + version: "4.7.0" package_config: dependency: transitive description: @@ -1072,18 +1099,18 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.5.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" + sha256: "9f9f3d372d4304723e6136663bb291c0b93f5e4c8a4a6314347f481a33bda2b1" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.7" shared_preferences_foundation: dependency: transitive description: @@ -1274,6 +1301,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + uni_platform: + dependency: transitive + description: + name: uni_platform + sha256: e02213a7ee5352212412ca026afd41d269eb00d982faa552f419ffc2debfad84 + url: "https://pub.dev" + source: hosted + version: "0.1.3" uri_to_file: dependency: "direct main" description: diff --git a/ui/flutter/pubspec.yaml b/ui/flutter/pubspec.yaml index 9596a6ca..b2a8b270 100644 --- a/ui/flutter/pubspec.yaml +++ b/ui/flutter/pubspec.yaml @@ -53,6 +53,7 @@ dependencies: app_links: ^6.3.3 uri_to_file: ^1.0.0 window_manager: ^0.4.2 + hotkey_manager: ^0.2.3 share_plus: ^10.1.0 flutter_form_builder: ^9.5.0 form_builder_validators: ^11.0.0