From 4f86f26972c8700ba79e92f4e11ead53f968259e Mon Sep 17 00:00:00 2001 From: catto Date: Thu, 18 Apr 2024 10:16:06 +0200 Subject: [PATCH] settings json --- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/main.rs | 44 ++++++++++++++++++++++++++++++++++++++++++- src/main.ts | 43 +++++++++++++++++++++++++++++++++++++++--- src/model.ts | 4 ++++ 5 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7e48332..0d721aa 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2494,6 +2494,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" name = "snotes-deck" version = "0.0.0" dependencies = [ + "home", "libsnotes", "serde", "serde_json", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index cbdb791..3d214f2 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -15,6 +15,7 @@ tauri = { version = "1", features = ["shell-open"] } serde = { version = "1", features = ["derive"] } serde_json = "1" libsnotes = { path = "../libsnotes" } +home = "0.5.9" [features] # This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!! diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 530f6b9..b9886af 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,6 +1,9 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +use std::fs; + +use home::home_dir; use libsnotes::show_notes; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command @@ -50,6 +53,43 @@ fn update_specific_note(id: u32, content: &str, tag: &str) -> bool { libsnotes::edit_specific_note(id.try_into().unwrap(), tag, content).is_ok() } +#[tauri::command] +fn load_settings() -> String { + let settings_string = fs::read_to_string( + home_dir() + .unwrap() + .join(".snotes-data/snotes-settings.json"), + ) + .unwrap_or(String::from("")) + .parse() + .unwrap_or(String::from("")); + dbg!(&settings_string); + settings_string +} + +#[tauri::command] +fn init_settings() { + let dir = home_dir().unwrap().join(".snotes-data"); + dbg!(&dir); + if !dir.exists() { + fs::create_dir(dir).unwrap(); + } + + let settings = r#" + { + "fontSize": "16px" + } + "#; + + fs::write( + home_dir() + .unwrap() + .join(".snotes-data/snotes-settings.json"), + settings, + ) + .unwrap(); +} + fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![ @@ -60,7 +100,9 @@ fn main() { search_notes, create_note, delete_specific_note, - update_specific_note + update_specific_note, + init_settings, + load_settings ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/main.ts b/src/main.ts index 83f27bb..917b0fb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,5 @@ import { invoke } from "@tauri-apps/api/tauri"; -import { Note } from "./model"; +import { Note, Settings } from "./model"; let notesMsgEl: HTMLElement | null; @@ -38,6 +38,8 @@ enum SearchState { let editorState = EditorState.NEW; let searchState = SearchState.EMPTY; +let settings: Settings | null = null; + /** * Saves the note. * Or updates an existing note depending on editor state @@ -111,7 +113,11 @@ async function retrieveNotes(): Promise> { * the Notes in the sidebar. * TODO: consistency */ -window.addEventListener("DOMContentLoaded", () => { +window.addEventListener("DOMContentLoaded", async () => { + // settings + settings = await loadSettings(); + + console.log("ACTUAL SETTINGS IN FRONTEND: ", settings.fontSize) createNoteContentEl = document.querySelector("#create-input"); createNoteTagEl = document.querySelector("#create-tag"); searchbarEl = document.querySelector("#note-searchbar"); @@ -162,7 +168,6 @@ window.addEventListener("DOMContentLoaded", () => { } else { searchState = SearchState.RESULTS; } - searchbarContents = input; searchNote(input); @@ -188,9 +193,35 @@ window.addEventListener("DOMContentLoaded", () => { } }); + if (createNoteContentEl) { + createNoteContentEl.style.fontSize = settings.fontSize + } + refreshContextMenuElements(); }); +async function loadSettings(): Promise { + const defaultSettings: Settings = { + fontSize: "16px" + }; + + try { + let loadedSettingsString: string = await invoke("load_settings"); + console.log(loadedSettingsString); + + if (loadedSettingsString === "") { + await invoke("init_settings"); + return defaultSettings; + } + + const loadedSettings = JSON.parse(loadedSettingsString); + return loadedSettings as Settings; + } catch (error) { + console.error("An error occurred while loading settings:", error); + return defaultSettings; + } +} + /** * We need to add new event listeners every time we refresh the note list */ @@ -302,6 +333,12 @@ function handleSidebarNoteClick(id: Number): any { }); if (n) { + // save if there's something in the editor currently + // before we open the new note to prevent data loss + if (createNoteContentEl.value != "") { + saveNote(); + } + openNote(n); } else { // don't destory currently editing note if this fails diff --git a/src/model.ts b/src/model.ts index d54e5e3..dce7a04 100644 --- a/src/model.ts +++ b/src/model.ts @@ -4,3 +4,7 @@ export type Note = { date: String, tag: String; }; + +export type Settings = { + fontSize: string +};