aboutsummaryrefslogtreecommitdiff
path: root/server/src/compat
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-02-10 01:11:36 +0100
committermetamuffin <metamuffin@disroot.org>2026-02-10 01:11:36 +0100
commitf035474090d3c82f50c3860cbafd6f60b8af36e8 (patch)
treead05b9df5770bee3c1f020870911f7744977422d /server/src/compat
parent7754a042ed80c7d8e2391925a8a6ae87a7610c8e (diff)
downloadjellything-f035474090d3c82f50c3860cbafd6f60b8af36e8.tar
jellything-f035474090d3c82f50c3860cbafd6f60b8af36e8.tar.bz2
jellything-f035474090d3c82f50c3860cbafd6f60b8af36e8.tar.zst
fix index key ser; query debug print
Diffstat (limited to 'server/src/compat')
-rw-r--r--server/src/compat/youtube.rs36
1 files changed, 27 insertions, 9 deletions
diff --git a/server/src/compat/youtube.rs b/server/src/compat/youtube.rs
index e511d9b..2ed0406 100644
--- a/server/src/compat/youtube.rs
+++ b/server/src/compat/youtube.rs
@@ -4,19 +4,37 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
use crate::{request_info::RequestInfo, ui::error::MyResult};
+use anyhow::anyhow;
+use jellycommon::{
+ IDENT_YOUTUBE_VIDEO, NO_IDENTIFIERS, NO_SLUG, jellyobject::Path, routes::u_node_id,
+};
+use jellydb::{Filter, Query, Sort};
use rocket::{get, response::Redirect};
#[get("/watch?<v>")]
pub fn r_youtube_watch(ri: RequestInfo<'_>, v: &str) -> MyResult<Redirect> {
- // if v.len() != 11 {
- // Err(anyhow!("video id length incorrect"))?
- // }
- // let Some(id) = get_node_by_eid(&session.0, IdentifierType::YoutubeVideo, v)? else {
- // Err(anyhow!("element not found"))?
- // };
- // let slug = node_id_to_slug(&session.0, id)?;
- // Ok(Redirect::to(u_node_slug_player(&slug)))
- todo!()
+ if v.len() != 11 {
+ Err(anyhow!("video id length incorrect"))?
+ }
+ let mut res = None;
+ ri.state.database.transaction(&mut |txn| {
+ if let Some(row) = txn.query_single(Query {
+ filter: Filter::Match(
+ Path(vec![NO_IDENTIFIERS.0, IDENT_YOUTUBE_VIDEO.0]),
+ v.as_bytes().to_vec(),
+ ),
+ sort: Sort::None,
+ })? {
+ res = txn.get(row)?;
+ }
+ Ok(())
+ })?;
+ let node = res.ok_or(anyhow!("video not found"))?;
+ let slug = node
+ .as_object()
+ .get(NO_SLUG)
+ .ok_or(anyhow!("node has no slug"))?;
+ Ok(Redirect::found(u_node_id(slug)))
}
#[get("/channel/<id>")]