From 3ddbc11378c5510bdc8139e929a03bcba0e0c0d2 Mon Sep 17 00:00:00 2001 From: Levi Date: Fri, 14 Mar 2025 22:05:55 +0800 Subject: [PATCH] temp --- .../extension/views/extension_view.dart | 2 + .../lib/app/views/directory_selector.dart | 2 + ui/flutter/lib/database/database.dart | 1 - ui/flutter/lib/main.dart | 2 + .../entry/browser_extension_host_native.dart | 13 +++++- ui/flutter/lib/util/mac_bookmarks.dart | 30 +++++++++++++ ui/flutter/macos/Podfile.lock | 6 +++ .../macos/Runner/DebugProfile.entitlements | 43 ++++++++++++++++--- ui/flutter/macos/Runner/Release.entitlements | 35 ++++++++++++--- ui/flutter/pubspec.lock | 16 +++++++ ui/flutter/pubspec.yaml | 3 +- 11 files changed, 137 insertions(+), 16 deletions(-) create mode 100644 ui/flutter/lib/util/mac_bookmarks.dart diff --git a/ui/flutter/lib/app/modules/extension/views/extension_view.dart b/ui/flutter/lib/app/modules/extension/views/extension_view.dart index 1c92607a..352fb6d0 100644 --- a/ui/flutter/lib/app/modules/extension/views/extension_view.dart +++ b/ui/flutter/lib/app/modules/extension/views/extension_view.dart @@ -16,6 +16,7 @@ import '../../../../api/model/extension.dart'; import '../../../../api/model/install_extension.dart'; import '../../../../api/model/switch_extension.dart'; import '../../../../api/model/update_extension_settings.dart'; +import '../../../../util/mac_bookmarks.dart'; import '../../../../util/message.dart'; import '../../../../util/util.dart'; import '../../../views/icon_button_loading.dart'; @@ -95,6 +96,7 @@ class ExtensionView extends GetView { var dir = await FilePicker.platform.getDirectoryPath(); if (dir != null) { + MacBookmarks.saveBookmark(dir); try { await installExtension( InstallExtension(devMode: true, url: dir)); diff --git a/ui/flutter/lib/app/views/directory_selector.dart b/ui/flutter/lib/app/views/directory_selector.dart index d10f68c5..ba290908 100644 --- a/ui/flutter/lib/app/views/directory_selector.dart +++ b/ui/flutter/lib/app/views/directory_selector.dart @@ -9,6 +9,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:toggle_switch/toggle_switch.dart'; +import '../../util/mac_bookmarks.dart'; import '../../util/message.dart'; import '../../util/util.dart'; @@ -41,6 +42,7 @@ class _DirectorySelectorState extends State { var dir = await FilePicker.platform.getDirectoryPath(); if (dir != null) { widget.controller.text = dir; + MacBookmarks.saveBookmark(dir); } }); } diff --git a/ui/flutter/lib/database/database.dart b/ui/flutter/lib/database/database.dart index a0867e21..0125ec33 100644 --- a/ui/flutter/lib/database/database.dart +++ b/ui/flutter/lib/database/database.dart @@ -6,7 +6,6 @@ import 'package:hive/hive.dart'; import 'entity.dart'; const String _startConfig = 'startConfig'; -const String _lastRunningConfig = 'lastRunningConfig'; const String _windowState = 'windowState'; const String _bookmark = 'bookmark'; const String _createHistory = 'createHistory'; diff --git a/ui/flutter/lib/main.dart b/ui/flutter/lib/main.dart index 102b3f13..4b67c700 100644 --- a/ui/flutter/lib/main.dart +++ b/ui/flutter/lib/main.dart @@ -14,6 +14,7 @@ import 'i18n/message.dart'; import 'util/browser_extension_host/browser_extension_host.dart'; import 'util/locale_manager.dart'; import 'util/log_util.dart'; +import 'util/mac_bookmarks.dart'; import 'util/package_info.dart'; import 'util/scheme_register/scheme_register.dart'; import 'util/updater.dart'; @@ -89,6 +90,7 @@ Future init(Args args) async { try { await controller.loadDownloaderConfig(); + MacBookmarks.loadBookmark(); } catch (e) { logger.e("load config fail", e); } diff --git a/ui/flutter/lib/util/browser_extension_host/entry/browser_extension_host_native.dart b/ui/flutter/lib/util/browser_extension_host/entry/browser_extension_host_native.dart index 3d5feed9..f4a5da10 100644 --- a/ui/flutter/lib/util/browser_extension_host/entry/browser_extension_host_native.dart +++ b/ui/flutter/lib/util/browser_extension_host/entry/browser_extension_host_native.dart @@ -216,8 +216,17 @@ String? _getManifestPath(Browser browser) { return Util.homePathJoin(manifestName); } - final home = - Platform.environment['HOME'] ?? Platform.environment['USERPROFILE']; + String? home; + if (Platform.isMacOS) { + try { + final user = Process.runSync("id", ["-un"]).stdout.trim(); + home = '/Users/$user'; + } catch (e) { + // ignore + } + } + home ??= Platform.environment['HOME'] ?? Platform.environment['USERPROFILE']; + if (home == null) return null; if (Platform.isMacOS) { diff --git a/ui/flutter/lib/util/mac_bookmarks.dart b/ui/flutter/lib/util/mac_bookmarks.dart new file mode 100644 index 00000000..9fc1351a --- /dev/null +++ b/ui/flutter/lib/util/mac_bookmarks.dart @@ -0,0 +1,30 @@ +import 'dart:io'; + +import 'package:macos_secure_bookmarks/macos_secure_bookmarks.dart'; + +import '../database/database.dart'; +import 'util.dart'; + +class MacBookmarks { + static Future saveBookmark(String dir) async { + if (!Util.isMacos()) { + return; + } + final secureBookmarks = SecureBookmarks(); + final bookmark = await secureBookmarks.bookmark(Directory(dir)); + Database.instance.saveBookmark(MapEntry(dir, bookmark)); + } + + static Future loadBookmark() async { + if (!Util.isMacos()) { + return; + } + final secureBookmarks = SecureBookmarks(); + final bookmark = Database.instance.getBookmark() ?? {}; + bookmark.forEach((_, v) async { + final resolvedFile = + await secureBookmarks.resolveBookmark(v, isDirectory: true); + await secureBookmarks.startAccessingSecurityScopedResource(resolvedFile); + }); + } +} diff --git a/ui/flutter/macos/Podfile.lock b/ui/flutter/macos/Podfile.lock index 84da3e2e..839cca50 100644 --- a/ui/flutter/macos/Podfile.lock +++ b/ui/flutter/macos/Podfile.lock @@ -6,6 +6,8 @@ PODS: - device_info_plus (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) + - macos_secure_bookmarks (0.0.3): + - FlutterMacOS - package_info_plus (0.0.1): - FlutterMacOS - path_provider_foundation (0.0.1): @@ -30,6 +32,7 @@ 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`) + - macos_secure_bookmarks (from `Flutter/ephemeral/.symlinks/plugins/macos_secure_bookmarks/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`) @@ -48,6 +51,8 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos FlutterMacOS: :path: Flutter/ephemeral + macos_secure_bookmarks: + :path: Flutter/ephemeral/.symlinks/plugins/macos_secure_bookmarks/macos package_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: @@ -70,6 +75,7 @@ SPEC CHECKSUMS: desktop_drop: 69eeff437544aa619c8db7f4481b3a65f7696898 device_info_plus: 74e614483d05c89290d30a4c8feae15d555f7427 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + macos_secure_bookmarks: cff041c4b377fa00941bb901aaec4d27fac5edf2 package_info_plus: f5790acc797bf17c3e959e9d6cf162cc68ff7523 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38 diff --git a/ui/flutter/macos/Runner/DebugProfile.entitlements b/ui/flutter/macos/Runner/DebugProfile.entitlements index 974d290f..6237a90c 100644 --- a/ui/flutter/macos/Runner/DebugProfile.entitlements +++ b/ui/flutter/macos/Runner/DebugProfile.entitlements @@ -1,10 +1,39 @@ - - com.apple.security.cs.allow-jit - - com.apple.security.files.bookmarks.app-scope - - - + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.files.bookmarks.app-scope + + com.apple.security.files.downloads.read-write + + com.apple.security.files.user-selected.read-write + + com.apple.security.network.client + + com.apple.security.network.server + + com.apple.security.temporary-exception.files.home-relative-path.read-write + + /Library/Application Support/Mozilla/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Beta/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Dev/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/ + /Library/Application Support/Chromium/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Beta/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Dev/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Canary/NativeMessagingHosts/ + /Library/Application Support/Vivaldi/NativeMessagingHosts/ + /code/go/gopeed/ui/flutter/build/macos/Build/Products/Debug/Gopeed.app/Contents/MacOS/ + + com.apple.security.temporary-exception.files.home-relative-path.execute + + /code/go/gopeed/ui/flutter/build/macos/Build/Products/Debug/Gopeed.app/Contents/MacOS/ + + + \ No newline at end of file diff --git a/ui/flutter/macos/Runner/Release.entitlements b/ui/flutter/macos/Runner/Release.entitlements index 0791a622..66b958e7 100644 --- a/ui/flutter/macos/Runner/Release.entitlements +++ b/ui/flutter/macos/Runner/Release.entitlements @@ -1,8 +1,33 @@ - - com.apple.security.files.bookmarks.app-scope - - - + + com.apple.security.app-sandbox + + com.apple.security.files.bookmarks.app-scope + + com.apple.security.files.downloads.read-write + + com.apple.security.files.user-selected.read-write + + com.apple.security.network.client + + com.apple.security.network.server + + com.apple.security.temporary-exception.files.home-relative-path.read-write + + /Library/Application Support/Mozilla/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Beta/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Dev/NativeMessagingHosts/ + /Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/ + /Library/Application Support/Chromium/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Beta/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Dev/NativeMessagingHosts/ + /Library/Application Support/Microsoft Edge Canary/NativeMessagingHosts/ + /Library/Application Support/Vivaldi/NativeMessagingHosts/ + /code/go/gopeed/ui/flutter/build/macos/Build/Products/Debug/Gopeed.app/Contents/MacOS/ + + + \ No newline at end of file diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock index 0d0bdf7c..7308cf4e 100644 --- a/ui/flutter/pubspec.lock +++ b/ui/flutter/pubspec.lock @@ -667,6 +667,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + logging_appenders: + dependency: transitive + description: + name: logging_appenders + sha256: e329e7472f99416d0edaaf6451fe6c02dec91d34535bd252e284a0b94ab23d79 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + macos_secure_bookmarks: + dependency: "direct main" + description: + name: macos_secure_bookmarks + sha256: c3163875f8fd530a1654a7cf8aa426e6e208d28bf05724a1d4960e4b7d2ca1c6 + url: "https://pub.dev" + source: hosted + version: "0.2.1" macros: dependency: transitive description: diff --git a/ui/flutter/pubspec.yaml b/ui/flutter/pubspec.yaml index 18b40f01..a1dcd6b4 100644 --- a/ui/flutter/pubspec.yaml +++ b/ui/flutter/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.6.10+1 +version: 1.6.9+1 environment: sdk: ">=3.0.0 <4.0.0" @@ -76,6 +76,7 @@ dependencies: git: url: https://github.com/hui-z/flutter_install_plugin.git ref: cf08af829f4a4145634f8a047108f505fdbe5eaa + macos_secure_bookmarks: ^0.2.1 dependency_overrides: permission_handler_windows: git: