diff --git a/src/modes/get.rs b/src/modes/get.rs index 760882a..ba897a5 100644 --- a/src/modes/get.rs +++ b/src/modes/get.rs @@ -54,7 +54,7 @@ pub fn mode_get( } // Use streaming approach to handle large files - let mut reader = item_service.compression_service.stream_item_content( + let mut reader = item_service.get_compression_service().stream_item_content( data_path.join(item_id.to_string()), &item_with_meta.item.compression )?; @@ -69,7 +69,7 @@ pub fn mode_get( )); } // We need to create a new reader since we consumed some bytes - reader = item_service.compression_service.stream_item_content( + reader = item_service.get_compression_service().stream_item_content( data_path.join(item_id.to_string()), &item_with_meta.item.compression )?; diff --git a/src/services/async_item_service.rs b/src/services/async_item_service.rs index f2e7a66..c62e29e 100644 --- a/src/services/async_item_service.rs +++ b/src/services/async_item_service.rs @@ -177,10 +177,10 @@ impl AsyncItemService { let item_with_meta = item_service.get_item(&conn, item_id)?; let item_id_val = item_with_meta.item.id.ok_or_else(|| CoreError::InvalidInput("Item missing ID".to_string()))?; - let mut item_path = item_service.data_path.clone(); + let mut item_path = item_service.get_data_path().clone(); item_path.push(item_id_val.to_string()); - let reader = item_service.compression_service.stream_item_content( + let reader = item_service.get_compression_service().stream_item_content( item_path, &item_with_meta.item.compression )?; diff --git a/src/services/compression_service.rs b/src/services/compression_service.rs index ddfa328..3a31b3e 100644 --- a/src/services/compression_service.rs +++ b/src/services/compression_service.rs @@ -37,7 +37,7 @@ impl CompressionService { let reader = engine.open(item_path.clone()) .map_err(|e| CoreError::Other(anyhow!("Failed to open item file {:?}: {}", item_path, e)))?; - Ok(reader) + Ok(Box::new(reader)) } } diff --git a/src/services/item_service.rs b/src/services/item_service.rs index 15c5cd6..336f3b4 100644 --- a/src/services/item_service.rs +++ b/src/services/item_service.rs @@ -100,7 +100,7 @@ impl ItemService { let mut item_path = self.data_path.clone(); item_path.push(item_id.to_string()); - let reader = self.compression_service.stream_item_content(item_path, &item_with_meta.item.compression)?; + let reader = self.compression_service.stream_item_content(item_path.clone(), &item_with_meta.item.compression)?; let metadata = item_with_meta.meta_as_map(); let mime_type = metadata @@ -114,7 +114,7 @@ impl ItemService { } else { // Read only the first 8192 bytes for binary detection let mut sample_reader = self.compression_service.stream_item_content( - item_path.clone(), + item_path, &item_with_meta.item.compression )?; let mut sample_buffer = vec![0; 8192]; @@ -376,4 +376,12 @@ impl ItemService { self.get_item(conn, item_id) } + + pub fn get_compression_service(&self) -> &CompressionService { + &self.compression_service + } + + pub fn get_data_path(&self) -> &PathBuf { + &self.data_path + } }