/* 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) 2023 metamuffin */ use anyhow::{anyhow, Result}; use jellybase::{permission::PermissionSetExt, CONF}; use jellycommon::{ jhls::JhlsTrackIndex, stream::StreamSpec, user::{PermissionSet, UserPermission}, LocalTrack, Node, }; use tokio::io::{AsyncWriteExt, DuplexStream}; pub async fn jhls_index( node: Node, local_tracks: &[LocalTrack], _spec: StreamSpec, mut b: DuplexStream, perms: &PermissionSet, ) -> Result<()> { let local_track = local_tracks .get(0) .ok_or(anyhow!("track missing"))? .to_owned(); let segments = tokio::task::spawn_blocking(move || { jellyremuxer::snippet::snippet_index(&CONF.library_path, &node.public, &local_track) }) .await??; let out = serde_json::to_string(&JhlsTrackIndex { extra_profiles: if perms.check(&UserPermission::Transcode) { CONF.transcoding_profiles.clone() } else { vec![] }, segments, })?; tokio::spawn(async move { b.write_all(out.as_bytes()).await }); Ok(()) }