diff options
| author | Fuwn <[email protected]> | 2023-03-30 17:43:44 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-03-30 17:43:44 -0700 |
| commit | 8834497c15643ef8aa4117d6f9f07eb692cb1162 (patch) | |
| tree | 05899321fe5d4f31aa7087faeeaec0dba1f2cf57 /src | |
| parent | feat(router): add translation engine (diff) | |
| download | locus-8834497c15643ef8aa4117d6f9f07eb692cb1162.tar.xz locus-8834497c15643ef8aa4117d6f9f07eb692cb1162.zip | |
refactor(router): move ticker and translate to modules
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/router.rs | 2 | ||||
| -rw-r--r-- | src/modules/router/module.rs | 62 | ||||
| -rw-r--r-- | src/modules/router/ticker.rs | 44 | ||||
| -rw-r--r-- | src/modules/router/translate.rs | 60 |
4 files changed, 108 insertions, 60 deletions
diff --git a/src/modules/router.rs b/src/modules/router.rs index 8f24a9b..881c0fd 100644 --- a/src/modules/router.rs +++ b/src/modules/router.rs @@ -18,5 +18,7 @@ mod deepl; mod module; +mod ticker; +mod translate; pub use module::module; diff --git a/src/modules/router/module.rs b/src/modules/router/module.rs index a97c973..1987568 100644 --- a/src/modules/router/module.rs +++ b/src/modules/router/module.rs @@ -16,8 +16,6 @@ // Copyright (C) 2022-2022 Fuwn <[email protected]> // SPDX-License-Identifier: GPL-3.0-only -use crate::{modules::router::deepl::translate, DATABASE}; - pub fn module(router: &mut windmark::Router) { router.set_pre_route_callback(Box::new(|context| { info!( @@ -26,28 +24,7 @@ pub fn module(router: &mut windmark::Router) { context.url.to_string(), ); - let url_path = if context.url.path().is_empty() { - "/" - } else { - context.url.path() - }; - - let previous_database = (*DATABASE.lock().unwrap()).get::<i32>(url_path); - - match previous_database { - None => { - (*DATABASE.lock().unwrap()) - .set::<i32>(url_path, &0) - .unwrap(); - } - Some(_) => {} - } - - let new_database = (*DATABASE.lock().unwrap()).get::<i32>(url_path); - - (*DATABASE.lock().unwrap()) - .set(url_path, &(new_database.unwrap() + 1)) - .unwrap(); + super::ticker::module(&context); })); router.set_post_route_callback(Box::new({ |context, content| { @@ -57,42 +34,7 @@ pub fn module(router: &mut windmark::Router) { context.url.to_string(), ); - if let Some(language) = - windmark::utilities::queries_from_url(context.url).get("translate") - { - let mut lines = content - .lines() - .map(ToString::to_string) - .collect::<Vec<String>>(); - let mut preformatted = true; - - for line in &mut lines { - if line == "```" { - preformatted = !preformatted; - } - - if line.starts_with("=>") { - if let Some(germ::ast::Node::Link { - to, - text, - }) = germ::ast::Ast::from_string(line).inner().get(0) - { - *line = format!( - "=> {to}?translate={language}{}", - text.clone().map_or_else( - || "".to_string(), - |text| { format!(" {}", translate(&text, language).text()) } - ) - ); - } - } else if !line.starts_with("=>") && preformatted && !line.is_empty() - { - *line = translate(line, language).text(); - } - } - - *content = lines.join("\n"); - } + super::translate::module(&context, content); } })); } diff --git a/src/modules/router/ticker.rs b/src/modules/router/ticker.rs new file mode 100644 index 0000000..4297086 --- /dev/null +++ b/src/modules/router/ticker.rs @@ -0,0 +1,44 @@ +// This file is part of Locus <https://github.com/gemrest/locus>. +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// SPDX-License-Identifier: GPL-3.0-only + +use crate::DATABASE; + +pub fn module(context: &windmark::returnable::CallbackContext<'_>) { + let url_path = if context.url.path().is_empty() { + "/" + } else { + context.url.path() + }; + + let previous_database = (*DATABASE.lock().unwrap()).get::<i32>(url_path); + + match previous_database { + None => { + (*DATABASE.lock().unwrap()) + .set::<i32>(url_path, &0) + .unwrap(); + } + Some(_) => {} + } + + let new_database = (*DATABASE.lock().unwrap()).get::<i32>(url_path); + + (*DATABASE.lock().unwrap()) + .set(url_path, &(new_database.unwrap() + 1)) + .unwrap(); +} diff --git a/src/modules/router/translate.rs b/src/modules/router/translate.rs new file mode 100644 index 0000000..99f4423 --- /dev/null +++ b/src/modules/router/translate.rs @@ -0,0 +1,60 @@ +// This file is part of Locus <https://github.com/gemrest/locus>. +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// SPDX-License-Identifier: GPL-3.0-only + +use crate::modules::router::deepl::translate; + +pub fn module( + cc: &windmark::returnable::CallbackContext<'_>, + content: &mut String, +) { + if let Some(language) = + windmark::utilities::queries_from_url(cc.url).get("translate") + { + let mut lines = content + .lines() + .map(ToString::to_string) + .collect::<Vec<String>>(); + let mut preformatted = true; + + for line in &mut lines { + if line == "```" { + preformatted = !preformatted; + } + + if line.starts_with("=>") { + if let Some(germ::ast::Node::Link { + to, + text, + }) = germ::ast::Ast::from_string(line).inner().get(0) + { + *line = format!( + "=> {to}?translate={language}{}", + text.clone().map_or_else( + || "".to_string(), + |text| { format!(" {}", translate(&text, language).text()) } + ) + ); + } + } else if !line.starts_with("=>") && preformatted && !line.is_empty() { + *line = translate(line, language).text(); + } + } + + *content = lines.join("\n"); + } +} |