Files
fechamento-caixa/src-tauri/src/plugins/app.rs
T
root a5cff433a6
Build Fechamento de Caixa / build (macos-14, app) (push) Has been cancelled
Build Fechamento de Caixa / build (ubuntu-22.04, deb) (push) Has been cancelled
Build Fechamento de Caixa / build (windows-2022, msi) (push) Has been cancelled
Fechamento de Caixa - Tauri 2 initial commit
- Storage: SQLite local via rusqlite
- Supabase: REST API via reqwest
- Printer: USB ESC/POS for TM-T20
- Frontend: vanilla HTML (form-v9.3 ported)
- Build: GitHub Actions for Linux/Windows/macOS
2026-06-20 13:58:34 +00:00

88 lines
2.3 KiB
Rust

//! Plugin de configuração da aplicação (loja, preferências)
//! Persistido em config.json ao lado do banco SQLite.
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::PathBuf;
use std::sync::Mutex;
use tauri::State;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct AppConfig {
pub loja: String,
pub pdv_nome: String,
pub operador_default: String,
pub turno_default: String,
pub sync_automatico: bool,
pub auto_open_printer: bool,
}
impl Default for AppConfig {
fn default() -> Self {
Self {
loja: "Uniao".to_string(),
pdv_nome: "PDV-01".to_string(),
operador_default: String::new(),
turno_default: String::new(),
sync_automatico: true,
auto_open_printer: false,
}
}
}
pub struct AppState {
pub config: Mutex<AppConfig>,
config_path: PathBuf,
}
impl AppState {
pub fn new(data_dir: PathBuf) -> Self {
let config_path = data_dir.join("config.json");
let config = if let Ok(content) = fs::read_to_string(&config_path) {
serde_json::from_str(&content).unwrap_or_default()
} else {
AppConfig::default()
};
Self {
config: Mutex::new(config),
config_path,
}
}
pub fn save(&self) -> Result<(), String> {
let cfg = self.config.lock().map_err(|_| "lock error")?;
let json = serde_json::to_string_pretty(&*cfg)
.map_err(|e| e.to_string())?;
fs::write(&self.config_path, json).map_err(|e| e.to_string())?;
log::info!("Config salvo em {:?}", self.config_path);
Ok(())
}
}
#[tauri::command]
pub fn get_loja(state: State<'_, AppState>) -> String {
state.config.lock().unwrap().loja.clone()
}
#[tauri::command]
pub fn set_loja(state: State<'_, AppState>, loja: String) -> Result<(), String> {
state.config.lock().unwrap().loja = loja;
state.save()
}
#[tauri::command]
pub fn get_config(state: State<'_, AppState>) -> AppConfig {
state.config.lock().unwrap().clone()
}
#[tauri::command]
pub fn set_config(state: State<'_, AppState>, cfg: AppConfig) -> Result<(), String> {
*state.config.lock().unwrap() = cfg;
state.save()
}
pub fn init(data_dir: PathBuf) -> AppState {
AppState::new(data_dir)
}