From f035474090d3c82f50c3860cbafd6f60b8af36e8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 10 Feb 2026 01:11:36 +0100 Subject: fix index key ser; query debug print --- server/src/compat/youtube.rs | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'server/src/compat') 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 */ 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?")] pub fn r_youtube_watch(ri: RequestInfo<'_>, v: &str) -> MyResult { - // 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/")] -- cgit v1.3