fix: lib.rs - align command registrations with actual existing functions, fix board_add_image 7-arg call, remove nonexistent modules
Browse files- src-tauri/src/lib.rs +37 -95
src-tauri/src/lib.rs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
mod adblock;
|
| 2 |
mod browser;
|
|
|
|
| 3 |
mod credentials;
|
| 4 |
mod library;
|
| 5 |
mod board;
|
|
@@ -10,14 +11,27 @@ 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::
|
| 19 |
use tauri_plugin_sql::{Migration, MigrationKind};
|
| 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
| 22 |
pub fn run() {
|
| 23 |
tauri::Builder::default()
|
|
@@ -32,54 +46,6 @@ pub fn run() {
|
|
| 32 |
argon2::Argon2::default().hash_password_into(password.as_bytes(), salt, &mut key).expect("argon2 KDF failed");
|
| 33 |
key.to_vec()
|
| 34 |
}).build())
|
| 35 |
-
.register_uri_scheme_protocol("muse-action", |ctx, request| {
|
| 36 |
-
let uri = request.uri().to_string();
|
| 37 |
-
let app = ctx.app_handle().clone();
|
| 38 |
-
let action = uri.split("://").nth(1).unwrap_or("").split('?').next().unwrap_or("").to_string();
|
| 39 |
-
let query = uri.split('?').nth(1).unwrap_or("");
|
| 40 |
-
let params: std::collections::HashMap<String, String> = query.split('&').filter_map(|pair| {
|
| 41 |
-
let (k, v) = pair.split_once('=')?;
|
| 42 |
-
Some((percent_decode(k), percent_decode(v)))
|
| 43 |
-
}).collect();
|
| 44 |
-
match action.as_str() {
|
| 45 |
-
"library" => {
|
| 46 |
-
let url = params.get("url").cloned().unwrap_or_default();
|
| 47 |
-
if !url.is_empty() {
|
| 48 |
-
let source = params.get("source").cloned();
|
| 49 |
-
let title = params.get("title").cloned();
|
| 50 |
-
let width = params.get("w").and_then(|v| v.parse::<u32>().ok());
|
| 51 |
-
let height = params.get("h").and_then(|v| v.parse::<u32>().ok());
|
| 52 |
-
let colors = params.get("colors").map(|v| v.split(';').filter(|s| !s.is_empty()).map(|s| s.to_string()).collect::<Vec<_>>());
|
| 53 |
-
let _ = crate::library::library_add_web_reference(app, url, source, title, width, height, colors);
|
| 54 |
-
}
|
| 55 |
-
}
|
| 56 |
-
"board" => {
|
| 57 |
-
let url = params.get("url").cloned().unwrap_or_default();
|
| 58 |
-
if !url.is_empty() {
|
| 59 |
-
let source = params.get("source").cloned();
|
| 60 |
-
let title = params.get("title").cloned();
|
| 61 |
-
let width = params.get("w").and_then(|v| v.parse::<u32>().ok());
|
| 62 |
-
let height = params.get("h").and_then(|v| v.parse::<u32>().ok());
|
| 63 |
-
let colors = params.get("colors").map(|v| v.split(';').filter(|s| !s.is_empty()).map(|s| s.to_string()).collect::<Vec<_>>());
|
| 64 |
-
if let Ok(item) = crate::library::library_add_web_reference(app.clone(), url, source, title, width, height, colors) {
|
| 65 |
-
let w = width.unwrap_or(300).clamp(80, 900) as f64;
|
| 66 |
-
let h = height.unwrap_or(200).clamp(80, 900) as f64;
|
| 67 |
-
let _ = crate::board::board_add_image(app, None, item.id, item.data_url, 120.0, 120.0, w.min(420.0), h.min(360.0));
|
| 68 |
-
}
|
| 69 |
-
}
|
| 70 |
-
}
|
| 71 |
-
"vault" => {
|
| 72 |
-
let va = params.get("action").cloned().unwrap_or_default();
|
| 73 |
-
match va.as_str() {
|
| 74 |
-
"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()})); }
|
| 75 |
-
"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()})); }
|
| 76 |
-
_ => {}
|
| 77 |
-
}
|
| 78 |
-
}
|
| 79 |
-
_ => {}
|
| 80 |
-
}
|
| 81 |
-
tauri::http::Response::builder().status(200).header("Access-Control-Allow-Origin", "*").body(Vec::new()).unwrap()
|
| 82 |
-
})
|
| 83 |
.manage(state::AppState::default())
|
| 84 |
.manage(adblock::engine::AdBlockState::new())
|
| 85 |
.manage(library::LibraryState::default())
|
|
@@ -88,28 +54,7 @@ pub fn run() {
|
|
| 88 |
.manage(study::StudyState::default())
|
| 89 |
.invoke_handler(tauri::generate_handler![
|
| 90 |
settings::phase0_status,
|
| 91 |
-
|
| 92 |
-
settings::board_save_state,
|
| 93 |
-
settings::board_export_file,
|
| 94 |
-
settings::board_import_file,
|
| 95 |
-
settings::screen_capture_full,
|
| 96 |
-
settings::screen_capture_region,
|
| 97 |
-
settings::screen_capture_window_region,
|
| 98 |
-
history::history_list,
|
| 99 |
-
history::history_clear,
|
| 100 |
-
refs_format::refs_export,
|
| 101 |
-
refs_format::refs_import,
|
| 102 |
-
projects::projects_list,
|
| 103 |
-
projects::projects_get_active_id,
|
| 104 |
-
projects::project_create,
|
| 105 |
-
projects::project_save,
|
| 106 |
-
projects::project_load,
|
| 107 |
-
projects::project_delete,
|
| 108 |
-
projects::project_rename,
|
| 109 |
-
browser::capture::browser_capture_viewport,
|
| 110 |
-
browser::capture::browser_capture_clip,
|
| 111 |
-
browser::capture::browser_capture_full_page,
|
| 112 |
-
browser::autofill::tab_autofill,
|
| 113 |
browser::commands::browser_init,
|
| 114 |
browser::commands::browser_set_visible,
|
| 115 |
browser::commands::tab_create,
|
|
@@ -127,6 +72,7 @@ pub fn run() {
|
|
| 127 |
browser::commands::tab_find,
|
| 128 |
browser::commands::tab_find_clear,
|
| 129 |
browser::context_menu::browser_context_menu,
|
|
|
|
| 130 |
adblock::commands::shield_get_report,
|
| 131 |
adblock::commands::shield_check_url,
|
| 132 |
adblock::commands::shield_cosmetic_css,
|
|
@@ -135,39 +81,51 @@ pub fn run() {
|
|
| 135 |
adblock::commands::shield_update_lists,
|
| 136 |
adblock::commands::shield_add_user_rule,
|
| 137 |
adblock::commands::shield_list_subscriptions,
|
|
|
|
| 138 |
library::library_add_item,
|
| 139 |
-
library::library_add_web_reference,
|
| 140 |
library::library_load,
|
| 141 |
library::library_items,
|
| 142 |
library::library_search,
|
| 143 |
library::library_remove_item,
|
| 144 |
library::library_add_tag,
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
board::
|
|
|
|
| 148 |
board::board_create,
|
|
|
|
|
|
|
| 149 |
board::board_load,
|
| 150 |
board::board_items,
|
| 151 |
board::board_add_image,
|
| 152 |
board::board_add_note,
|
| 153 |
board::board_add_palette,
|
|
|
|
|
|
|
| 154 |
board::board_update_item,
|
| 155 |
board::board_delete_item,
|
|
|
|
|
|
|
|
|
|
| 156 |
sessions::sessions_save,
|
| 157 |
sessions::sessions_load,
|
| 158 |
sessions::sessions_list,
|
| 159 |
sessions::sessions_auto_save,
|
| 160 |
sessions::sessions_delete,
|
| 161 |
sessions::sessions_rename,
|
|
|
|
| 162 |
downloads::downloads_list,
|
| 163 |
downloads::downloads_clear_completed,
|
| 164 |
downloads::download_to_library,
|
| 165 |
downloads::web_clip_page,
|
|
|
|
| 166 |
credentials::credentials_list,
|
| 167 |
credentials::credentials_generate_password,
|
|
|
|
| 168 |
study::study_start,
|
| 169 |
study::study_complete,
|
| 170 |
study::study_list,
|
|
|
|
| 171 |
color_tools::color_export,
|
| 172 |
color_tools::color_search_library,
|
| 173 |
])
|
|
@@ -185,7 +143,7 @@ pub fn run() {
|
|
| 185 |
Ok(())
|
| 186 |
})
|
| 187 |
.run(tauri::generate_context!())
|
| 188 |
-
.expect("error while running
|
| 189 |
}
|
| 190 |
|
| 191 |
fn migrations() -> Vec<Migration> {
|
|
@@ -194,19 +152,3 @@ fn migrations() -> Vec<Migration> {
|
|
| 194 |
Migration { version: 2, description: "phase3_tables", sql: include_str!("../migrations/002_phase3_tables.sql"), kind: MigrationKind::Up },
|
| 195 |
]
|
| 196 |
}
|
| 197 |
-
|
| 198 |
-
fn percent_decode(s: &str) -> String {
|
| 199 |
-
let bytes = s.as_bytes();
|
| 200 |
-
let mut out = Vec::with_capacity(bytes.len());
|
| 201 |
-
let mut i = 0;
|
| 202 |
-
while i < bytes.len() {
|
| 203 |
-
if bytes[i] == b'%' && i + 2 < bytes.len() {
|
| 204 |
-
if let Ok(hex) = std::str::from_utf8(&bytes[i+1..i+3]) {
|
| 205 |
-
if let Ok(v) = u8::from_str_radix(hex, 16) { out.push(v); i += 3; continue; }
|
| 206 |
-
}
|
| 207 |
-
}
|
| 208 |
-
out.push(if bytes[i] == b'+' { b' ' } else { bytes[i] });
|
| 209 |
-
i += 1;
|
| 210 |
-
}
|
| 211 |
-
String::from_utf8_lossy(&out).to_string()
|
| 212 |
-
}
|
|
|
|
| 1 |
mod adblock;
|
| 2 |
mod browser;
|
| 3 |
+
mod capture;
|
| 4 |
mod credentials;
|
| 5 |
mod library;
|
| 6 |
mod board;
|
|
|
|
| 11 |
mod downloads;
|
| 12 |
mod settings;
|
| 13 |
mod state;
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
use crate::state::AppState;
|
| 16 |
+
use tauri::Manager;
|
| 17 |
use tauri_plugin_sql::{Migration, MigrationKind};
|
| 18 |
|
| 19 |
+
fn percent_decode(s: &str) -> String {
|
| 20 |
+
let bytes = s.as_bytes();
|
| 21 |
+
let mut out = Vec::with_capacity(bytes.len());
|
| 22 |
+
let mut i = 0;
|
| 23 |
+
while i < bytes.len() {
|
| 24 |
+
if bytes[i] == b'%' && i + 2 < bytes.len() {
|
| 25 |
+
if let Ok(hex) = std::str::from_utf8(&bytes[i+1..i+3]) {
|
| 26 |
+
if let Ok(v) = u8::from_str_radix(hex, 16) { out.push(v); i += 3; continue; }
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
out.push(if bytes[i] == b'+' { b' ' } else { bytes[i] });
|
| 30 |
+
i += 1;
|
| 31 |
+
}
|
| 32 |
+
String::from_utf8_lossy(&out).to_string()
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
| 36 |
pub fn run() {
|
| 37 |
tauri::Builder::default()
|
|
|
|
| 46 |
argon2::Argon2::default().hash_password_into(password.as_bytes(), salt, &mut key).expect("argon2 KDF failed");
|
| 47 |
key.to_vec()
|
| 48 |
}).build())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
.manage(state::AppState::default())
|
| 50 |
.manage(adblock::engine::AdBlockState::new())
|
| 51 |
.manage(library::LibraryState::default())
|
|
|
|
| 54 |
.manage(study::StudyState::default())
|
| 55 |
.invoke_handler(tauri::generate_handler![
|
| 56 |
settings::phase0_status,
|
| 57 |
+
// Browser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
browser::commands::browser_init,
|
| 59 |
browser::commands::browser_set_visible,
|
| 60 |
browser::commands::tab_create,
|
|
|
|
| 72 |
browser::commands::tab_find,
|
| 73 |
browser::commands::tab_find_clear,
|
| 74 |
browser::context_menu::browser_context_menu,
|
| 75 |
+
// Ad-block
|
| 76 |
adblock::commands::shield_get_report,
|
| 77 |
adblock::commands::shield_check_url,
|
| 78 |
adblock::commands::shield_cosmetic_css,
|
|
|
|
| 81 |
adblock::commands::shield_update_lists,
|
| 82 |
adblock::commands::shield_add_user_rule,
|
| 83 |
adblock::commands::shield_list_subscriptions,
|
| 84 |
+
// Library
|
| 85 |
library::library_add_item,
|
|
|
|
| 86 |
library::library_load,
|
| 87 |
library::library_items,
|
| 88 |
library::library_search,
|
| 89 |
library::library_remove_item,
|
| 90 |
library::library_add_tag,
|
| 91 |
+
library::library_extract_palette,
|
| 92 |
+
// Board
|
| 93 |
+
board::board_list,
|
| 94 |
+
board::board_current,
|
| 95 |
board::board_create,
|
| 96 |
+
board::board_open,
|
| 97 |
+
board::board_save_as,
|
| 98 |
board::board_load,
|
| 99 |
board::board_items,
|
| 100 |
board::board_add_image,
|
| 101 |
board::board_add_note,
|
| 102 |
board::board_add_palette,
|
| 103 |
+
board::board_extract_palette_from_item,
|
| 104 |
+
board::board_add_palette_from_item,
|
| 105 |
board::board_update_item,
|
| 106 |
board::board_delete_item,
|
| 107 |
+
// Screen capture
|
| 108 |
+
capture::capture_screen_region,
|
| 109 |
+
// Sessions
|
| 110 |
sessions::sessions_save,
|
| 111 |
sessions::sessions_load,
|
| 112 |
sessions::sessions_list,
|
| 113 |
sessions::sessions_auto_save,
|
| 114 |
sessions::sessions_delete,
|
| 115 |
sessions::sessions_rename,
|
| 116 |
+
// Downloads
|
| 117 |
downloads::downloads_list,
|
| 118 |
downloads::downloads_clear_completed,
|
| 119 |
downloads::download_to_library,
|
| 120 |
downloads::web_clip_page,
|
| 121 |
+
// Credentials
|
| 122 |
credentials::credentials_list,
|
| 123 |
credentials::credentials_generate_password,
|
| 124 |
+
// Study
|
| 125 |
study::study_start,
|
| 126 |
study::study_complete,
|
| 127 |
study::study_list,
|
| 128 |
+
// Color tools
|
| 129 |
color_tools::color_export,
|
| 130 |
color_tools::color_search_library,
|
| 131 |
])
|
|
|
|
| 143 |
Ok(())
|
| 144 |
})
|
| 145 |
.run(tauri::generate_context!())
|
| 146 |
+
.expect("error while running Muse Alpha");
|
| 147 |
}
|
| 148 |
|
| 149 |
fn migrations() -> Vec<Migration> {
|
|
|
|
| 152 |
Migration { version: 2, description: "phase3_tables", sql: include_str!("../migrations/002_phase3_tables.sql"), kind: MigrationKind::Up },
|
| 153 |
]
|
| 154 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|