diff --git a/Cargo.toml b/Cargo.toml index 012fa0f..929c678 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ required-features = ["r96util"] name = "route96" [features] -default = ["nip96", "blossom", "analytics", "ranges", "react-ui", "r96util"] +default = ["nip96", "blossom", "analytics", "react-ui", "r96util"] media-compression = ["dep:ffmpeg-rs-raw", "dep:libc"] labels = ["nip96", "dep:candle-core", "dep:candle-nn", "dep:candle-transformers"] nip96 = ["media-compression"] @@ -34,7 +34,6 @@ bin-void-cat-force-migrate = ["dep:regex", "dep:nostr-cursor"] torrent-v2 = [] analytics = [] void-cat-redirects = ["dep:sqlx-postgres"] -ranges = ["dep:http-range-header"] react-ui = [] r96util = ["dep:walkdir", "dep:indicatif"] @@ -58,6 +57,7 @@ reqwest = { version = "0.12.8", features = ["stream"] } clap = { version = "4.5.18", features = ["derive"] } mime2ext = "0.1.53" infer = "0.16.0" +http-range-header = { version = "0.4.2" } tokio-util = { version = "0.7.13", features = ["io", "io-util"] } @@ -67,7 +67,7 @@ candle-core = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1" candle-nn = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1", optional = true } candle-transformers = { git = "https://git.v0l.io/huggingface/candle.git", tag = "0.8.1", optional = true } sqlx-postgres = { version = "0.8.2", optional = true, features = ["chrono", "uuid"] } -http-range-header = { version = "0.4.2", optional = true } + nostr-cursor = { git = "https://git.v0l.io/Kieran/nostr-backup-util.git", branch = "main", optional = true } regex = { version = "1.11.1", optional = true } walkdir = { version = "2.5.0", optional = true } diff --git a/src/background/mod.rs b/src/background/mod.rs index 39dbbef..86bca46 100644 --- a/src/background/mod.rs +++ b/src/background/mod.rs @@ -1,7 +1,6 @@ use crate::db::Database; use crate::filesystem::FileStore; use anyhow::Result; -use log::info; use tokio::task::JoinHandle; #[cfg(feature = "media-compression")] @@ -13,10 +12,10 @@ pub fn start_background_tasks(db: Database, file_store: FileStore) -> Vec Result<(), Error> { if std::env::var("RUST_LOG").is_err() { std::env::set_var("RUST_LOG", "info"); } - pretty_env_logger::init(); + env_logger::init(); let args: Args = Args::parse(); diff --git a/src/bin/void_cat_forced_migrate.rs b/src/bin/void_cat_forced_migrate.rs index 4d2ec2e..86ab37a 100644 --- a/src/bin/void_cat_forced_migrate.rs +++ b/src/bin/void_cat_forced_migrate.rs @@ -24,7 +24,7 @@ struct ProgramArgs { #[tokio::main] async fn main() -> Result<(), anyhow::Error> { - pretty_env_logger::init(); + env_logger::init(); let args: ProgramArgs = ProgramArgs::parse(); diff --git a/src/bin/void_cat_migrate.rs b/src/bin/void_cat_migrate.rs index a468e0b..a8146aa 100644 --- a/src/bin/void_cat_migrate.rs +++ b/src/bin/void_cat_migrate.rs @@ -34,7 +34,7 @@ struct Args { #[tokio::main] async fn main() -> Result<(), Error> { - pretty_env_logger::init(); + env_logger::init(); let builder = Config::builder() .add_source(config::File::with_name("config.yaml")) diff --git a/src/filesystem.rs b/src/filesystem.rs index 9e91876..72e67a3 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -1,6 +1,6 @@ #[cfg(feature = "labels")] use crate::db::FileLabel; -use crate::processing::can_compress; + #[cfg(feature = "labels")] use crate::processing::labeling::label_frame; #[cfg(feature = "media-compression")] @@ -78,7 +78,7 @@ impl FileStore { return Ok(FileSystemResult::AlreadyExists(hash)); } - let mut res = if compress && can_compress(mime_type) { + let mut res = if compress && crate::can_compress(mime_type) { #[cfg(feature = "media-compression")] { let res = match self.compress_file(&temp_file, mime_type).await { @@ -180,7 +180,8 @@ impl FileStore { } } - async fn compress_file(&self, input: &PathBuf, mime_type: &str) -> Result { + #[cfg(feature = "media-compression")] + async fn compress_file(&self, input: &Path, mime_type: &str) -> Result { let compressed_result = compress_file(input, mime_type, &self.temp_dir())?; #[cfg(feature = "labels")] let labels = if let Some(mp) = &self.settings.vit_model { diff --git a/src/lib.rs b/src/lib.rs index 0423c35..7318136 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,3 +12,7 @@ pub mod settings; #[cfg(any(feature = "void-cat-redirects", feature = "bin-void-cat-migrate"))] pub mod void_db; pub mod void_file; + +pub fn can_compress(mime_type: &str) -> bool { + mime_type.starts_with("image/") +} \ No newline at end of file diff --git a/src/processing/mod.rs b/src/processing/mod.rs index e9f320b..52ac279 100644 --- a/src/processing/mod.rs +++ b/src/processing/mod.rs @@ -136,16 +136,12 @@ pub struct NewFileProcessorResult { pub bitrate: u32, } -pub fn can_compress(mime_type: &str) -> bool { - mime_type.starts_with("image/") -} - pub fn compress_file( path: &Path, mime_type: &str, out_dir: &Path, ) -> Result { - if !can_compress(mime_type) { + if !crate::can_compress(mime_type) { bail!("MIME type not supported"); } diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 8e4fc37..f0cf377 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -219,41 +219,32 @@ impl<'r> Responder<'r, 'static> for FilePayload { response.set_header(Header::new("cache-control", "max-age=31536000, immutable")); // handle ranges - #[cfg(feature = "ranges")] - { - // only use range response for files > 1MiB - if self.info.size < MAX_UNBOUNDED_RANGE { - response.set_sized_body(None, self.file); - } else { - response.set_header(Header::new("accept-ranges", "bytes")); - if let Some(r) = request.headers().get("range").next() { - if let Ok(ranges) = parse_range_header(r) { - if ranges.ranges.len() > 1 { - warn!( - "Multipart ranges are not supported, fallback to non-range request" - ); - response.set_streamed_body(self.file); - } else { - let single_range = ranges.ranges.first().unwrap(); - let range = RangeBody::get_range(self.info.size, single_range); - let r_body = RangeBody::new(self.file, self.info.size, range.clone()); - - response.set_status(Status::PartialContent); - let headers = r_body.get_headers(); - for h in headers { - response.set_header(h); - } - response.set_streamed_body(Box::pin(r_body)); - } - } - } else { - response.set_sized_body(None, self.file); - } - } - } - #[cfg(not(feature = "ranges"))] - { + // only use range response for files > 1MiB + if self.info.size < MAX_UNBOUNDED_RANGE { response.set_sized_body(None, self.file); + } else { + response.set_header(Header::new("accept-ranges", "bytes")); + if let Some(r) = request.headers().get("range").next() { + if let Ok(ranges) = parse_range_header(r) { + if ranges.ranges.len() > 1 { + warn!("Multipart ranges are not supported, fallback to non-range request"); + response.set_streamed_body(self.file); + } else { + let single_range = ranges.ranges.first().unwrap(); + let range = RangeBody::get_range(self.info.size, single_range); + let r_body = RangeBody::new(self.file, self.info.size, range.clone()); + + response.set_status(Status::PartialContent); + let headers = r_body.get_headers(); + for h in headers { + response.set_header(h); + } + response.set_streamed_body(Box::pin(r_body)); + } + } + } else { + response.set_sized_body(None, self.file); + } } if let Ok(ct) = ContentType::from_str(&self.info.mime_type) {