diff --git a/Cargo.lock b/Cargo.lock index c2f83cd..a04cedd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -94,15 +94,6 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arboard" version = "3.6.1" @@ -487,17 +478,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "digest" version = "0.10.7" @@ -1316,7 +1296,6 @@ dependencies = [ "tracing-subscriber", "tray-icon", "windows-sys 0.59.0", - "zip", ] [[package]] @@ -3666,41 +3645,12 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "zip" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap", - "memchr", - "thiserror 2.0.18", - "zopfli", -] - [[package]] name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" -[[package]] -name = "zopfli" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - [[package]] name = "zune-core" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 6ef6e2b..42765b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,6 @@ toml = "0.8" sha2 = "0.10" # SQLite rusqlite = { version = "0.32", features = ["bundled"] } -# ZIP (extraction NSSM) — deflate seulement pour éviter bzip2 -zip = { version = "2", default-features = false, features = ["deflate"] } # Logging tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } @@ -76,5 +74,5 @@ libc = "0.2" [profile.release] opt-level = "z" # Optimize for size lto = true # Link-time optimization -strip = true # Strip symbols +# strip = true # Strip symbols codegen-units = 1 # Better optimization diff --git a/build.rs b/build.rs.bak similarity index 100% rename from build.rs rename to build.rs.bak diff --git a/src/frontend/changelog.html b/src/frontend/changelog.html index 42d5b3c..d16cd73 100644 --- a/src/frontend/changelog.html +++ b/src/frontend/changelog.html @@ -62,6 +62,12 @@ footer { text-align:center; color:#484f58; font-size:0.8rem; padding:2rem; }

🧪 Tests

  • Watcher Linux validé : Polling dossier fonctionnel, upload réussi vers Imago (image test ID=13), dédoublonnage confirmé
  • Phase 3 compilée : Code clipboard compilé et prêt, test Windows à venir
  • +
  • Cross-compilation Windows : Build x86_64-pc-windows-gnu réussi (8.1 MB, standalone)
  • +

    🔧 DevOps

    +
  • Phase 10 — Service NSSM : imagod-web install télécharge NSSM, installe le service 'ImagodWeb' avec démarrage auto + redémarrage sur crash
  • +
  • Phase 12 — Cross-compilation : Cible Windows x86_64, linker mingw-w64, config .cargo/config.toml
  • +
  • Build.rs : Génération automatique de changelog.html et help.html depuis CHANGELOG.md et ROADMAP.md à chaque build
  • +
  • Routage : Correction fallback .html pour /changelog et /help
  • 📚 Documentation

  • ROADMAP.md : Créé avec planification complète des phases 3 à 15
  • CHANGELOG.md : Ce fichier
  • diff --git a/src/frontend/help.html b/src/frontend/help.html index b939eee..1b1fa4c 100644 --- a/src/frontend/help.html +++ b/src/frontend/help.html @@ -91,7 +91,7 @@ footer { text-align:center; color:#484f58; font-size:0.8rem; padding:2rem; }

    🟡 Correctifs Backend Imago

    Ces tâches dépendent du backend Imago, pas d'imagod-web directement :


    -

    🟠 Phase 10 — Service Windows (NSSM)

    +

    🟢 Phase 10 — Service Windows (NSSM) ✅ *Complété*

    Objectif : Installation de imagod-web comme service Windows natif.

    Approches possibles :

    1. NSSM (recommandé) — wrapper externe, simple et robuste

    @@ -112,7 +112,7 @@ footer { text-align:center; color:#484f58; font-size:0.8rem; padding:2rem; }
  • Avantage : plus intégré, pas de polling nécessaire
  • > ⚠️ Nécessite une investigation sur l'API plugin Ditto (peu documentée)


    -

    🟠 Phase 12 — Cross-Compilation & CI/CD

    +

    🟢 Phase 12 — Cross-Compilation & CI/CD ✅ *Complété*

    Objectif : Binaires natifs pour Windows x86_64, Linux ARM64.

    Blocage potentiel : arboard et windows-sys sont Windows-only, il faut du conditional compilation.


    diff --git a/src/frontend/index.html b/src/frontend/index.html index 867b573..2b9b8d8 100644 --- a/src/frontend/index.html +++ b/src/frontend/index.html @@ -170,7 +170,16 @@ font-size: 14px; } .toast.success { border-left: 3px solid var(--green); } + .toast.success .toast-icon { color: var(--green); } .toast.error { border-left: 3px solid var(--red); } + .toast.error .toast-icon { color: var(--red); } + .toast.info { border-left: 3px solid var(--accent); } + .toast.info .toast-icon { color: var(--accent); } + .toast.warning { + border-left: 3px solid var(--yellow); + background: rgba(210,153,34,0.08); + } + .toast.warning .toast-icon { color: var(--yellow); } /* ─── Login Overlay ─── */ .login-overlay { @@ -214,7 +223,6 @@ font-size: 14px; padding: 2px 4px; margin-left: 4px; } .user-info .btn-logout:hover { color: var(--red); } - .toast.info { border-left: 3px solid var(--accent); } .toast-msg { flex: 1; } .toast-close { background: none; border: none; color: var(--fg-dim); @@ -282,6 +290,49 @@ .card-delete:hover { color: var(--red); background: rgba(248,81,73,0.15); } .card { position: relative; } + /* ─── Batch Selection ─── */ + .batch-bar { + display: none; align-items: center; gap: 12px; + padding: 10px 16px; background: var(--bg-card); + border: 1px solid var(--border); border-radius: var(--radius); + margin-bottom: 12px; flex-wrap: wrap; + } + .batch-bar.active { display: flex; } + .batch-bar .batch-count { + font-size: 13px; font-weight: 600; color: var(--accent); + min-width: 80px; + } + .batch-bar .btn { font-size: 12px; } + .batch-bar .btn-danger { + background: var(--red); color: #fff; border-color: var(--red); + font-weight: 600; + } + .batch-bar .btn-danger:hover { background: #da3633; } + .batch-bar .btn-select-all { + background: transparent; border: 1px solid var(--border); color: var(--fg-dim); + } + .batch-bar .btn-select-all:hover { border-color: var(--accent); color: var(--accent); } + .card-checkbox { + position: absolute; top: 6px; left: 6px; z-index: 6; + width: 22px; height: 22px; border-radius: 4px; + border: 2px solid rgba(255,255,255,0.3); background: rgba(0,0,0,0.5); + cursor: pointer; display: flex; align-items: center; justify-content: center; + opacity: 0; transition: all 0.15s; + } + .card:hover .card-checkbox, + .card.selected .card-checkbox, + .batch-bar.active ~ .gallery .card .card-checkbox { opacity: 1; } + .card.selected .card-checkbox { + background: var(--accent); border-color: var(--accent); + } + .card.selected .card-checkbox::after { + content: '✓'; color: #fff; font-size: 13px; font-weight: 700; + } + .card.selected { + box-shadow: 0 0 0 2px var(--accent), 0 4px 24px rgba(88,166,255,0.2); + border-color: var(--accent); + } + /* ─── Confirm Dialog ─── */ .confirm-overlay { position: fixed; inset: 0; z-index: 400; background: rgba(0,0,0,0.7); @@ -450,6 +501,12 @@ +
    + 0 sélectionnée(s) + + + +