WIP: Export all feature
This commit is contained in:
parent
f4d6b920ab
commit
b09d1eacbf
|
@ -176,6 +176,8 @@ dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"home",
|
"home",
|
||||||
"rusqlite",
|
"rusqlite",
|
||||||
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -196,6 +198,12 @@ version = "0.4.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.18"
|
version = "0.2.18"
|
||||||
|
@ -219,9 +227,9 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.79"
|
version = "1.0.91"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
|
checksum = "307e3004becf10f5a6e0d59d20f3cd28231b0e0827a96cd3e0ce6d14bc1e4bb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
@ -257,18 +265,18 @@ checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.197"
|
version = "1.0.215"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
|
checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.197"
|
version = "1.0.215"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
|
checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -277,11 +285,12 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.115"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd"
|
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
|
"memchr",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
@ -294,9 +303,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.58"
|
version = "2.0.89"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687"
|
checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -8,6 +8,8 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = "0.4.37"
|
chrono = "0.4.37"
|
||||||
home = "0.5.9"
|
home = "0.5.9"
|
||||||
|
serde = "1.0.215"
|
||||||
|
serde_derive = "1.0.215"
|
||||||
serde_json = "1.0.115"
|
serde_json = "1.0.115"
|
||||||
[dependencies.rusqlite]
|
[dependencies.rusqlite]
|
||||||
version = "0.31.0"
|
version = "0.31.0"
|
||||||
|
|
|
@ -274,6 +274,42 @@ pub fn get_note_by_id(id: u32) -> Result<String, String> {
|
||||||
Ok(json_string)
|
Ok(json_string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns all notes as a json
|
||||||
|
pub fn export_all() -> Result<String, String> {
|
||||||
|
let db = get_db_dir();
|
||||||
|
let connection = Connection::open(db).map_err(|e| format!("Database Error: {}", e))?;
|
||||||
|
|
||||||
|
let query = "SELECT * FROM notes";
|
||||||
|
let mut prepare = connection.prepare(query).unwrap();
|
||||||
|
|
||||||
|
let notes = prepare
|
||||||
|
.query_map([], |row| {
|
||||||
|
Ok(Note {
|
||||||
|
id: row.get(0)?,
|
||||||
|
content: row.get(1)?,
|
||||||
|
date: row.get(2)?,
|
||||||
|
tag: row.get(3)?,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut json_array = Vec::new();
|
||||||
|
|
||||||
|
for note in notes {
|
||||||
|
let unwrapped = note.unwrap();
|
||||||
|
let note_json = json!({
|
||||||
|
"id": unwrapped.id,
|
||||||
|
"date": unwrapped.date,
|
||||||
|
"content": unwrapped.content,
|
||||||
|
"tag": unwrapped.tag
|
||||||
|
});
|
||||||
|
json_array.push(note_json);
|
||||||
|
}
|
||||||
|
|
||||||
|
let json_string = serde_json::to_string_pretty(&json_array).unwrap();
|
||||||
|
Ok(json_string)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
@ -2052,6 +2052,8 @@ dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"home",
|
"home",
|
||||||
"rusqlite",
|
"rusqlite",
|
||||||
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -3304,9 +3306,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.132"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
|
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa 1.0.11",
|
"itoa 1.0.11",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
|
|
@ -5,6 +5,17 @@ use std::fs;
|
||||||
|
|
||||||
use home::home_dir;
|
use home::home_dir;
|
||||||
use libsnotes::show_notes;
|
use libsnotes::show_notes;
|
||||||
|
use tauri::{
|
||||||
|
menu::{AboutMetadata, MenuBuilder, MenuItemBuilder, SubmenuBuilder},
|
||||||
|
Emitter,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
fn export_all_notes() -> String {
|
||||||
|
let res = libsnotes::export_all().unwrap();
|
||||||
|
println!("{}", &res);
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn get_app_version() -> String {
|
fn get_app_version() -> String {
|
||||||
|
@ -108,10 +119,40 @@ fn save_settings(settings: String) {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
|
.setup(|app| {
|
||||||
|
app.handle();
|
||||||
|
|
||||||
|
let settings = MenuItemBuilder::new("Export All")
|
||||||
|
.id("exportall")
|
||||||
|
//.accelerator("CmdOrCtrl+,")
|
||||||
|
.build(app)?;
|
||||||
|
|
||||||
|
let app_submenu = SubmenuBuilder::new(app, "File")
|
||||||
|
.about(Some(AboutMetadata {
|
||||||
|
..Default::default()
|
||||||
|
}))
|
||||||
|
.separator()
|
||||||
|
.item(&settings)
|
||||||
|
.build()?;
|
||||||
|
|
||||||
|
let menu = MenuBuilder::new(app).items(&[&app_submenu]).build()?;
|
||||||
|
|
||||||
|
app.set_menu(menu)?;
|
||||||
|
|
||||||
|
app.on_menu_event(move |app, event| {
|
||||||
|
if event.id() == settings.id() {
|
||||||
|
// emit a window event to the frontend
|
||||||
|
let _event = app.emit("custom-event", "/exportall");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
.plugin(tauri_plugin_fs::init())
|
.plugin(tauri_plugin_fs::init())
|
||||||
.plugin(tauri_plugin_dialog::init())
|
.plugin(tauri_plugin_dialog::init())
|
||||||
.plugin(tauri_plugin_shell::init())
|
.plugin(tauri_plugin_shell::init())
|
||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
|
export_all_notes,
|
||||||
get_app_version,
|
get_app_version,
|
||||||
init_db,
|
init_db,
|
||||||
get_notes_list,
|
get_notes_list,
|
||||||
|
|
10
src/main.ts
10
src/main.ts
|
@ -909,7 +909,10 @@ async function openNoteById(value: string): Promise<boolean> {
|
||||||
|
|
||||||
async function exportNote(contents: string | null) {
|
async function exportNote(contents: string | null) {
|
||||||
if (contents) {
|
if (contents) {
|
||||||
const title = contents.slice(0, 10).trim();
|
const title =
|
||||||
|
contents.replace(/\n/g, " ").length < 30
|
||||||
|
? contents.replace(/\n/g, " ").trim()
|
||||||
|
: contents.replace(/\n/g, " ").slice(0, 30).trim();
|
||||||
const filePath = await save({
|
const filePath = await save({
|
||||||
defaultPath: (await homeDir()) + "/" + title + ".md",
|
defaultPath: (await homeDir()) + "/" + title + ".md",
|
||||||
filters: [
|
filters: [
|
||||||
|
@ -931,6 +934,11 @@ async function exportNote(contents: string | null) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function exportAllNotes() {
|
||||||
|
let res = await invoke("export_all_notes");
|
||||||
|
console.log(res);
|
||||||
|
}
|
||||||
|
|
||||||
async function handleOpenSettingsModal() {
|
async function handleOpenSettingsModal() {
|
||||||
// insert app version
|
// insert app version
|
||||||
const appVersionEl = document.getElementById("app-version");
|
const appVersionEl = document.getElementById("app-version");
|
||||||
|
|
Loading…
Reference in New Issue