asdf98 commited on
Commit
4b9ef11
·
verified ·
1 Parent(s): f737a54

fix: register browser_hide_all command

Browse files
Files changed (1) hide show
  1. src-tauri/src/lib.rs +88 -88
src-tauri/src/lib.rs CHANGED
@@ -1,88 +1,88 @@
1
- mod adblock;
2
- mod browser;
3
- mod credentials;
4
- mod library;
5
- mod board;
6
- mod color_tools;
7
- mod persistence;
8
- mod sessions;
9
- mod study;
10
- mod downloads;
11
- mod settings;
12
- mod state;
13
- mod history;
14
- mod projects;
15
- mod refs_format;
16
-
17
- use crate::state::AppState;
18
- use tauri::{Emitter, Manager};
19
- use tauri_plugin_sql::{Migration, MigrationKind};
20
-
21
- #[cfg_attr(mobile, tauri::mobile_entry_point)]
22
- pub fn run() {
23
- tauri::Builder::default()
24
- .plugin(tauri_plugin_opener::init())
25
- .plugin(tauri_plugin_store::Builder::default().build())
26
- .plugin(tauri_plugin_fs::init())
27
- .plugin(tauri_plugin_clipboard_manager::init())
28
- .plugin(tauri_plugin_sql::Builder::default().add_migrations("sqlite:muse_alpha_v2.db", migrations()).build())
29
- .plugin(tauri_plugin_stronghold::Builder::new(|password| { let salt = b"muse-vault-kdf-salt-2026-v1-prod"; let mut key = [0u8; 32]; argon2::Argon2::default().hash_password_into(password.as_bytes(), salt, &mut key).expect("argon2 KDF failed"); key.to_vec() }).build())
30
- .register_uri_scheme_protocol("muse-action", |ctx, request| {
31
- let uri = request.uri().to_string();
32
- let app = ctx.app_handle().clone();
33
- let action = uri.split("://").nth(1).unwrap_or("").split('?').next().unwrap_or("").to_string();
34
- let query = uri.split('?').nth(1).unwrap_or("");
35
- let params: std::collections::HashMap<String, String> = query.split('&').filter_map(|pair| { let (k, v) = pair.split_once('=')?; Some((percent_decode(k), percent_decode(v))) }).collect();
36
- match action.as_str() {
37
- "library" => { let url = params.get("url").cloned().unwrap_or_default(); if !url.is_empty() { let source = params.get("source").cloned(); let title = params.get("title").cloned(); tauri::async_runtime::spawn(async move { let _ = crate::library::library_add_item(app, url, source, title).await; }); } }
38
- "board" => { let url = params.get("url").cloned().unwrap_or_default(); if !url.is_empty() { let source = params.get("source").cloned(); let title = params.get("title").cloned(); tauri::async_runtime::spawn(async move { if let Ok(item) = crate::library::library_add_item(app.clone(), url, source, title).await { let _ = crate::board::board_add_image(app, Some(item.id), item.data_url, 120.0, 120.0, 300.0, 200.0); } }); } }
39
- "vault" => { let va = params.get("action").cloned().unwrap_or_default(); match va.as_str() { "save-prompt" => { let _ = app.emit("vault://save-prompt", serde_json::json!({"origin": params.get("origin").cloned().unwrap_or_default(), "username": params.get("username").cloned().unwrap_or_default(), "password": params.get("password").cloned().unwrap_or_default()})); } "has-login-form" => { let _ = app.emit("vault://login-detected", serde_json::json!({"origin": params.get("origin").cloned().unwrap_or_default(), "fields": params.get("fields").cloned().unwrap_or_default()})); } _ => {} } }
40
- _ => {}
41
- }
42
- tauri::http::Response::builder().status(200).header("Access-Control-Allow-Origin", "*").body(Vec::new()).unwrap()
43
- })
44
- .manage(state::AppState::default())
45
- .manage(adblock::engine::AdBlockState::new())
46
- .manage(library::LibraryState::default())
47
- .manage(board::BoardState::default())
48
- .manage(downloads::DownloadState::default())
49
- .manage(study::StudyState::default())
50
- .invoke_handler(tauri::generate_handler![
51
- settings::phase0_status, settings::board_load_state, settings::board_save_state, settings::board_export_file, settings::board_import_file, settings::screen_capture_full, settings::screen_capture_region, settings::screen_capture_window_region,
52
- history::history_list, history::history_clear,
53
- refs_format::refs_export, refs_format::refs_import,
54
- projects::projects_list, projects::projects_get_active_id, projects::project_create, projects::project_save, projects::project_load, projects::project_delete, projects::project_rename,
55
- browser::capture::browser_capture_viewport, browser::capture::browser_capture_clip, browser::capture::browser_capture_full_page,
56
- browser::autofill::tab_autofill,
57
- browser::commands::browser_init, browser::commands::browser_set_visible, browser::commands::tab_create, browser::commands::tab_activate, browser::commands::tab_close, browser::commands::tab_restore, browser::commands::tab_navigate, browser::commands::tab_reload, browser::commands::tab_back, browser::commands::tab_forward, browser::commands::tab_zoom, browser::commands::tab_resize, browser::commands::tab_get_all, browser::commands::tab_pin, browser::commands::tab_find, browser::commands::tab_find_clear,
58
- browser::context_menu::browser_context_menu,
59
- adblock::commands::shield_get_report, adblock::commands::shield_check_url, adblock::commands::shield_cosmetic_css, adblock::commands::shield_toggle_domain, adblock::commands::shield_is_allowed, adblock::commands::shield_update_lists, adblock::commands::shield_add_user_rule, adblock::commands::shield_list_subscriptions,
60
- library::library_add_item, library::library_load, library::library_items, library::library_search, library::library_remove_item, library::library_add_tag,
61
- board::board_list, board::board_current, board::board_create, board::board_open, board::board_save_as, board::board_load, board::board_items, board::board_add_image, board::board_add_note, board::board_add_palette, board::board_extract_palette_from_item, board::board_add_palette_from_item, board::board_update_item, board::board_delete_item,
62
- sessions::sessions_save, sessions::sessions_load, sessions::sessions_list, sessions::sessions_auto_save, sessions::sessions_delete, sessions::sessions_rename,
63
- downloads::downloads_list, downloads::downloads_clear_completed, downloads::download_to_library, downloads::web_clip_page,
64
- credentials::credentials_list, credentials::credentials_generate_password,
65
- study::study_start, study::study_complete, study::study_list,
66
- color_tools::color_export, color_tools::color_search_library,
67
- ])
68
- .setup(|app| {
69
- #[cfg(desktop)]
70
- app.handle().plugin(tauri_plugin_global_shortcut::Builder::new().build())?;
71
- if let Ok(zoom_mem) = crate::persistence::load_json::<std::collections::HashMap<String, f64>>(app.handle(), "zoom_memory.json") {
72
- if !zoom_mem.is_empty() { let app_state = app.state::<AppState>(); let mut tabs = app_state.tabs.lock().expect("tabs lock"); tabs.zoom_memory = zoom_mem; }
73
- }
74
- adblock::updater::spawn_updater(app.handle().clone());
75
- Ok(())
76
- })
77
- .run(tauri::generate_context!())
78
- .expect("error while running Refstudio");
79
- }
80
-
81
- fn migrations() -> Vec<Migration> {
82
- vec![
83
- Migration { version: 1, description: "phase0_init", sql: include_str!("../migrations/001_phase0_init.sql"), kind: MigrationKind::Up },
84
- Migration { version: 2, description: "phase3_tables", sql: include_str!("../migrations/002_phase3_tables.sql"), kind: MigrationKind::Up },
85
- ]
86
- }
87
-
88
- fn percent_decode(s: &str) -> String { let bytes = s.as_bytes(); let mut out = Vec::with_capacity(bytes.len()); let mut i = 0; while i < bytes.len() { if bytes[i] == b'%' && i + 2 < bytes.len() { if let Ok(hex) = std::str::from_utf8(&bytes[i+1..i+3]) { if let Ok(v) = u8::from_str_radix(hex, 16) { out.push(v); i += 3; continue; } } } out.push(if bytes[i] == b'+' { b' ' } else { bytes[i] }); i += 1; } String::from_utf8_lossy(&out).to_string() }
 
