From dcdc2051ccb207ea02da265e1d0eea823a82b700 Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Sat, 13 Apr 2024 06:16:32 +0530 Subject: [PATCH] fix: assign unique IDs to gist permanent links --- Cargo.lock | 20 ++++++++++++++++++++ Cargo.toml | 1 + src/data.rs | 7 +++++-- src/render_html.rs | 7 ++++--- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ca6ffa0..713e2bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -924,6 +924,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "home" version = "0.5.5" @@ -1170,6 +1176,7 @@ dependencies = [ "sailfish", "serde", "serde_json", + "sha256", "sled", "syntect", "url", @@ -1963,6 +1970,19 @@ dependencies = [ "digest", ] +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" diff --git a/Cargo.toml b/Cargo.toml index 197562a..a4def99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ sled = "0.34.7" syntect = "5.0.0" url = "2.2" actix-web-codegen-const-routes = "0.2.0" +sha256 = "1.5.0" [dependencies.graphql_client] features = ["reqwest"] diff --git a/src/data.rs b/src/data.rs index 84162c7..8d891fb 100644 --- a/src/data.rs +++ b/src/data.rs @@ -21,6 +21,7 @@ use graphql_client::{reqwest::post_graphql, GraphQLQuery}; use reqwest::header::USER_AGENT; use reqwest::Client; use serde::{Deserialize, Serialize}; +use sha256::digest; use sled::{Db, Tree}; use crate::proxy::StringUtils; @@ -287,19 +288,21 @@ impl Data { filepath: &file.file_name, code: &file.content, }; - file.content = highlight.syntax_highlight(); + file.content = highlight.syntax_highlight(&digest(&file.raw_url)); files.push(file); GistContent { files, html_url: gist_url, } } else { + let mut index = 1; gist.files.iter_mut().for_each(|f| { let highlight = render_html::SourcegraphQuery { filepath: &f.file_name, code: &f.content, }; - f.content = highlight.syntax_highlight(); + f.content = highlight.syntax_highlight(&digest(&f.raw_url)); + index += 1; }); gist }; diff --git a/src/render_html.rs b/src/render_html.rs index 487490f..d51b97e 100644 --- a/src/render_html.rs +++ b/src/render_html.rs @@ -38,7 +38,7 @@ pub struct SourcegraphQuery<'a> { } impl<'a> SourcegraphQuery<'a> { - pub fn syntax_highlight(&self) -> String { + pub fn syntax_highlight(&self, gist_name: &str) -> String { // let ss = SYNTAX_SET; let ts = ThemeSet::load_defaults(); @@ -66,7 +66,8 @@ impl<'a> SourcegraphQuery<'a> { if line_num == 0 || line_num == total_lines - 1 { output.push_str(line); } else { - output.push_str(&format!("
" + let line_id = format!("{gist_name}-{num}"); + output.push_str(&format!("
" )); num += 1; } @@ -153,7 +154,7 @@ mod tests { }; let result = query.determine_language(&syntax_set); assert_eq!(result.name, "TeX"); - let _result = query.syntax_highlight(); + let _result = query.syntax_highlight("foo"); } //#[test]