diff options
-rw-r--r-- | base/src/lib.rs | 1 | ||||
-rw-r--r-- | base/src/temp.rs | 26 | ||||
-rw-r--r-- | transcoder/src/lib.rs | 1 | ||||
-rw-r--r-- | transcoder/src/snippet.rs | 30 |
4 files changed, 58 insertions, 0 deletions
diff --git a/base/src/lib.rs b/base/src/lib.rs index c8b767d..062b028 100644 --- a/base/src/lib.rs +++ b/base/src/lib.rs @@ -6,6 +6,7 @@ #![feature(lazy_cell)] pub mod cache; pub mod permission; +pub mod temp; use jellycommon::{config::GlobalConfig, AssetLocation}; use std::{fs::File, path::PathBuf, sync::LazyLock}; diff --git a/base/src/temp.rs b/base/src/temp.rs new file mode 100644 index 0000000..90ee6a8 --- /dev/null +++ b/base/src/temp.rs @@ -0,0 +1,26 @@ +use anyhow::Context; +use jellycommon::AssetLocation; +use std::{fs::File, sync::atomic::AtomicUsize}; + +use crate::AssetLocationExt; + +static TEMP_COUNTER: AtomicUsize = AtomicUsize::new(0); + +pub struct TempFile(pub AssetLocation); + +impl TempFile { + pub fn new(generate: impl FnOnce(File) -> anyhow::Result<()>) -> anyhow::Result<Self> { + let i = TEMP_COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + let loc = AssetLocation::Temp(format!("jellything-temp-{i}").into()); + + let file = File::create(loc.path()).context("creating temp file")?; + generate(file).context("tempfile generation")?; + + Ok(Self(loc)) + } +} +impl Drop for TempFile { + fn drop(&mut self) { + std::fs::remove_file(self.0.path()).expect("cant unlink tempfile") + } +} diff --git a/transcoder/src/lib.rs b/transcoder/src/lib.rs index 010a7dd..167303d 100644 --- a/transcoder/src/lib.rs +++ b/transcoder/src/lib.rs @@ -5,3 +5,4 @@ */ #![feature(async_closure)] pub mod image; +pub mod snippet; diff --git a/transcoder/src/snippet.rs b/transcoder/src/snippet.rs new file mode 100644 index 0000000..c7033d8 --- /dev/null +++ b/transcoder/src/snippet.rs @@ -0,0 +1,30 @@ +/* + 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) 2023 metamuffin <metamuffin.org> +*/ + +use jellybase::{cache::async_cache_file, AssetLocationExt}; +use jellycommon::AssetLocation; + +pub async fn transcode( + asset: AssetLocation, + quality: f32, + speed: u8, + width: usize, +) -> anyhow::Result<AssetLocation> { + let original_path = asset.path(); + let asset = asset.clone(); + Ok(async_cache_file( + &[ + "snip-tc", + original_path.as_os_str().to_str().unwrap(), + &format!("{width} {quality} {speed}"), + ], + move |output| async move { + + Ok(()) + }, + ) + .await?) +} |