* feat: settings back button returns to origin view (push/pop nav) * feat: redesign settings screen with db-viewer border styling * fix: settings sidebar — icon+text tabs, back at top, top border (PR feedback) * fix: tighten settings sidebar — back and tabs in one group * fix: settings header shows active tab name instead of duplicated title * fix: settings — accent back button, header shows active tab; fix App test * fix: tags settings — no create label, no card chrome (bg/border/padding) * feat: drag-and-drop tag reordering in settings tags tab * fix: general settings — remove section card chrome (bg/border/padding) * fix: merge Appearance and Interface into one settings section * fix: remove row separators between settings items within sections * fix: settings rows use gap spacing instead of per-row padding * feat: strip section cards from all settings tabs; delete SettingsSection * feat: apply theme and font size settings (appearance wiring) * feat: honor default folder setting on startup * feat: confirm_before_delete setting now skips delete confirmations * feat: default_ports setting prefills new connection forms * fix: light theme — text colors, native window chrome, ThemePicker preview * fix: sync window background color with theme so title bar follows light mode * fix: window-sync test uses microtask flush instead of vi.waitFor * fix: app root carries canvas bg so home-screen parent matches theme * fix: grant window set-theme/set-background-color permissions so title bar follows theme * fix: overlay title bar — webview paints under traffic lights, flat canvas color in both themes * fix: compact 28px overlay titlebar with visible bottom border * fix: in-flow titlebar strip (draggable via allowed permission); screens fill remaining height, no bottom clipping * fix: top border only on settings + db viewer pages, not the titlebar strip * fix: db viewer sidebar h-screen -> h-full (28px overflow clipped bottom icons) * fix: system theme resets window to OS before reading matchMedia (was polluted by forced window theme) * fix: theme switcher labels moved below previews for readability * feat: configurable accent color setting (circle palette in Appearance) * docs: update AGENTS.md + README for settings redesign, wired settings, accent color
58 lines
1.8 KiB
Rust
58 lines
1.8 KiB
Rust
use crate::models::Settings;
|
|
use crate::store::Store;
|
|
use std::sync::Mutex;
|
|
|
|
pub fn get_settings_inner(state: &Mutex<Store>) -> Result<Settings, String> {
|
|
let store = state.lock().map_err(|e| e.to_string())?;
|
|
store.get_settings()
|
|
}
|
|
|
|
pub fn update_setting_inner(state: &Mutex<Store>, key: &str, value: &str) -> Result<(), String> {
|
|
let store = state.lock().map_err(|e| e.to_string())?;
|
|
store.update_setting(key, value)
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub fn get_settings(state: tauri::State<crate::AppState>) -> Result<Settings, String> {
|
|
get_settings_inner(&state.db_store)
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub fn update_setting(state: tauri::State<crate::AppState>, key: String, value: String) -> Result<(), String> {
|
|
update_setting_inner(&state.db_store, &key, &value)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::store::Store;
|
|
|
|
fn state() -> std::sync::Mutex<Store> {
|
|
let conn = rusqlite::Connection::open_in_memory().unwrap();
|
|
crate::store::migrations::run_migrations(&conn).unwrap();
|
|
std::sync::Mutex::new(Store::from_connection(conn))
|
|
}
|
|
|
|
#[test]
|
|
fn get_settings_returns_defaults() {
|
|
let st = state();
|
|
let s = get_settings_inner(&st).unwrap();
|
|
assert_eq!(s.theme, "system");
|
|
assert_eq!(s.font_size, "medium");
|
|
assert_eq!(s.accent_color, "#2563EB");
|
|
}
|
|
|
|
#[test]
|
|
fn update_setting_persists() {
|
|
let st = state();
|
|
update_setting_inner(&st, "theme", "light").unwrap();
|
|
assert_eq!(get_settings_inner(&st).unwrap().theme, "light");
|
|
}
|
|
|
|
#[test]
|
|
fn update_accent_color_persists() {
|
|
let st = state();
|
|
update_setting_inner(&st, "accent_color", "#EF4444").unwrap();
|
|
assert_eq!(get_settings_inner(&st).unwrap().accent_color, "#EF4444");
|
|
}
|
|
} |