From ef898dfb7667b6823903c61a53960c882f9fab6e Mon Sep 17 00:00:00 2001 From: uku Date: Wed, 21 May 2025 18:43:44 +0200 Subject: [PATCH] feat: shorten video url --- src/main.rs | 16 +++++++++++++--- src/zipline.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0a15dcb..2e7d6f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,15 +68,17 @@ enum Step { Converting, Uploading, Thumbnail, + Shortening, } impl Step { fn button_text(&self) -> &'static str { match self { Step::Waiting => "Send", - Step::Converting => "Converting...", + Step::Converting => "Converting video...", Step::Uploading => "Uploading...", Step::Thumbnail => "Generating thumbnail...", + Step::Shortening => "Shortening url...", } } } @@ -389,6 +391,8 @@ impl AsyncComponent for Tyrolienne { } } +// TODO check for ffmpeg +// TODO app icon fn main() -> Result<()> { tracing_subscriber::fmt() .with_env_filter(EnvFilter::from_default_env().add_directive(Level::INFO.into())) @@ -477,11 +481,17 @@ async fn the_process(app: UploadInfo, sender: &Sender) -> Resul .thumbnail_url(&app.config) .ok_or_eyre("could not get thumbnail url")?; - Ok(format!( + sender.emit(ProgressMessage::SetStep(Step::Shortening)); + + let full_url = format!( "https://autocompressor.net/av1?v={}&i={}&w={}&h={}", Encoded(&zp_file.url), Encoded(&thumbnail_url), video_meta.width, video_meta.height, - )) + ); + + let shortened_url = zipline::shorten_url(&app.config, &full_url).await?; + + Ok(shortened_url) } diff --git a/src/zipline.rs b/src/zipline.rs index a99d0a2..dc8b9fe 100644 --- a/src/zipline.rs +++ b/src/zipline.rs @@ -42,6 +42,11 @@ pub struct ZiplineThumbnail { pub path: String, } +#[derive(Debug, serde::Deserialize)] +pub struct ZiplineShortUrl { + url: String, +} + impl ZiplineFileInfo { pub fn thumbnail_url(&self, config: &Config) -> Option { self.thumbnail @@ -169,3 +174,32 @@ pub async fn get_file_details(config: &Config, id: &str) -> Result Result { + let url = format!("{}api/user/urls", config.fixed_url()); + + let body = serde_json::json!({ + "destination": to_shorten, + "enabled": true, + "vanity": null + }); + + let res = CLIENT + .post(url) + .json(&body) + .header(AUTHORIZATION, &config.zipline_token) + .send() + .await?; + + if res.status() != StatusCode::OK { + bail!( + "an error occurred ({}): {}", + res.status(), + res.text().await? + ); + } else { + let out: ZiplineShortUrl = res.json().await?; + + Ok(out.url) + } +}