mirror of
https://github.com/v0l/route96.git
synced 2025-06-16 16:28:49 +00:00
fix: build variants
This commit is contained in:
@ -24,7 +24,7 @@ required-features = ["r96util"]
|
|||||||
name = "route96"
|
name = "route96"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["nip96", "blossom", "analytics", "ranges", "react-ui", "r96util"]
|
default = ["nip96", "blossom", "analytics", "react-ui", "r96util"]
|
||||||
media-compression = ["dep:ffmpeg-rs-raw", "dep:libc"]
|
media-compression = ["dep:ffmpeg-rs-raw", "dep:libc"]
|
||||||
labels = ["nip96", "dep:candle-core", "dep:candle-nn", "dep:candle-transformers"]
|
labels = ["nip96", "dep:candle-core", "dep:candle-nn", "dep:candle-transformers"]
|
||||||
nip96 = ["media-compression"]
|
nip96 = ["media-compression"]
|
||||||
@ -34,7 +34,6 @@ bin-void-cat-force-migrate = ["dep:regex", "dep:nostr-cursor"]
|
|||||||
torrent-v2 = []
|
torrent-v2 = []
|
||||||
analytics = []
|
analytics = []
|
||||||
void-cat-redirects = ["dep:sqlx-postgres"]
|
void-cat-redirects = ["dep:sqlx-postgres"]
|
||||||
ranges = ["dep:http-range-header"]
|
|
||||||
react-ui = []
|
react-ui = []
|
||||||
r96util = ["dep:walkdir", "dep:indicatif"]
|
r96util = ["dep:walkdir", "dep:indicatif"]
|
||||||
|
|
||||||
@ -58,6 +57,7 @@ reqwest = { version = "0.12.8", features = ["stream"] }
|
|||||||
clap = { version = "4.5.18", features = ["derive"] }
|
clap = { version = "4.5.18", features = ["derive"] }
|
||||||
mime2ext = "0.1.53"
|
mime2ext = "0.1.53"
|
||||||
infer = "0.16.0"
|
infer = "0.16.0"
|
||||||
|
http-range-header = { version = "0.4.2" }
|
||||||
tokio-util = { version = "0.7.13", features = ["io", "io-util"] }
|
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-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 }
|
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"] }
|
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 }
|
nostr-cursor = { git = "https://git.v0l.io/Kieran/nostr-backup-util.git", branch = "main", optional = true }
|
||||||
regex = { version = "1.11.1", optional = true }
|
regex = { version = "1.11.1", optional = true }
|
||||||
walkdir = { version = "2.5.0", optional = true }
|
walkdir = { version = "2.5.0", optional = true }
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use crate::db::Database;
|
use crate::db::Database;
|
||||||
use crate::filesystem::FileStore;
|
use crate::filesystem::FileStore;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use log::info;
|
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
|
|
||||||
#[cfg(feature = "media-compression")]
|
#[cfg(feature = "media-compression")]
|
||||||
@ -13,10 +12,10 @@ pub fn start_background_tasks(db: Database, file_store: FileStore) -> Vec<JoinHa
|
|||||||
#[cfg(feature = "media-compression")]
|
#[cfg(feature = "media-compression")]
|
||||||
{
|
{
|
||||||
ret.push(tokio::spawn(async move {
|
ret.push(tokio::spawn(async move {
|
||||||
info!("Starting MediaMetadata background task");
|
log::info!("Starting MediaMetadata background task");
|
||||||
let mut m = media_metadata::MediaMetadata::new(db.clone(), file_store.clone());
|
let mut m = media_metadata::MediaMetadata::new(db.clone(), file_store.clone());
|
||||||
m.process().await?;
|
m.process().await?;
|
||||||
info!("MediaMetadata background task completed");
|
log::info!("MediaMetadata background task completed");
|
||||||
Ok(())
|
Ok(())
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ async fn main() -> Result<(), Error> {
|
|||||||
if std::env::var("RUST_LOG").is_err() {
|
if std::env::var("RUST_LOG").is_err() {
|
||||||
std::env::set_var("RUST_LOG", "info");
|
std::env::set_var("RUST_LOG", "info");
|
||||||
}
|
}
|
||||||
pretty_env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
let args: Args = Args::parse();
|
let args: Args = Args::parse();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ struct ProgramArgs {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), anyhow::Error> {
|
async fn main() -> Result<(), anyhow::Error> {
|
||||||
pretty_env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
let args: ProgramArgs = ProgramArgs::parse();
|
let args: ProgramArgs = ProgramArgs::parse();
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ struct Args {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Error> {
|
async fn main() -> Result<(), Error> {
|
||||||
pretty_env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
let builder = Config::builder()
|
let builder = Config::builder()
|
||||||
.add_source(config::File::with_name("config.yaml"))
|
.add_source(config::File::with_name("config.yaml"))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#[cfg(feature = "labels")]
|
#[cfg(feature = "labels")]
|
||||||
use crate::db::FileLabel;
|
use crate::db::FileLabel;
|
||||||
use crate::processing::can_compress;
|
|
||||||
#[cfg(feature = "labels")]
|
#[cfg(feature = "labels")]
|
||||||
use crate::processing::labeling::label_frame;
|
use crate::processing::labeling::label_frame;
|
||||||
#[cfg(feature = "media-compression")]
|
#[cfg(feature = "media-compression")]
|
||||||
@ -78,7 +78,7 @@ impl FileStore {
|
|||||||
return Ok(FileSystemResult::AlreadyExists(hash));
|
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")]
|
#[cfg(feature = "media-compression")]
|
||||||
{
|
{
|
||||||
let res = match self.compress_file(&temp_file, mime_type).await {
|
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<NewFileResult> {
|
#[cfg(feature = "media-compression")]
|
||||||
|
async fn compress_file(&self, input: &Path, mime_type: &str) -> Result<NewFileResult> {
|
||||||
let compressed_result = compress_file(input, mime_type, &self.temp_dir())?;
|
let compressed_result = compress_file(input, mime_type, &self.temp_dir())?;
|
||||||
#[cfg(feature = "labels")]
|
#[cfg(feature = "labels")]
|
||||||
let labels = if let Some(mp) = &self.settings.vit_model {
|
let labels = if let Some(mp) = &self.settings.vit_model {
|
||||||
|
@ -12,3 +12,7 @@ pub mod settings;
|
|||||||
#[cfg(any(feature = "void-cat-redirects", feature = "bin-void-cat-migrate"))]
|
#[cfg(any(feature = "void-cat-redirects", feature = "bin-void-cat-migrate"))]
|
||||||
pub mod void_db;
|
pub mod void_db;
|
||||||
pub mod void_file;
|
pub mod void_file;
|
||||||
|
|
||||||
|
pub fn can_compress(mime_type: &str) -> bool {
|
||||||
|
mime_type.starts_with("image/")
|
||||||
|
}
|
@ -136,16 +136,12 @@ pub struct NewFileProcessorResult {
|
|||||||
pub bitrate: u32,
|
pub bitrate: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn can_compress(mime_type: &str) -> bool {
|
|
||||||
mime_type.starts_with("image/")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn compress_file(
|
pub fn compress_file(
|
||||||
path: &Path,
|
path: &Path,
|
||||||
mime_type: &str,
|
mime_type: &str,
|
||||||
out_dir: &Path,
|
out_dir: &Path,
|
||||||
) -> Result<NewFileProcessorResult, Error> {
|
) -> Result<NewFileProcessorResult, Error> {
|
||||||
if !can_compress(mime_type) {
|
if !crate::can_compress(mime_type) {
|
||||||
bail!("MIME type not supported");
|
bail!("MIME type not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,8 +219,6 @@ impl<'r> Responder<'r, 'static> for FilePayload {
|
|||||||
response.set_header(Header::new("cache-control", "max-age=31536000, immutable"));
|
response.set_header(Header::new("cache-control", "max-age=31536000, immutable"));
|
||||||
|
|
||||||
// handle ranges
|
// handle ranges
|
||||||
#[cfg(feature = "ranges")]
|
|
||||||
{
|
|
||||||
// only use range response for files > 1MiB
|
// only use range response for files > 1MiB
|
||||||
if self.info.size < MAX_UNBOUNDED_RANGE {
|
if self.info.size < MAX_UNBOUNDED_RANGE {
|
||||||
response.set_sized_body(None, self.file);
|
response.set_sized_body(None, self.file);
|
||||||
@ -229,9 +227,7 @@ impl<'r> Responder<'r, 'static> for FilePayload {
|
|||||||
if let Some(r) = request.headers().get("range").next() {
|
if let Some(r) = request.headers().get("range").next() {
|
||||||
if let Ok(ranges) = parse_range_header(r) {
|
if let Ok(ranges) = parse_range_header(r) {
|
||||||
if ranges.ranges.len() > 1 {
|
if ranges.ranges.len() > 1 {
|
||||||
warn!(
|
warn!("Multipart ranges are not supported, fallback to non-range request");
|
||||||
"Multipart ranges are not supported, fallback to non-range request"
|
|
||||||
);
|
|
||||||
response.set_streamed_body(self.file);
|
response.set_streamed_body(self.file);
|
||||||
} else {
|
} else {
|
||||||
let single_range = ranges.ranges.first().unwrap();
|
let single_range = ranges.ranges.first().unwrap();
|
||||||
@ -250,11 +246,6 @@ impl<'r> Responder<'r, 'static> for FilePayload {
|
|||||||
response.set_sized_body(None, self.file);
|
response.set_sized_body(None, self.file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#[cfg(not(feature = "ranges"))]
|
|
||||||
{
|
|
||||||
response.set_sized_body(None, self.file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Ok(ct) = ContentType::from_str(&self.info.mime_type) {
|
if let Ok(ct) = ContentType::from_str(&self.info.mime_type) {
|
||||||
response.set_header(ct);
|
response.set_header(ct);
|
||||||
|
Reference in New Issue
Block a user