74
Cargo.lock
generated
@@ -2727,20 +2727,6 @@ dependencies = [
|
|||||||
"icu_properties",
|
"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]]
|
[[package]]
|
||||||
name = "image"
|
name = "image"
|
||||||
version = "0.25.10"
|
version = "0.25.10"
|
||||||
@@ -2755,7 +2741,7 @@ dependencies = [
|
|||||||
"image-webp",
|
"image-webp",
|
||||||
"moxcms",
|
"moxcms",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"png 0.18.1",
|
"png",
|
||||||
"qoi",
|
"qoi",
|
||||||
"ravif 0.13.0",
|
"ravif 0.13.0",
|
||||||
"rayon",
|
"rayon",
|
||||||
@@ -2772,7 +2758,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"domain",
|
"domain",
|
||||||
"image 0.25.10",
|
"image",
|
||||||
"image-storage",
|
"image-storage",
|
||||||
"object_store",
|
"object_store",
|
||||||
"ravif 0.11.20",
|
"ravif 0.11.20",
|
||||||
@@ -2817,7 +2803,7 @@ dependencies = [
|
|||||||
"ab_glyph",
|
"ab_glyph",
|
||||||
"approx",
|
"approx",
|
||||||
"getrandom 0.2.17",
|
"getrandom 0.2.17",
|
||||||
"image 0.25.10",
|
"image",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"nalgebra",
|
"nalgebra",
|
||||||
"num",
|
"num",
|
||||||
@@ -3019,12 +3005,6 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "jpeg-decoder"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.99"
|
version = "0.3.99"
|
||||||
@@ -4040,48 +4020,6 @@ dependencies = [
|
|||||||
"serde_json",
|
"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]]
|
[[package]]
|
||||||
name = "png"
|
name = "png"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
@@ -6947,7 +6885,7 @@ version = "0.3.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c071456adef4aca59bf6a583c46b90ff5eb0b4f758fc347cea81290288f37ce1"
|
checksum = "c071456adef4aca59bf6a583c46b90ff5eb0b4f758fc347cea81290288f37ce1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"image 0.25.10",
|
"image",
|
||||||
"libwebp-sys",
|
"libwebp-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -7556,6 +7494,7 @@ dependencies = [
|
|||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
|
"wrapup-renderer",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -7565,9 +7504,8 @@ dependencies = [
|
|||||||
"ab_glyph",
|
"ab_glyph",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"domain",
|
"domain",
|
||||||
"image 0.25.10",
|
"image",
|
||||||
"imageproc",
|
"imageproc",
|
||||||
"plotters",
|
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|||||||
@@ -204,9 +204,8 @@ impl WrapUpRepository for PostgresWrapUpRepository {
|
|||||||
&self,
|
&self,
|
||||||
before: chrono::NaiveDateTime,
|
before: chrono::NaiveDateTime,
|
||||||
) -> Result<u64, DomainError> {
|
) -> Result<u64, DomainError> {
|
||||||
let result = sqlx::query(
|
let result =
|
||||||
"DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < $1",
|
sqlx::query("DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < $1")
|
||||||
)
|
|
||||||
.bind(before)
|
.bind(before)
|
||||||
.execute(&self.pool)
|
.execute(&self.pool)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -215,9 +215,8 @@ impl WrapUpRepository for SqliteWrapUpRepository {
|
|||||||
before: chrono::NaiveDateTime,
|
before: chrono::NaiveDateTime,
|
||||||
) -> Result<u64, DomainError> {
|
) -> Result<u64, DomainError> {
|
||||||
let before_str = before.format("%Y-%m-%dT%H:%M:%SZ").to_string();
|
let before_str = before.format("%Y-%m-%dT%H:%M:%SZ").to_string();
|
||||||
let result = sqlx::query(
|
let result =
|
||||||
"DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < ?",
|
sqlx::query("DELETE FROM wrap_up_records WHERE status = 'failed' AND created_at < ?")
|
||||||
)
|
|
||||||
.bind(&before_str)
|
.bind(&before_str)
|
||||||
.execute(&self.pool)
|
.execute(&self.pool)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -35,7 +35,12 @@ impl WrapUpVideoRenderer for FfmpegWrapUpRenderer {
|
|||||||
slide_pngs.push(renderer.render_hero(report, width, height)?);
|
slide_pngs.push(renderer.render_hero(report, width, height)?);
|
||||||
slide_pngs.push(renderer.render_ratings(report, width, height)?);
|
slide_pngs.push(renderer.render_ratings(report, width, height)?);
|
||||||
if !report.top_directors.is_empty() {
|
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() {
|
if !report.top_actors.is_empty() {
|
||||||
slide_pngs.push(renderer.render_actors(report, &assets.cast_images, width, height)?);
|
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() {
|
if !report.top_genres.is_empty() {
|
||||||
slide_pngs.push(renderer.render_genres(report, width, height)?);
|
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() {
|
if !assets.poster_images.is_empty() {
|
||||||
slide_pngs.push(renderer.render_mosaic(&assets.poster_images, width, height)?);
|
slide_pngs.push(renderer.render_mosaic(&assets.poster_images, width, height)?);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -16,7 +16,11 @@ pub async fn execute(
|
|||||||
if let Ok(Some(rec)) = ctx.repos.wrapup_repo.get_by_id(&wrapup_id).await
|
if let Ok(Some(rec)) = ctx.repos.wrapup_repo.get_by_id(&wrapup_id).await
|
||||||
&& (rec.status == WrapUpStatus::Ready || rec.status == WrapUpStatus::Generating)
|
&& (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(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1218,10 +1218,7 @@ impl WrapUpRepository for PanicWrapUpRepository {
|
|||||||
async fn delete(&self, _: &WrapUpId) -> Result<(), DomainError> {
|
async fn delete(&self, _: &WrapUpId) -> Result<(), DomainError> {
|
||||||
panic!("PanicWrapUpRepository called")
|
panic!("PanicWrapUpRepository called")
|
||||||
}
|
}
|
||||||
async fn delete_failed_older_than(
|
async fn delete_failed_older_than(&self, _: chrono::NaiveDateTime) -> Result<u64, DomainError> {
|
||||||
&self,
|
|
||||||
_: chrono::NaiveDateTime,
|
|
||||||
) -> Result<u64, DomainError> {
|
|
||||||
panic!("PanicWrapUpRepository called")
|
panic!("PanicWrapUpRepository called")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -632,10 +632,7 @@ impl domain::ports::WrapUpRepository for Panic {
|
|||||||
async fn delete(&self, _: &domain::value_objects::WrapUpId) -> Result<(), DomainError> {
|
async fn delete(&self, _: &domain::value_objects::WrapUpId) -> Result<(), DomainError> {
|
||||||
panic!()
|
panic!()
|
||||||
}
|
}
|
||||||
async fn delete_failed_older_than(
|
async fn delete_failed_older_than(&self, _: chrono::NaiveDateTime) -> Result<u64, DomainError> {
|
||||||
&self,
|
|
||||||
_: chrono::NaiveDateTime,
|
|
||||||
) -> Result<u64, DomainError> {
|
|
||||||
panic!()
|
panic!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,9 +106,14 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
document_parser: Arc::new(ImporterDocumentParser) as Arc<dyn DocumentParser>,
|
document_parser: Arc::new(ImporterDocumentParser) as Arc<dyn DocumentParser>,
|
||||||
video_renderer: {
|
video_renderer: {
|
||||||
let ffmpeg = &app_config.wrapup.ffmpeg_path;
|
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})");
|
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 {
|
} else {
|
||||||
tracing::info!("wrapup video renderer disabled (ffmpeg not found)");
|
tracing::info!("wrapup video renderer disabled (ffmpeg not found)");
|
||||||
None
|
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 |