/* 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) 2025 metamuffin */ use crate::{stream_info, SMediaInfo}; use anyhow::{anyhow, Result}; use jellystream_types::{SegmentNum, TrackNum}; use std::sync::Arc; use tokio::io::{AsyncWriteExt, DuplexStream}; pub async fn fragment_index_stream( mut b: DuplexStream, info: Arc, _segment: SegmentNum, track: TrackNum, ) -> Result<()> { let (iinfo, _info) = stream_info(info).await?; let (file_index, track_num) = *iinfo .track_to_file .get(track) .ok_or(anyhow!("track not found"))?; let fragments = tokio::task::spawn_blocking(move || { jellyremuxer::fragment::fragment_index(&iinfo.paths[file_index], track_num) }) .await??; let out = serde_json::to_string(&fragments)?; tokio::spawn(async move { b.write_all(out.as_bytes()).await }); Ok(()) }