From f2b5e1ab6d1ce5f605c8f4150c44b4862ca9c409 Mon Sep 17 00:00:00 2001 From: SinTan1729 Date: Sun, 31 Mar 2024 15:38:59 -0500 Subject: [PATCH] chg: Use json for sending url list --- actix/src/database.rs | 22 ++++++++++++++++------ actix/src/utils.rs | 5 ++--- resources/static/script.js | 21 ++++++--------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/actix/src/database.rs b/actix/src/database.rs index 53e32e6..0dc66a1 100644 --- a/actix/src/database.rs +++ b/actix/src/database.rs @@ -1,4 +1,12 @@ use rusqlite::Connection; +use serde::Serialize; + +#[derive(Serialize)] +pub struct DbRow { + shortlink: String, + longlink: String, + hits: i64, +} pub fn find_url(shortlink: &str, db: &Connection) -> Option { let mut statement = db @@ -10,17 +18,19 @@ pub fn find_url(shortlink: &str, db: &Connection) -> Option { .ok() } -pub fn getall(db: &Connection) -> Vec { +pub fn getall(db: &Connection) -> Vec { let mut statement = db.prepare_cached("SELECT * FROM urls").unwrap(); let mut data = statement.query([]).unwrap(); - let mut links: Vec = Vec::new(); + let mut links: Vec = Vec::new(); while let Some(row) = data.next().unwrap() { - let short_url: String = row.get("short_url").unwrap(); - let long_url: String = row.get("long_url").unwrap(); - let hits: i64 = row.get("hits").unwrap(); - links.push(format!("{short_url},{long_url},{hits}")); + let row_struct = DbRow { + shortlink: row.get("short_url").unwrap(), + longlink: row.get("long_url").unwrap(), + hits: row.get("hits").unwrap(), + }; + links.push(row_struct); } links diff --git a/actix/src/utils.rs b/actix/src/utils.rs index c2d75aa..68bad35 100644 --- a/actix/src/utils.rs +++ b/actix/src/utils.rs @@ -6,7 +6,6 @@ use rand::seq::SliceRandom; use regex::Regex; use rusqlite::Connection; use serde::Deserialize; -use serde_json::from_str; #[derive(Deserialize)] struct Url { @@ -29,11 +28,11 @@ fn validate_link(link: &str) -> bool { pub fn getall(db: &Connection) -> String { let links = database::getall(db); - links.join("\n") + serde_json::to_string(&links).unwrap() } pub fn add_link(req: String, db: &Connection) -> (bool, String) { - let mut chunks: Url = from_str(&req).unwrap(); + let mut chunks: Url = serde_json::from_str(&req).unwrap(); let style = env::var("slug_style").unwrap_or(String::from("Pair")); let len_str = env::var("slug_length").unwrap_or(String::from("8")); diff --git a/resources/static/script.js b/resources/static/script.js index 3b939e0..c9d6194 100644 --- a/resources/static/script.js +++ b/resources/static/script.js @@ -31,16 +31,7 @@ const refreshData = async () => { document.getElementById("login-dialog").showModal(); document.getElementById("password").focus(); } else { - data = reply - .split("\n") - .filter(line => line !== "") - .map(line => line.split(",")) - .map(arr => ({ - short: arr[0], - long: arr[1], - hits: arr[2] - })); - + data = JSON.parse(reply) displayData(data); } }; @@ -87,18 +78,18 @@ const showAlert = async (text, col) => { const TR = (row, site) => { const tr = document.createElement("tr"); - const longTD = TD(A_LONG(row.long), "Long URL"); + const longTD = TD(A_LONG(row["longlink"]), "Long URL"); var shortTD = null; if (window.isSecureContext) { - shortTD = TD(A_SHORT(row.short, site), "Short URL"); + shortTD = TD(A_SHORT(row["shortlink"], site), "Short URL"); } else { - shortTD = TD(A_SHORT_INSECURE(row.short, site), "Short URL"); + shortTD = TD(A_SHORT_INSECURE(row["shortlink"], site), "Short URL"); } - hitsTD = TD(row.hits); + hitsTD = TD(row["hits"]); hitsTD.setAttribute("label", "Hits"); hitsTD.setAttribute("name", "hitsColumn"); - const btn = deleteButton(row.short); + const btn = deleteButton(row["shortlink"]); tr.appendChild(shortTD); tr.appendChild(longTD);