74
Cargo.lock
generated
@@ -2727,20 +2727,6 @@ dependencies = [
|
||||
"icu_properties",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.24.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"byteorder",
|
||||
"color_quant",
|
||||
"jpeg-decoder",
|
||||
"num-traits",
|
||||
"png 0.17.16",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.25.10"
|
||||
@@ -2755,7 +2741,7 @@ dependencies = [
|
||||
"image-webp",
|
||||
"moxcms",
|
||||
"num-traits",
|
||||
"png 0.18.1",
|
||||
"png",
|
||||
"qoi",
|
||||
"ravif 0.13.0",
|
||||
"rayon",
|
||||
@@ -2772,7 +2758,7 @@ dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"domain",
|
||||
"image 0.25.10",
|
||||
"image",
|
||||
"image-storage",
|
||||
"object_store",
|
||||
"ravif 0.11.20",
|
||||
@@ -2817,7 +2803,7 @@ dependencies = [
|
||||
"ab_glyph",
|
||||
"approx",
|
||||
"getrandom 0.2.17",
|
||||
"image 0.25.10",
|
||||
"image",
|
||||
"itertools 0.12.1",
|
||||
"nalgebra",
|
||||
"num",
|
||||
@@ -3019,12 +3005,6 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jpeg-decoder"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07"
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.99"
|
||||
@@ -4040,48 +4020,6 @@ dependencies = [
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "plotters"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"plotters-backend",
|
||||
"plotters-bitmap",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "plotters-backend"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
|
||||
|
||||
[[package]]
|
||||
name = "plotters-bitmap"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72ce181e3f6bf82d6c1dc569103ca7b1bd964c60ba03d7e6cdfbb3e3eb7f7405"
|
||||
dependencies = [
|
||||
"image 0.24.9",
|
||||
"plotters-backend",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.17.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"crc32fast",
|
||||
"fdeflate",
|
||||
"flate2",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.18.1"
|
||||
@@ -6947,7 +6885,7 @@ version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c071456adef4aca59bf6a583c46b90ff5eb0b4f758fc347cea81290288f37ce1"
|
||||
dependencies = [
|
||||
"image 0.25.10",
|
||||
"image",
|
||||
"libwebp-sys",
|
||||
]
|
||||
|
||||
@@ -7556,6 +7494,7 @@ dependencies = [
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"wrapup-renderer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -7565,9 +7504,8 @@ dependencies = [
|
||||
"ab_glyph",
|
||||
"async-trait",
|
||||
"domain",
|
||||
"image 0.25.10",
|
||||
"image",
|
||||
"imageproc",
|
||||
"plotters",
|
||||
"tempfile",
|
||||
"tokio",
|
||||
"tracing",
|
||||
|
||||
@@ -204,13 +204,12 @@ impl WrapUpRepository for PostgresWrapUpRepository {
|
||||
&self,
|
||||
before: chrono::NaiveDateTime,
|
||||
) -> Result<u64, DomainError> {
|
||||
let result = sqlx::query(
|
||||
"DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < $1",
|
||||
)
|
||||
.bind(before)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
.map_err(map_err)?;
|
||||
let result =
|
||||
sqlx::query("DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < $1")
|
||||
.bind(before)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
.map_err(map_err)?;
|
||||
Ok(result.rows_affected())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,13 +215,12 @@ impl WrapUpRepository for SqliteWrapUpRepository {
|
||||
before: chrono::NaiveDateTime,
|
||||
) -> Result<u64, DomainError> {
|
||||
let before_str = before.format("%Y-%m-%dT%H:%M:%SZ").to_string();
|
||||
let result = sqlx::query(
|
||||
"DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < ?",
|
||||
)
|
||||
.bind(&before_str)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
.map_err(map_err)?;
|
||||
let result =
|
||||
sqlx::query("DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < ?")
|
||||
.bind(&before_str)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
.map_err(map_err)?;
|
||||
Ok(result.rows_affected())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,12 @@ impl WrapUpVideoRenderer for FfmpegWrapUpRenderer {
|
||||
slide_pngs.push(renderer.render_hero(report, width, height)?);
|
||||
slide_pngs.push(renderer.render_ratings(report, width, height)?);
|
||||
if !report.top_directors.is_empty() {
|
||||
slide_pngs.push(renderer.render_directors(report, &assets.cast_images, width, height)?);
|
||||
slide_pngs.push(renderer.render_directors(
|
||||
report,
|
||||
&assets.cast_images,
|
||||
width,
|
||||
height,
|
||||
)?);
|
||||
}
|
||||
if !report.top_actors.is_empty() {
|
||||
slide_pngs.push(renderer.render_actors(report, &assets.cast_images, width, height)?);
|
||||
@@ -43,7 +48,12 @@ impl WrapUpVideoRenderer for FfmpegWrapUpRenderer {
|
||||
if !report.top_genres.is_empty() {
|
||||
slide_pngs.push(renderer.render_genres(report, width, height)?);
|
||||
}
|
||||
slide_pngs.push(renderer.render_highlights(report, &assets.poster_images, width, height)?);
|
||||
slide_pngs.push(renderer.render_highlights(
|
||||
report,
|
||||
&assets.poster_images,
|
||||
width,
|
||||
height,
|
||||
)?);
|
||||
if !assets.poster_images.is_empty() {
|
||||
slide_pngs.push(renderer.render_mosaic(&assets.poster_images, width, height)?);
|
||||
} else {
|
||||
|
||||
@@ -16,7 +16,11 @@ pub async fn execute(
|
||||
if let Ok(Some(rec)) = ctx.repos.wrapup_repo.get_by_id(&wrapup_id).await
|
||||
&& (rec.status == WrapUpStatus::Ready || rec.status == WrapUpStatus::Generating)
|
||||
{
|
||||
tracing::debug!("wrapup {} already {:?}, skipping", wrapup_id.value(), rec.status);
|
||||
tracing::debug!(
|
||||
"wrapup {} already {:?}, skipping",
|
||||
wrapup_id.value(),
|
||||
rec.status
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
||||
@@ -1218,10 +1218,7 @@ impl WrapUpRepository for PanicWrapUpRepository {
|
||||
async fn delete(&self, _: &WrapUpId) -> Result<(), DomainError> {
|
||||
panic!("PanicWrapUpRepository called")
|
||||
}
|
||||
async fn delete_failed_older_than(
|
||||
&self,
|
||||
_: chrono::NaiveDateTime,
|
||||
) -> Result<u64, DomainError> {
|
||||
async fn delete_failed_older_than(&self, _: chrono::NaiveDateTime) -> Result<u64, DomainError> {
|
||||
panic!("PanicWrapUpRepository called")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -632,10 +632,7 @@ impl domain::ports::WrapUpRepository for Panic {
|
||||
async fn delete(&self, _: &domain::value_objects::WrapUpId) -> Result<(), DomainError> {
|
||||
panic!()
|
||||
}
|
||||
async fn delete_failed_older_than(
|
||||
&self,
|
||||
_: chrono::NaiveDateTime,
|
||||
) -> Result<u64, DomainError> {
|
||||
async fn delete_failed_older_than(&self, _: chrono::NaiveDateTime) -> Result<u64, DomainError> {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,9 +106,14 @@ async fn main() -> anyhow::Result<()> {
|
||||
document_parser: Arc::new(ImporterDocumentParser) as Arc<dyn DocumentParser>,
|
||||
video_renderer: {
|
||||
let ffmpeg = &app_config.wrapup.ffmpeg_path;
|
||||
if std::process::Command::new(ffmpeg).arg("-version").output().is_ok() {
|
||||
if std::process::Command::new(ffmpeg)
|
||||
.arg("-version")
|
||||
.output()
|
||||
.is_ok()
|
||||
{
|
||||
tracing::info!("wrapup video renderer enabled (ffmpeg={ffmpeg})");
|
||||
Some(Arc::new(wrapup_renderer::FfmpegWrapUpRenderer::new()) as Arc<dyn domain::ports::WrapUpVideoRenderer>)
|
||||
Some(Arc::new(wrapup_renderer::FfmpegWrapUpRenderer::new())
|
||||
as Arc<dyn domain::ports::WrapUpVideoRenderer>)
|
||||
} else {
|
||||
tracing::info!("wrapup video renderer disabled (ffmpeg not found)");
|
||||
None
|
||||
|
||||
BIN
static/wrapups/bg1.jpg
Normal file
|
After Width: | Height: | Size: 381 KiB |
BIN
static/wrapups/bg10.jpg
Normal file
|
After Width: | Height: | Size: 291 KiB |
BIN
static/wrapups/bg2.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
static/wrapups/bg3.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
static/wrapups/bg4.jpg
Normal file
|
After Width: | Height: | Size: 776 KiB |
BIN
static/wrapups/bg5.jpg
Normal file
|
After Width: | Height: | Size: 132 KiB |
BIN
static/wrapups/bg6.jpg
Normal file
|
After Width: | Height: | Size: 6.8 MiB |
BIN
static/wrapups/bg8.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
static/wrapups/bg9.jpg
Normal file
|
After Width: | Height: | Size: 1022 KiB |