Phase 1 (discovery): walkdir + filename-only metadata, zero archive I/O. Books are visible immediately in the UI while Phase 2 runs in background. Phase 2 (analysis): open each archive once via analyze_book() to extract page_count and first page bytes, then generate WebP thumbnail directly in the indexer — removing the HTTP roundtrip to the API checkup endpoint. - Add parse_metadata_fast() (infallible, no archive I/O) - Add analyze_book() returning (page_count, first_page_bytes) in one pass - Add looks_like_image() magic bytes check for unrar p stdout validation - Add lsar fallback in list_cbr_images() for UTF-16BE encoded filenames - Add directory_mtimes table to skip unchanged dirs on incremental scans - Add analyzer.rs: generate_thumbnail, analyze_library_books, regenerate_thumbnails - Remove run_checkup() from API; indexer handles thumbnail jobs directly - Remove api_base_url/api_bootstrap_token from IndexerConfig and AppState - Add unar + poppler-utils to indexer Dockerfile - Fix smoke.sh: wait for job completion, check thumbnail_url field Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
1.0 KiB
TOML
39 lines
1.0 KiB
TOML
[workspace]
|
|
members = [
|
|
"apps/api",
|
|
"apps/indexer",
|
|
"crates/core",
|
|
"crates/parsers",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
version = "0.1.0"
|
|
license = "MIT"
|
|
|
|
[workspace.dependencies]
|
|
anyhow = "1.0"
|
|
argon2 = "0.5"
|
|
axum = "0.7"
|
|
base64 = "0.22"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
|
lru = "0.12"
|
|
rayon = "1.10"
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
|
rand = "0.8"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
sha2 = "0.10"
|
|
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono"] }
|
|
tokio = { version = "1.43", features = ["macros", "rt-multi-thread", "signal"] }
|
|
tower = { version = "0.5", features = ["limit"] }
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
|
uuid = { version = "1.12", features = ["serde", "v4"] }
|
|
walkdir = "2.5"
|
|
webp = "0.3"
|
|
utoipa = "4.0"
|
|
utoipa-swagger-ui = "6.0"
|