Finish search
This commit is contained in:
parent
aa5505d693
commit
ab1e31c0e7
@ -143,7 +143,7 @@ fn search(web::Query(info): web::Query<SearchRequest>) -> Vec<SearchMod> {
|
|||||||
if filters.is_empty() {
|
if filters.is_empty() {
|
||||||
filters = v;
|
filters = v;
|
||||||
} else {
|
} else {
|
||||||
filters = format!("({}) AND {}", filters, v);
|
filters = format!("({}) AND ({})", filters, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,26 +181,16 @@ pub async fn index_mods() -> Result<(), Box<dyn Error>>{
|
|||||||
|
|
||||||
info!("Indexing curseforge mods!");
|
info!("Indexing curseforge mods!");
|
||||||
|
|
||||||
let mut indexing_complete = false;
|
let res = reqwest::Client::new().post("https://addons-ecs.forgesvc.net/api/v2/addon")
|
||||||
let mut current_mod_id = 0;
|
.header(reqwest::header::CONTENT_TYPE, "application/json")
|
||||||
let mut consecutive_returns = 0;
|
.body(format!("{:?}", (1..400000).collect::<Vec<_>>()))
|
||||||
|
.send().await?;
|
||||||
|
|
||||||
while !(consecutive_returns > 1000 && current_mod_id > 300000) {
|
let text = &res.text().await?;
|
||||||
current_mod_id += 1;
|
let mut curseforge_mods : Vec<CurseForgeMod> = serde_json::from_str(text)?;
|
||||||
info!("Requesting mod with id {} from CurseForge!", current_mod_id);
|
|
||||||
|
|
||||||
let body = reqwest::get(&format!("https://addons-ecs.forgesvc.net/api/v2/addon/{}", current_mod_id))
|
for curseforge_mod in curseforge_mods {
|
||||||
.await?.text().await?;
|
if curseforge_mod.game_slug != "minecraft" || !curseforge_mod.website_url.contains("/mc-mods/") { continue; }
|
||||||
|
|
||||||
if body.is_empty() {
|
|
||||||
consecutive_returns += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let curseforge_mod : CurseForgeMod = serde_json::from_str(&body)?;
|
|
||||||
consecutive_returns == 0;
|
|
||||||
|
|
||||||
if curseforge_mod.game_slug != "minecraft" { continue; }
|
|
||||||
|
|
||||||
let mut mod_game_versions = vec![];
|
let mut mod_game_versions = vec![];
|
||||||
|
|
||||||
@ -298,7 +288,7 @@ pub async fn index_mods() -> Result<(), Box<dyn Error>>{
|
|||||||
};
|
};
|
||||||
|
|
||||||
docs_to_add.push(SearchMod {
|
docs_to_add.push(SearchMod {
|
||||||
mod_id: curseforge_mod.id,
|
mod_id: -curseforge_mod.id,
|
||||||
author: (&curseforge_mod.authors[0].name).to_string(),
|
author: (&curseforge_mod.authors[0].name).to_string(),
|
||||||
title: curseforge_mod.name,
|
title: curseforge_mod.name,
|
||||||
description: curseforge_mod.summary,
|
description: curseforge_mod.summary,
|
||||||
@ -314,7 +304,7 @@ pub async fn index_mods() -> Result<(), Box<dyn Error>>{
|
|||||||
updated: curseforge_mod.date_modified.chars().filter(|c| c.is_ascii_digit()).collect::<String>().parse()?,
|
updated: curseforge_mod.date_modified.chars().filter(|c| c.is_ascii_digit()).collect::<String>().parse()?,
|
||||||
latest_version,
|
latest_version,
|
||||||
empty: String::from("{}{}{}"),
|
empty: String::from("{}{}{}"),
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//Write Indexes
|
//Write Indexes
|
||||||
|
|||||||
@ -22,6 +22,7 @@ let selectedType = "relevance";
|
|||||||
let resultContainer = document.getElementById("results");
|
let resultContainer = document.getElementById("results");
|
||||||
|
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
|
//Add category ghosts
|
||||||
let categories = document.getElementsByClassName("category-badge");
|
let categories = document.getElementsByClassName("category-badge");
|
||||||
|
|
||||||
for (let category of categories) {
|
for (let category of categories) {
|
||||||
@ -32,6 +33,38 @@ window.onload = function () {
|
|||||||
category.appendChild(ghost);
|
category.appendChild(ghost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Set Initial Values based on URL
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
|
||||||
|
if(urlParams.has("q"))
|
||||||
|
document.getElementById("search-input").value = decodeURIComponent(urlParams.get("q"));
|
||||||
|
|
||||||
|
if(urlParams.has("f")) {
|
||||||
|
let value = decodeURIComponent(urlParams.get("f"));
|
||||||
|
|
||||||
|
for (let key in category_inputs) {
|
||||||
|
if (category_inputs.hasOwnProperty(key)) {
|
||||||
|
if(value.includes(key)) {
|
||||||
|
activateCategory(document.getElementById(key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(urlParams.has("s")) {
|
||||||
|
let value = decodeURIComponent(urlParams.get("s"));
|
||||||
|
|
||||||
|
selectedType = value;
|
||||||
|
document.getElementById("filters").value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
let urlVersions = "";
|
||||||
|
|
||||||
|
if(urlParams.has("v"))
|
||||||
|
urlVersions = urlParams.get("v");
|
||||||
|
|
||||||
|
// Set Version categories from Mojang Launcher Meta
|
||||||
|
|
||||||
let releases = document.getElementById("releases");
|
let releases = document.getElementById("releases");
|
||||||
let snapshots = document.getElementById("snapshots");
|
let snapshots = document.getElementById("snapshots");
|
||||||
let archaic = document.getElementById("archaic");
|
let archaic = document.getElementById("archaic");
|
||||||
@ -59,6 +92,9 @@ window.onload = function () {
|
|||||||
archaic.appendChild(versionElement)
|
archaic.appendChild(versionElement)
|
||||||
else
|
else
|
||||||
versionElement.outerHTML = "";
|
versionElement.outerHTML = "";
|
||||||
|
|
||||||
|
if(urlVersions.includes(version.id))
|
||||||
|
activateVersion(versionElement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,9 +102,6 @@ window.onload = function () {
|
|||||||
xmlHttp.open("GET", "https://launchermeta.mojang.com/mc/game/version_manifest.json", true);
|
xmlHttp.open("GET", "https://launchermeta.mojang.com/mc/game/version_manifest.json", true);
|
||||||
xmlHttp.send(null);
|
xmlHttp.send(null);
|
||||||
|
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearFilters() {
|
function clearFilters() {
|
||||||
@ -150,7 +183,6 @@ function activateVersion(element) {
|
|||||||
|
|
||||||
function changeSortType(element) {
|
function changeSortType(element) {
|
||||||
selectedType = element.options[element.selectedIndex].value;
|
selectedType = element.options[element.selectedIndex].value;
|
||||||
console.log(selectedType)
|
|
||||||
|
|
||||||
handleSearch(0);
|
handleSearch(0);
|
||||||
}
|
}
|
||||||
@ -162,7 +194,6 @@ let currentlyLoadingExtra = false;
|
|||||||
let currentOffset = 0;
|
let currentOffset = 0;
|
||||||
|
|
||||||
function loadExtra() {
|
function loadExtra() {
|
||||||
console.log(body.scrollTop)
|
|
||||||
if (body.scrollTop > 400) {
|
if (body.scrollTop > 400) {
|
||||||
backToTop.style.display = "block";
|
backToTop.style.display = "block";
|
||||||
} else {
|
} else {
|
||||||
@ -208,12 +239,10 @@ function handleSearch(index) {
|
|||||||
queryString += "&f=" + encodeURIComponent( "keywords=" + filterString).replace(/%20/g,'+');
|
queryString += "&f=" + encodeURIComponent( "keywords=" + filterString).replace(/%20/g,'+');
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let key in version_inputs) {
|
for (let key in version_inputs)
|
||||||
if (version_inputs.hasOwnProperty(key)) {
|
if (version_inputs.hasOwnProperty(key))
|
||||||
if(version_inputs[key])
|
if(version_inputs[key])
|
||||||
versionString += key + " OR versions=";
|
versionString += key + " OR versions=";
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let versionTakeOffLength = " OR versions=".length;
|
let versionTakeOffLength = " OR versions=".length;
|
||||||
|
|
||||||
@ -222,17 +251,27 @@ function handleSearch(index) {
|
|||||||
queryString += "&v=" + encodeURIComponent( "versions=" + versionString).replace(/%20/g,'+');
|
queryString += "&v=" + encodeURIComponent( "versions=" + versionString).replace(/%20/g,'+');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(selectedType) {
|
if(selectedType)
|
||||||
queryString += "&s=" + encodeURIComponent(selectedType).replace(/%20/g,'+');
|
queryString += "&s=" + encodeURIComponent(selectedType).replace(/%20/g,'+');
|
||||||
}
|
|
||||||
|
|
||||||
if(index === 0)
|
|
||||||
window.history.pushState('Search', 'Search', queryString);
|
if(!queryString.includes("?"))
|
||||||
|
queryString = queryString.replace("&", "?")
|
||||||
|
|
||||||
|
if(index === 0) {
|
||||||
|
let viewString = queryString;
|
||||||
|
|
||||||
|
viewString = viewString.replace("?q={}{}{}", "");
|
||||||
|
viewString = viewString.replace("&s=relevance", "");
|
||||||
|
|
||||||
|
if(!viewString.includes("?"))
|
||||||
|
viewString = viewString.replace("&", "?")
|
||||||
|
|
||||||
|
window.history.pushState('Search', 'Search', viewString);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
queryString += "&o=" + index;
|
queryString += "&o=" + index;
|
||||||
|
|
||||||
console.log(queryString);
|
|
||||||
|
|
||||||
let xmlHttp = new XMLHttpRequest();
|
let xmlHttp = new XMLHttpRequest();
|
||||||
|
|
||||||
xmlHttp.onreadystatechange = function() {
|
xmlHttp.onreadystatechange = function() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user