tweaks
i am going insane 🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈
This commit is contained in:
parent
d1fc33b1fc
commit
5d0d47df9d
@ -2,6 +2,7 @@
|
|||||||
name = "metasearch2"
|
name = "metasearch2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
build = "src/build.rs"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
bind = "0.0.0.0:28019"
|
bind = "0.0.0.0:28019"
|
||||||
|
|
||||||
engine_list_separator = false
|
engine_list_separator = false
|
||||||
|
version_info = false
|
||||||
|
|
||||||
[engines]
|
[engines]
|
||||||
google = { weight = 1.05 }
|
google = { weight = 1.05 }
|
||||||
|
19
src/build.rs
Normal file
19
src/build.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rustc-rerun-if-changed=.git/HEAD");
|
||||||
|
let output = Command::new("git").args(["rev-parse", "HEAD"]).output();
|
||||||
|
let git_hash = match output {
|
||||||
|
Ok(output) => String::from_utf8(output.stdout).unwrap_or("unknown".into()),
|
||||||
|
Err(_) => "unknown".into(),
|
||||||
|
};
|
||||||
|
let output = Command::new("git")
|
||||||
|
.args(["rev-parse", "--short", "HEAD"])
|
||||||
|
.output();
|
||||||
|
let git_hash_short = match output {
|
||||||
|
Ok(output) => String::from_utf8(output.stdout).unwrap_or("unknown".into()),
|
||||||
|
Err(_) => "unknown".into(),
|
||||||
|
};
|
||||||
|
println!("cargo:rustc-env=GIT_HASH={}", git_hash);
|
||||||
|
println!("cargo:rustc-env=GIT_HASH_SHORT={}", git_hash_short);
|
||||||
|
}
|
@ -11,6 +11,8 @@ pub struct Config {
|
|||||||
pub bind: SocketAddr,
|
pub bind: SocketAddr,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub engine_list_separator: Option<bool>,
|
pub engine_list_separator: Option<bool>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub version_info: Option<bool>,
|
||||||
pub engines: EnginesConfig,
|
pub engines: EnginesConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,7 +21,8 @@ impl Config {
|
|||||||
let default_config_str = include_str!("../default-config.toml");
|
let default_config_str = include_str!("../default-config.toml");
|
||||||
let mut config: Config = toml::from_str(default_config_str)?;
|
let mut config: Config = toml::from_str(default_config_str)?;
|
||||||
|
|
||||||
let config_path = Path::new("config.toml");
|
let config_path = std::env::args().nth(1).unwrap_or("config.toml".into());
|
||||||
|
let config_path = Path::new(&config_path);
|
||||||
if config_path.exists() {
|
if config_path.exists() {
|
||||||
let given_config = toml::from_str::<Config>(&fs::read_to_string(config_path)?)?;
|
let given_config = toml::from_str::<Config>(&fs::read_to_string(config_path)?)?;
|
||||||
config.update(given_config);
|
config.update(given_config);
|
||||||
@ -38,6 +41,8 @@ impl Config {
|
|||||||
self.bind = new.bind;
|
self.bind = new.bind;
|
||||||
self.engine_list_separator = new.engine_list_separator.or(self.engine_list_separator);
|
self.engine_list_separator = new.engine_list_separator.or(self.engine_list_separator);
|
||||||
assert_ne!(self.engine_list_separator, None);
|
assert_ne!(self.engine_list_separator, None);
|
||||||
|
self.version_info = new.version_info.or(self.version_info);
|
||||||
|
assert_ne!(self.version_info, None);
|
||||||
for (key, new) in new.engines.map {
|
for (key, new) in new.engines.map {
|
||||||
if let Some(existing) = self.engines.map.get_mut(&key) {
|
if let Some(existing) = self.engines.map.get_mut(&key) {
|
||||||
existing.update(new);
|
existing.update(new);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use scraper::{ElementRef, Html, Selector};
|
use scraper::{Html, Selector};
|
||||||
|
|
||||||
use crate::engines::{HttpResponse, Response, CLIENT};
|
use crate::engines::{HttpResponse, Response, CLIENT};
|
||||||
|
|
||||||
@ -25,14 +25,13 @@ pub fn parse_response(HttpResponse { res, body, .. }: &HttpResponse) -> Option<S
|
|||||||
.trim()
|
.trim()
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
let doc_query = Selector::parse(".mw-parser-output").unwrap();
|
let doc_query = Selector::parse(".mw-parser-output > p").unwrap();
|
||||||
|
|
||||||
let doc_html = dom
|
let doc_html = dom
|
||||||
.select(&doc_query)
|
.select(&doc_query)
|
||||||
.next()
|
.next()
|
||||||
.map(|doc| strip_gallery(doc))
|
.map(|doc| doc.html())
|
||||||
.unwrap_or_default()
|
.unwrap_or_default();
|
||||||
.join("");
|
|
||||||
|
|
||||||
let doc_html = ammonia::Builder::default()
|
let doc_html = ammonia::Builder::default()
|
||||||
.link_rel(None)
|
.link_rel(None)
|
||||||
@ -52,37 +51,3 @@ pub fn parse_response(HttpResponse { res, body, .. }: &HttpResponse) -> Option<S
|
|||||||
r#"{title_html}<div class="infobox-minecraft_wiki-article">{doc_html}</div>"#
|
r#"{title_html}<div class="infobox-minecraft_wiki-article">{doc_html}</div>"#
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn strip_gallery(doc: ElementRef) -> Vec<String> {
|
|
||||||
let mut gallery = false;
|
|
||||||
doc.children()
|
|
||||||
.filter(|elem| {
|
|
||||||
let value = elem.value();
|
|
||||||
if gallery {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
match value {
|
|
||||||
scraper::Node::Element(_) => {
|
|
||||||
let elem = ElementRef::wrap(*elem).unwrap();
|
|
||||||
let is_gallery_title = elem.first_child().map_or(false, |elem| {
|
|
||||||
elem.value().as_element().map_or(false, |_| {
|
|
||||||
let elem = ElementRef::wrap(elem).unwrap();
|
|
||||||
elem.text().collect::<String>() == "Gallery"
|
|
||||||
})
|
|
||||||
});
|
|
||||||
if is_gallery_title {
|
|
||||||
gallery = true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
true
|
|
||||||
}
|
|
||||||
_ => true,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.map(|elem| {
|
|
||||||
ElementRef::wrap(elem)
|
|
||||||
.map(|elem| elem.html())
|
|
||||||
.unwrap_or_default()
|
|
||||||
})
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
@ -30,5 +30,6 @@
|
|||||||
<input type="submit" value="Search" />
|
<input type="submit" value="Search" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
%version-info%
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -40,6 +40,11 @@ body {
|
|||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.version-info {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 16px;
|
||||||
|
right: 16px;
|
||||||
|
}
|
||||||
.results-container {
|
.results-container {
|
||||||
/* enough space for the infobox */
|
/* enough space for the infobox */
|
||||||
max-width: 73.5rem;
|
max-width: 73.5rem;
|
||||||
|
@ -9,16 +9,33 @@ use tracing::info;
|
|||||||
|
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
|
||||||
|
const BASE_COMMIT_URL: &str = "https://github.com/mat-1/metasearch2/commit/";
|
||||||
|
const VERSION: &str = std::env!("CARGO_PKG_VERSION");
|
||||||
|
const COMMIT_HASH: &str = std::env!("GIT_HASH");
|
||||||
|
const COMMIT_HASH_SHORT: &str = std::env!("GIT_HASH_SHORT");
|
||||||
|
|
||||||
pub async fn run(config: Config) {
|
pub async fn run(config: Config) {
|
||||||
let bind_addr = config.bind;
|
let bind_addr = config.bind;
|
||||||
|
|
||||||
|
let version_info = if config.version_info.unwrap() {
|
||||||
|
if COMMIT_HASH == "unknown" || COMMIT_HASH_SHORT == "unknown" {
|
||||||
|
format!(r#"<span class="version-info">Version {VERSION} (unknown commit)</span>"#)
|
||||||
|
} else {
|
||||||
|
format!(
|
||||||
|
r#"<span class="version-info">Version {VERSION} (<a href="{BASE_COMMIT_URL}{COMMIT_HASH}">{COMMIT_HASH_SHORT}</a>)</span>"#
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String::new()
|
||||||
|
};
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route(
|
.route(
|
||||||
"/",
|
"/",
|
||||||
get(|| async {
|
get(|| async move {
|
||||||
(
|
(
|
||||||
[(header::CONTENT_TYPE, "text/html; charset=utf-8")],
|
[(header::CONTENT_TYPE, "text/html; charset=utf-8")],
|
||||||
include_str!("assets/index.html"),
|
include_str!("assets/index.html").replace("%version-info%", &version_info),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user