aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/routes/mod.rs3
-rw-r--r--server/src/routes/ui/admin/mod.rs24
-rw-r--r--server/src/routes/ui/search.rs4
3 files changed, 28 insertions, 3 deletions
diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs
index 5fb9b26..b7d63da 100644
--- a/server/src/routes/mod.rs
+++ b/server/src/routes/mod.rs
@@ -32,7 +32,7 @@ use ui::{
admin::{
log::r_admin_log,
r_admin_dashboard, r_admin_delete_cache, r_admin_import, r_admin_invite,
- r_admin_remove_invite, r_admin_transcode_posters,
+ r_admin_remove_invite, r_admin_transcode_posters, r_admin_update_search,
user::{r_admin_remove_user, r_admin_user, r_admin_user_permission, r_admin_users},
},
assets::{r_asset, r_item_backdrop, r_item_poster, r_node_thumbnail, r_person_asset},
@@ -136,6 +136,7 @@ pub fn build_rocket(database: Database, federation: Federation) -> Rocket<Build>
r_admin_transcode_posters,
r_admin_log,
r_admin_import,
+ r_admin_update_search,
r_account_settings,
r_account_settings_post,
r_api_version,
diff --git a/server/src/routes/ui/admin/mod.rs b/server/src/routes/ui/admin/mod.rs
index 50faa2e..62a06bc 100644
--- a/server/src/routes/ui/admin/mod.rs
+++ b/server/src/routes/ui/admin/mod.rs
@@ -26,7 +26,7 @@ use markup::DynRender;
use rand::Rng;
use rocket::{form::Form, get, post, FromForm, State};
use std::time::Instant;
-use tokio::sync::Semaphore;
+use tokio::{sync::Semaphore, task::spawn_blocking};
use user::rocket_uri_macro_r_admin_users;
#[get("/admin/dashboard")]
@@ -85,6 +85,9 @@ pub async fn admin_dashboard<'a>(
form[method="POST", action=uri!(r_admin_transcode_posters())] {
input[type="submit", disabled=is_transcoding(), value="Transcode all posters with low resolution"];
}
+ form[method="POST", action=uri!(r_admin_update_search())] {
+ input[type="submit", value="Update full-text search index"];
+ }
form[method="POST", action=uri!(r_admin_delete_cache())] {
input.danger[type="submit", value="Delete Cache"];
}
@@ -163,6 +166,25 @@ pub async fn r_admin_import(
admin_dashboard(database, Some(flash)).await
}
+#[post("/admin/update_search")]
+pub async fn r_admin_update_search(
+ _session: AdminSession,
+ database: &State<Database>,
+) -> MyResult<DynLayoutPage<'static>> {
+ let db2 = (*database).clone();
+ let r = spawn_blocking(move || db2.search_create_index())
+ .await
+ .unwrap();
+ admin_dashboard(
+ &database,
+ Some(
+ r.map_err(|e| e.into())
+ .map(|_| format!("Search index updated")),
+ ),
+ )
+ .await
+}
+
#[post("/admin/delete_cache")]
pub async fn r_admin_delete_cache(
session: AdminSession,
diff --git a/server/src/routes/ui/search.rs b/server/src/routes/ui/search.rs
index ac37b80..6b1504f 100644
--- a/server/src/routes/ui/search.rs
+++ b/server/src/routes/ui/search.rs
@@ -5,6 +5,7 @@ use super::{
node::{DatabaseNodeUserDataExt, NodeCard},
};
use jellybase::database::Database;
+use jellycommon::Visibility;
use rocket::{get, State};
use std::time::Instant;
@@ -18,10 +19,11 @@ pub async fn r_search<'a>(
let timing = Instant::now();
let results = if let Some(query) = query {
let (count, ids) = db.search(query, page.unwrap_or_default())?;
- let nodes = ids
+ let mut nodes = ids
.into_iter()
.map(|id| db.get_node_with_userdata(id, &session))
.collect::<Result<Vec<_>, anyhow::Error>>()?;
+ nodes.retain(|(n, _)| n.visibility >= Visibility::Reduced);
Some((count, nodes))
} else {
None