/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2026 metamuffin */ use error::MyResult; use rocket::{futures::FutureExt, get}; use std::{future::Future, pin::Pin, sync::Arc}; use tokio::{fs::File, io::AsyncRead}; use crate::State; pub mod account; // pub mod admin; pub mod assets; pub mod error; pub mod home; // pub mod items; pub mod node; // pub mod player; // pub mod search; // pub mod stats; pub mod style; // #[get("/")] // pub async fn r_index( // lang: AcceptLanguage, // sess: Option>, // ) -> MyResult>> { // let AcceptLanguage(lang) = lang; // if sess.is_some() { // Ok(Either::Left(Redirect::temporary(rocket::uri!(r_home())))) // } else { // let front = read_to_string(CONF.asset_path.join("front.htm")).await?; // Ok(Either::Right(RawHtml(render_page( // &CustomPage { // title: "Jellything".to_string(), // body: front, // }, // RenderInfo { // importing: false, // session: None, // lang, // }, // )))) // } // } #[get("/favicon.ico")] pub async fn r_favicon(s: &rocket::State>) -> MyResult { Ok(File::open(s.config.asset_path.join("favicon.ico")).await?) } pub struct Defer(Pin + Send>>); impl AsyncRead for Defer { fn poll_read( mut self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>, buf: &mut tokio::io::ReadBuf<'_>, ) -> std::task::Poll> { match self.0.poll_unpin(cx) { std::task::Poll::Ready(r) => { buf.put_slice(r.as_bytes()); std::task::Poll::Ready(Ok(())) } std::task::Poll::Pending => std::task::Poll::Pending, } } }