feat: shorten video url

This commit is contained in:
uku 2025-05-21 18:43:44 +02:00
parent 5aaf02f062
commit ef898dfb76
Signed by: uku
SSH key fingerprint: SHA256:4P0aN6M8ajKukNi6aPOaX0LacanGYtlfjmN+m/sHY/o
2 changed files with 47 additions and 3 deletions

View file

@ -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<ProgressMessage>) -> 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)
}

View file

@ -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<String> {
self.thumbnail
@ -169,3 +174,32 @@ pub async fn get_file_details(config: &Config, id: &str) -> Result<ZiplineFileIn
res.json().await.map_err(Into::into)
}
}
pub async fn shorten_url(config: &Config, to_shorten: &str) -> Result<String> {
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)
}
}