Move notes store to rust

This commit is contained in:
Joscha 2025-02-13 22:20:56 +01:00
parent 849400cf35
commit 75f3a84e5f
12 changed files with 617 additions and 138 deletions

View file

@ -0,0 +1,112 @@
use std::sync::{Arc, Mutex};
use tauri::{AppHandle, Emitter, State};
use crate::{
ids::NoteId,
store::Store,
types::{EventNotesStoreUpdate, Note},
};
// API methods are sorted alphabetically.
fn update_if_required(store: &mut Store, app: &AppHandle) {
if let Some(store_id) = store.needs_update() {
let payload = EventNotesStoreUpdate { store_id };
app.emit("notes_store_update", payload).unwrap();
store.update();
}
}
#[tauri::command]
pub fn note_child_add(
id: NoteId,
child_id: NoteId,
child_position: isize,
app: AppHandle,
store: State<'_, Arc<Mutex<Store>>>,
) {
let mut guard = store.lock().unwrap();
guard.add_child_at_position(id, child_id, child_position);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn note_child_move(
child_id: NoteId,
from_id: NoteId,
from_iteration: usize,
to_id: NoteId,
to_position: isize,
app: AppHandle,
store: State<'_, Arc<Mutex<Store>>>,
) {
let mut guard = store.lock().unwrap();
guard.move_child_by_id_to_position(child_id, from_id, from_iteration, to_id, to_position);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn note_child_remove(
id: NoteId,
child_id: NoteId,
child_iteration: usize,
app: AppHandle,
store: State<'_, Arc<Mutex<Store>>>,
) {
let mut guard = store.lock().unwrap();
guard.remove_child_by_id(id, child_id, child_iteration);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn note_children_set(
id: NoteId,
children: Vec<NoteId>,
app: AppHandle,
store: State<'_, Arc<Mutex<Store>>>,
) {
let mut guard = store.lock().unwrap();
guard.set_children(id, children);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn note_create(text: String, app: AppHandle, store: State<'_, Arc<Mutex<Store>>>) -> Note {
let mut guard = store.lock().unwrap();
let id = guard.create(text);
update_if_required(&mut guard, &app);
guard.get(id).unwrap()
}
#[tauri::command]
pub fn note_delete(id: NoteId, app: AppHandle, store: State<'_, Arc<Mutex<Store>>>) {
let mut guard = store.lock().unwrap();
guard.delete(id);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn note_get(id: NoteId, store: State<'_, Arc<Mutex<Store>>>) -> Option<Note> {
let guard = store.lock().unwrap();
guard.get(id)
}
#[tauri::command]
pub fn note_text_set(
id: NoteId,
text: String,
app: AppHandle,
store: State<'_, Arc<Mutex<Store>>>,
) {
let mut guard = store.lock().unwrap();
guard.set_text(id, text);
update_if_required(&mut guard, &app);
}
#[tauri::command]
pub fn notes_clear(app: AppHandle, store: State<'_, Arc<Mutex<Store>>>) {
let mut guard = store.lock().unwrap();
guard.clear();
update_if_required(&mut guard, &app);
}