From 97d156f606febd568aea5f913f09dc3e376f76fb Mon Sep 17 00:00:00 2001 From: Julian Freeman Date: Thu, 16 Apr 2026 15:25:57 -0400 Subject: [PATCH] support browser icons --- src-tauri/src/config_store.rs | 11 +++ src-tauri/src/models.rs | 5 ++ src-tauri/src/scanner.rs | 1 + src/App.vue | 34 +++++++- src/assets/brave.png | Bin 0 -> 30538 bytes src/assets/google-chrome.png | Bin 0 -> 38562 bytes src/assets/microsoft-edge.png | Bin 0 -> 90449 bytes src/features/browser-assistant/icons.ts | 13 +++ src/features/browser-assistant/types.ts | 3 + .../browser-assistant/useBrowserAssistant.ts | 17 ++-- src/styles.css | 82 ++++++++++++++---- 11 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 src/assets/brave.png create mode 100644 src/assets/google-chrome.png create mode 100644 src/assets/microsoft-edge.png create mode 100644 src/features/browser-assistant/icons.ts diff --git a/src-tauri/src/config_store.rs b/src-tauri/src/config_store.rs index 29432f9..b963dbe 100644 --- a/src-tauri/src/config_store.rs +++ b/src-tauri/src/config_store.rs @@ -35,6 +35,7 @@ pub fn resolve_browser_configs(app: &AppHandle) -> Result Result { let name = input.name.trim(); + let icon_key = input.icon_key.and_then(|value| { + let trimmed = value.trim().to_string(); + if trimmed.is_empty() { + None + } else { + Some(trimmed) + } + }); let executable_path = input.executable_path.trim(); let user_data_path = input.user_data_path.trim(); @@ -67,6 +76,7 @@ pub fn create_custom_browser_config( stored.custom_configs.push(CustomBrowserConfigRecord { id: generate_custom_config_id(), name: name.to_string(), + icon_key, executable_path: executable_path.to_string(), user_data_path: user_data_path.to_string(), }); @@ -117,6 +127,7 @@ fn default_browser_configs() -> Result, String> { id: definition.id.to_string(), source: BrowserConfigSource::Default, browser_family_id: Some(definition.id.to_string()), + icon_key: Some(definition.id.to_string()), name: definition.name.to_string(), executable_path: resolve_browser_executable(definition.id) .map(|path| path.display().to_string()) diff --git a/src-tauri/src/models.rs b/src-tauri/src/models.rs index 90cd594..27dc5c4 100644 --- a/src-tauri/src/models.rs +++ b/src-tauri/src/models.rs @@ -14,6 +14,7 @@ pub struct BrowserView { pub browser_id: String, pub browser_family_id: Option, pub browser_name: String, + pub icon_key: Option, pub data_root: String, pub profiles: Vec, pub extensions: Vec, @@ -70,6 +71,7 @@ pub struct BrowserConfigEntry { pub id: String, pub source: BrowserConfigSource, pub browser_family_id: Option, + pub icon_key: Option, pub name: String, pub executable_path: String, pub user_data_path: String, @@ -87,6 +89,7 @@ pub enum BrowserConfigSource { #[serde(rename_all = "camelCase")] pub struct CreateCustomBrowserConfigInput { pub name: String, + pub icon_key: Option, pub executable_path: String, pub user_data_path: String, } @@ -102,6 +105,8 @@ pub struct StoredBrowserConfigs { pub struct CustomBrowserConfigRecord { pub id: String, pub name: String, + #[serde(default)] + pub icon_key: Option, pub executable_path: String, pub user_data_path: String, } diff --git a/src-tauri/src/scanner.rs b/src-tauri/src/scanner.rs index e5c90cc..78982e7 100644 --- a/src-tauri/src/scanner.rs +++ b/src-tauri/src/scanner.rs @@ -91,6 +91,7 @@ fn scan_browser(config: BrowserConfigEntry) -> Option { browser_id: config.id, browser_family_id: config.browser_family_id, browser_name: config.name, + icon_key: config.icon_key, data_root: root.display().to_string(), stats: BrowserStats { profile_count: profiles.len(), diff --git a/src/App.vue b/src/App.vue index 08ba4e5..e1eb1b3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,6 @@