Files
cjdic2-next/src-tauri/src/lib.rs
T
polv ac92453685 backend
TODO: sql loading/parsing from frontend
2026-03-29 19:01:38 +07:00

75 lines
2.3 KiB
Rust

use std::fs::{create_dir_all, File};
use tauri::Manager;
use tauri_plugin_fs::FsExt;
use crate::command::*;
use crate::service::AppService;
use crate::yomitan::search::YomitanSearch;
mod tokenizer;
mod yomitan;
mod command;
mod error;
mod service;
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}! You've been greeted from Rust!", name)
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_clipboard_manager::init())
.plugin(tauri_plugin_fs::init())
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations("sqlite:search.db", YomitanSearch::migrations())
.build(),
)
.plugin(tauri_plugin_http::init())
.plugin(tauri_plugin_opener::init())
.setup(|app| {
let config_dir = app.path().app_config_dir()?;
create_dir_all(&config_dir)?;
let data_dir = app.path().app_data_dir()?;
create_dir_all(&data_dir.join("yomitan/ja"))?;
let cache_dir = app.path().app_cache_dir()?;
let vibrato_dic_dir = cache_dir.join("vibrato");
create_dir_all(&vibrato_dic_dir)?;
let vibrato_dic_path = vibrato_dic_dir.join("system.dic");
if !vibrato_dic_path.exists() {
let zst_path = app.path().resolve(
"resources/mecab-ipadic/system.dic.zst",
tauri::path::BaseDirectory::Resource,
)?;
// Use Tauri's fs abstraction — works on both Android and desktop
let bytes = app.fs().read(&zst_path)?;
let mut decoder = zstd::Decoder::new(bytes.as_slice())?;
let mut out = File::create(&vibrato_dic_path)?;
std::io::copy(&mut decoder, &mut out)?;
}
// db_path is at config_dir;
let service = AppService::new(&vibrato_dic_path)?;
app.manage(service);
Ok(())
})
.invoke_handler(tauri::generate_handler![
greet,
tokenize,
normalize,
download_url
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}