1
+ mod adblock;
2
+ mod browser;
3
+ mod credentials;
4
+ mod library;
5
+ mod board;
6
+ mod color_tools;
7
+ mod persistence;
8
+ mod sessions;
9
+ mod study;
10
+ mod downloads;
11
+ mod settings;
12
+ mod state;
13
+ mod history;
14
+ mod projects;
15
+ mod refs_format;
16
+
17
+ use crate::state::AppState;
18
+ use tauri::{Emitter, Manager};
19
+ use tauri_plugin_sql::{Migration, MigrationKind};
20
+
21
+ #[cfg_attr(mobile, tauri::mobile_entry_point)]
22
+ pub fn run() {
23
+ tauri::Builder::default()
24
+ .plugin(tauri_plugin_opener::init())
25
+ .plugin(tauri_plugin_store::Builder::default().build())
26
+ .plugin(tauri_plugin_fs::init())
27
+ .plugin(tauri_plugin_clipboard_manager::init())
28
+ .plugin(tauri_plugin_sql::Builder::default().add_migrations("sqlite:muse_alpha_v2.db", migrations()).build())
29
+ .plugin(tauri_plugin_stronghold::Builder::new(|password| { let salt = b"muse-vault-kdf-salt-2026-v1-prod"; let mut key = [0u8; 32]; argon2::Argon2::default().hash_password_into(password.as_bytes(), salt, &mut key).expect("argon2 KDF failed"); key.to_vec() }).build())
30
+ .register_uri_scheme_protocol("muse-action", |ctx, request| {
31
+ let uri = request.uri().to_string();
32
+ let app = ctx.app_handle().clone();
33
+ let action = uri.split("://").nth(1).unwrap_or("").split('?').next().unwrap_or("").to_string();
34
+ let query = uri.split('?').nth(1).unwrap_or("");
35
+ let params: std::collections::HashMap<String, String> = query.split('&').filter_map(|pair| { let (k, v) = pair.split_once('=')?; Some((percent_decode(k), percent_decode(v))) }).collect();
36
+ match action.as_str() {
37
+ "library" => { let url = params.get("url").cloned().unwrap_or_default(); if !url.is_empty() { let source = params.get("source").cloned(); let title = params.get("title").cloned(); tauri::async_runtime::spawn(async move { let _ = crate::library::library_add_item(app, url, source, title).await; }); } }
38
+ "board" => { let url = params.get("url").cloned().unwrap_or_default(); if !url.is_empty() { let source = params.get("source").cloned(); let title = params.get("title").cloned(); tauri::async_runtime::spawn(async move { if let Ok(item) = crate::library::library_add_item(app.clone(), url, source, title).await { let _ = crate::board::board_add_image(app, Some(item.id), item.data_url, 120.0, 120.0, 300.0, 200.0); } }); } }
39
+ "vault" => { let va = params.get("action").cloned().unwrap_or_default(); match va.as_str() { "save-prompt" => { let _ = app.emit("vault://save-prompt", serde_json::json!({"origin": params.get("origin").cloned().unwrap_or_default(), "username": params.get("username").cloned().unwrap_or_default(), "password": params.get("password").cloned().unwrap_or_default()})); } "has-login-form" => { let _ = app.emit("vault://login-detected", serde_json::json!({"origin": params.get("origin").cloned().unwrap_or_default(), "fields": params.get("fields").cloned().unwrap_or_default()})); } _ => {} } }
40
+ _ => {}
41
+ }
42
+ tauri::http::Response::builder().status(200).header("Access-Control-Allow-Origin", "*").body(Vec::new()).unwrap()
43
+ })
44
+ .manage(state::AppState::default())
45
+ .manage(adblock::engine::AdBlockState::new())
46
+ .manage(library::LibraryState::default())
47
+ .manage(board::BoardState::default())
48
+ .manage(downloads::DownloadState::default())
49
+ .manage(study::StudyState::default())
50
+ .invoke_handler(tauri::generate_handler![
51
+ settings::phase0_status, settings::board_load_state, settings::board_save_state, settings::board_export_file, settings::board_import_file, settings::screen_capture_full, settings::screen_capture_region, settings::screen_capture_window_region,
52
+ history::history_list, history::history_clear,
53
+ refs_format::refs_export, refs_format::refs_import,
54
+ projects::projects_list, projects::projects_get_active_id, projects::project_create, projects::project_save, projects::project_load, projects::project_delete, projects::project_rename,
55
+ browser::capture::browser_capture_viewport, browser::capture::browser_capture_clip, browser::capture::browser_capture_full_page,
56
+ browser::autofill::tab_autofill,
57
+ browser::commands::browser_init, browser::commands::browser_set_visible, browser::commands::browser_hide_all, browser::commands::tab_create, browser::commands::tab_activate, browser::commands::tab_close, browser::commands::tab_restore, browser::commands::tab_navigate, browser::commands::tab_reload, browser::commands::tab_back, browser::commands::tab_forward, browser::commands::tab_zoom, browser::commands::tab_resize, browser::commands::tab_get_all, browser::commands::tab_pin, browser::commands::tab_find, browser::commands::tab_find_clear,
58
+ browser::context_menu::browser_context_menu,
59
+ adblock::commands::shield_get_report, adblock::commands::shield_check_url, adblock::commands::shield_cosmetic_css, adblock::commands::shield_toggle_domain, adblock::commands::shield_is_allowed, adblock::commands::shield_update_lists, adblock::commands::shield_add_user_rule, adblock::commands::shield_list_subscriptions,
60
+ library::library_add_item, library::library_load, library::library_items, library::library_search, library::library_remove_item, library::library_add_tag,
61
+ board::board_list, board::board_current, board::board_create, board::board_open, board::board_save_as, board::board_load, board::board_items, board::board_add_image, board::board_add_note, board::board_add_palette, board::board_extract_palette_from_item, board::board_add_palette_from_item, board::board_update_item, board::board_delete_item,
62
+ sessions::sessions_save, sessions::sessions_load, sessions::sessions_list, sessions::sessions_auto_save, sessions::sessions_delete, sessions::sessions_rename,
63
+ downloads::downloads_list, downloads::downloads_clear_completed, downloads::download_to_library, downloads::web_clip_page,
64
+ credentials::credentials_list, credentials::credentials_generate_password,
65
+ study::study_start, study::study_complete, study::study_list,
66
+ color_tools::color_export, color_tools::color_search_library,
67
+ ])
68
+ .setup(|app| {
69
+ #[cfg(desktop)]
70
+ app.handle().plugin(tauri_plugin_global_shortcut::Builder::new().build())?;
71
+ if let Ok(zoom_mem) = crate::persistence::load_json::<std::collections::HashMap<String, f64>>(app.handle(), "zoom_memory.json") {
72
+ if !zoom_mem.is_empty() { let app_state = app.state::<AppState>(); let mut tabs = app_state.tabs.lock().expect("tabs lock"); tabs.zoom_memory = zoom_mem; }
73
+ }
74
+ adblock::updater::spawn_updater(app.handle().clone());
75
+ Ok(())
76
+ })
77
+ .run(tauri::generate_context!())
78
+ .expect("error while running Refstudio");
79
+ }
80
+
81
+ fn migrations() -> Vec<Migration> {
82
+ vec![
83
+ Migration { version: 1, description: "phase0_init", sql: include_str!("../migrations/001_phase0_init.sql"), kind: MigrationKind::Up },
84
+ Migration { version: 2, description: "phase3_tables", sql: include_str!("../migrations/002_phase3_tables.sql"), kind: MigrationKind::Up },
85
+ ]
86
+ }
87
+
88
+ fn percent_decode(s: &str) -> String { let bytes = s.as_bytes(); let mut out = Vec::with_capacity(bytes.len()); let mut i = 0; while i < bytes.len() { if bytes[i] == b'%' && i + 2 < bytes.len() { if let Ok(hex) = std::str::from_utf8(&bytes[i+1..i+3]) { if let Ok(v) = u8::from_str_radix(hex, 16) { out.push(v); i += 3; continue; } } } out.push(if bytes[i] == b'+' { b' ' } else { bytes[i] }); i += 1; } String::from_utf8_lossy(&out).to_string() }