diff --git a/src/modes/server/api/item.rs b/src/modes/server/api/item.rs index 3b0cc59..babca28 100644 --- a/src/modes/server/api/item.rs +++ b/src/modes/server/api/item.rs @@ -6,6 +6,7 @@ use axum::{ }; use log::warn; use std::collections::HashMap; +use bytes::Bytes; use crate::services::async_item_service::AsyncItemService; use crate::services::error::CoreError; @@ -240,13 +241,14 @@ async fn stream_item_content( buffered_file.seek(std::io::SeekFrom::Start(offset)).await?; } + // Create a reader stream with optional length limit // Create a reader stream with optional length limit let stream = if length > 0 { // Limit the stream to the specified length - ReaderStream::new(buffered_file.take(length)) + Box::pin(ReaderStream::new(buffered_file.take(length))) as std::pin::Pin> + Send>> } else { // Stream the entire file from the offset - ReaderStream::new(buffered_file) + Box::pin(ReaderStream::new(buffered_file)) as std::pin::Pin> + Send>> }; Ok((stream, mime_type)) diff --git a/src/services/async_item_service.rs b/src/services/async_item_service.rs index 4daa2a5..78fb187 100644 --- a/src/services/async_item_service.rs +++ b/src/services/async_item_service.rs @@ -2,6 +2,7 @@ use crate::services::error::CoreError; use crate::services::item_service::ItemService; use crate::services::types::{ItemWithContent, ItemWithMeta}; use crate::common::is_binary::is_binary; +use bytes::Bytes; use rusqlite::Connection; use std::collections::HashMap; use std::path::PathBuf; @@ -15,7 +16,7 @@ use tokio_util::io::ReaderStream; /// on a dedicated thread pool, preventing them from blocking the async runtime. #[allow(dead_code)] pub struct AsyncItemService { - data_path: PathBuf, + pub data_dir: PathBuf, db: Arc>, } @@ -90,13 +91,14 @@ impl AsyncItemService { buffered_file.seek(std::io::SeekFrom::Start(offset)).await?; } + // Create a reader stream with optional length limit // Create a reader stream with optional length limit let stream = if length > 0 { // Limit the stream to the specified length - ReaderStream::new(buffered_file.take(length)) + Box::pin(ReaderStream::new(buffered_file.take(length))) as std::pin::Pin> + Send>> } else { // Stream the entire file from the offset - ReaderStream::new(buffered_file) + Box::pin(ReaderStream::new(buffered_file)) as std::pin::Pin> + Send>> }; Ok((stream, mime_type))