use bleeding-edge eggbug for up-to-date attachment API
This commit is contained in:
parent
9c2b726faa
commit
11a315e059
37
Cargo.lock
generated
37
Cargo.lock
generated
|
@ -11,6 +11,12 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android-tzdata"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
@ -97,6 +103,17 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono"
|
||||||
|
version = "0.4.26"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
|
||||||
|
dependencies = [
|
||||||
|
"android-tzdata",
|
||||||
|
"num-traits",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clang-sys"
|
name = "clang-sys"
|
||||||
version = "1.6.1"
|
version = "1.6.1"
|
||||||
|
@ -201,11 +218,11 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eggbug"
|
name = "eggbug"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/iliana/eggbug-rs.git?branch=main#94fc2f652a842b0fadfff62750562630e887672a"
|
||||||
checksum = "077e6288b1613f96b53e63c78a05d969c13269d93bc3a4b4fa5374480899c2d5"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.13.1",
|
"base64 0.13.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
"chrono",
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"futures",
|
"futures",
|
||||||
"hmac",
|
"hmac",
|
||||||
|
@ -600,6 +617,12 @@ dependencies = [
|
||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "imagesize"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "1.9.3"
|
version = "1.9.3"
|
||||||
|
@ -796,6 +819,15 @@ dependencies = [
|
||||||
"minimal-lexical",
|
"minimal-lexical",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num_cpus"
|
name = "num_cpus"
|
||||||
version = "1.15.0"
|
version = "1.15.0"
|
||||||
|
@ -1105,6 +1137,7 @@ dependencies = [
|
||||||
"eggbug",
|
"eggbug",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"ffmpeg-next",
|
"ffmpeg-next",
|
||||||
|
"imagesize",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"rand",
|
"rand",
|
||||||
|
|
|
@ -7,9 +7,10 @@ license = "MIT"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
eggbug = "0.1.3"
|
eggbug = { git = "https://github.com/iliana/eggbug-rs.git", branch = "main" }
|
||||||
env_logger = "0.10"
|
env_logger = "0.10"
|
||||||
ffmpeg-next = "6.0.0"
|
ffmpeg-next = "6.0.0"
|
||||||
|
imagesize = "0.12.0"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
log = "0.4.19"
|
log = "0.4.19"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
|
|
33
src/main.rs
33
src/main.rs
|
@ -1,3 +1,6 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
use lazy_static::lazy_static;
|
||||||
use log::{debug, error, info};
|
use log::{debug, error, info};
|
||||||
use rand::{distributions::Standard, seq::IteratorRandom, Rng};
|
use rand::{distributions::Standard, seq::IteratorRandom, Rng};
|
||||||
|
|
||||||
|
@ -7,6 +10,10 @@ mod video;
|
||||||
|
|
||||||
use crate::shows::EpisodeNumber;
|
use crate::shows::EpisodeNumber;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref RETRY_INTERVAL: Duration = Duration::from_secs(30);
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
dotenvy::dotenv().ok();
|
dotenvy::dotenv().ok();
|
||||||
|
@ -31,6 +38,7 @@ async fn main() {
|
||||||
Ok(eps) => eps,
|
Ok(eps) => eps,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Failed to get episodes for {}: {}", title, e);
|
error!("Failed to get episodes for {}: {}", title, e);
|
||||||
|
tokio::time::sleep(*RETRY_INTERVAL).await;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -63,15 +71,31 @@ async fn main() {
|
||||||
let formatted_timestamp = format_timestamp(timestamp, Some(video_info.duration_secs));
|
let formatted_timestamp = format_timestamp(timestamp, Some(video_info.duration_secs));
|
||||||
info!("Taking screencap at {}", formatted_timestamp);
|
info!("Taking screencap at {}", formatted_timestamp);
|
||||||
|
|
||||||
|
let img_data =
|
||||||
match video::take_screencap(file, timestamp, video_info.subtitle_stream_index).await {
|
match video::take_screencap(file, timestamp, video_info.subtitle_stream_index).await {
|
||||||
|
Ok(data) => data,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Failed to take screencap: {}", e);
|
error!("Failed to take screencap: {}", e);
|
||||||
|
tokio::time::sleep(*RETRY_INTERVAL).await;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
Ok(img_data) => {
|
};
|
||||||
|
|
||||||
|
let img_size = match imagesize::blob_size(&img_data) {
|
||||||
|
Ok(size) => size,
|
||||||
|
Err(e) => {
|
||||||
|
error!("Failed to get image size: {}", e);
|
||||||
|
tokio::time::sleep(*RETRY_INTERVAL).await;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let attachment = eggbug::Attachment::new(
|
let attachment = eggbug::Attachment::new(
|
||||||
img_data,
|
img_data,
|
||||||
format!("{} @{}.png", descriptor, formatted_timestamp),
|
format!("{} @{}.png", descriptor, formatted_timestamp),
|
||||||
String::from("image/png"),
|
String::from("image/png"),
|
||||||
|
Some(img_size.width as u32),
|
||||||
|
Some(img_size.height as u32),
|
||||||
)
|
)
|
||||||
.with_alt_text(format!(
|
.with_alt_text(format!(
|
||||||
"Screencap of {} at {}",
|
"Screencap of {} at {}",
|
||||||
|
@ -92,13 +116,16 @@ async fn main() {
|
||||||
adult_content: false,
|
adult_content: false,
|
||||||
headline: String::new(),
|
headline: String::new(),
|
||||||
markdown: String::new(),
|
markdown: String::new(),
|
||||||
|
metadata: None,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(id) => info!("Created post {}", id),
|
Ok(id) => info!("Created post {}", id),
|
||||||
Err(e) => error!("Failed to create post: {}", e),
|
Err(e) => {
|
||||||
}
|
error!("Failed to create post: {}", e);
|
||||||
|
tokio::time::sleep(*RETRY_INTERVAL).await;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue