diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-10 01:11:36 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-10 01:11:36 +0100 |
| commit | f035474090d3c82f50c3860cbafd6f60b8af36e8 (patch) | |
| tree | ad05b9df5770bee3c1f020870911f7744977422d /server/src/compat | |
| parent | 7754a042ed80c7d8e2391925a8a6ae87a7610c8e (diff) | |
| download | jellything-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.rs | 36 |
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>")] |