2025-10-12 21:39:20 +02:00
|
|
|
[package]
|
|
|
|
|
name = "pmocache"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
edition = "2021"
|
|
|
|
|
|
|
|
|
|
[dependencies]
|
|
|
|
|
# Base de données
|
2025-10-17 14:36:39 +02:00
|
|
|
rusqlite = { version = "0.37.0", features = ["bundled"] }
|
2025-10-12 21:39:20 +02:00
|
|
|
|
|
|
|
|
# HTTP client
|
2025-10-17 19:48:53 +02:00
|
|
|
reqwest = { version = "0.12", features = ["blocking", "stream"] }
|
|
|
|
|
futures-util = "0.3"
|
2025-10-12 21:39:20 +02:00
|
|
|
|
|
|
|
|
# Cryptographie
|
|
|
|
|
sha1 = "0.10"
|
2025-10-25 17:14:24 +02:00
|
|
|
sha2 = "0.10"
|
2025-10-12 21:39:20 +02:00
|
|
|
hex = "0.4"
|
|
|
|
|
|
|
|
|
|
# Utilitaires
|
|
|
|
|
anyhow = "1.0"
|
|
|
|
|
chrono = "0.4"
|
|
|
|
|
serde = { version = "1.0", features = ["derive"] }
|
2025-10-26 09:18:48 +01:00
|
|
|
serde_json = "1.0"
|
2025-10-19 17:26:06 +02:00
|
|
|
bytes = "1.6"
|
2025-10-27 12:32:31 +01:00
|
|
|
paste = "1.0"
|
2025-10-12 21:39:20 +02:00
|
|
|
|
|
|
|
|
# Async
|
|
|
|
|
tokio = { version = "1.0", features = ["full"] }
|
2025-10-19 17:26:06 +02:00
|
|
|
tokio-util = { version = "0.7", features = ["io"] }
|
2025-10-12 21:39:20 +02:00
|
|
|
|
2025-10-17 23:08:06 +02:00
|
|
|
# Logging
|
|
|
|
|
tracing = "0.1"
|
|
|
|
|
|
2025-10-12 21:39:20 +02:00
|
|
|
# Feature pour OpenAPI
|
|
|
|
|
utoipa = { version = "5.3", optional = true }
|
|
|
|
|
|
2025-10-17 14:36:39 +02:00
|
|
|
# Feature pour pmoserver (extension HTTP)
|
|
|
|
|
axum = { version = "0.8", optional = true }
|
|
|
|
|
|
2025-10-25 17:14:24 +02:00
|
|
|
# Feature pour pmoconfig (extension de configuration)
|
|
|
|
|
pmoconfig = { path = "../pmoconfig", optional = true }
|
|
|
|
|
serde_yaml = { version = "0.9", optional = true }
|
|
|
|
|
|
Revue de code complète et amélioration des trois crates de cache
## Corrections de bugs
- **CRITIQUE**: Correction du bug SQL dans `pmocache/src/db.rs:get_oldest()`
- La requête référençait des colonnes inexistantes (`source_url`, `metadata_json`)
- Corrigé pour utiliser les bonnes colonnes de la table `asset` (`id`)
## Refactoring et simplifications
- **Factorisation majeure** dans `pmocache/src/cache.rs`:
- Extraction de 3 méthodes helpers pour éliminer ~90 lignes de code dupliqué
entre `add_from_url()` et `add_from_reader()`:
- `check_cached_and_complete()`: vérification cache et intégrité
- `check_ongoing_download()`: gestion des téléchargements en cours
- `finalize_download()`: finalisation avec prébuffering et nettoyage
- Les deux méthodes sont maintenant beaucoup plus lisibles et maintenables
- **Simplification** de `enforce_limit()`:
- Utilisation de `get_file_paths()` au lieu d'itérations manuelles complexes
- Suppression des boucles imbriquées pour une logique plus claire
- **Correction** d'import manquant: ajout de `AsyncReadExt` dans `cache.rs`
## Tests complets ajoutés
### pmocache (27 tests)
- `tests/test_db.rs`: 24 tests couvrant toutes les opérations DB
- CRUD de base (add, get, delete, purge)
- Gestion des métadonnées (tous types JSON)
- Collections (get_by_collection, delete_collection)
- LRU et éviction (get_oldest, count)
- URLs d'origine (set_origin_url, get_origin_url)
- Indexation par (collection, id)
- `tests/test_cache.rs`: 16 tests d'intégration du cache
- Ajout depuis fichier, reader, URL
- Déduplication basée sur contenu
- Collections et gestion
- Éviction LRU automatique
- Purge et consolidation
- Métadonnées et touch
- Prébuffering et téléchargements
### pmoaudiocache (4 tests)
- `tests/test_cache.rs`: Tests spécifiques audio
- Création et configuration
- Collections d'albums
- Éviction LRU avec limite
### pmocovers (6 tests)
- `tests/test_cache.rs`: Tests de cache d'images
- Conversion WebP automatique
- Déduplication d'images identiques
- Gestion de collections
- Éviction LRU
- `tests/test_webp.rs`: Tests du module WebP
- Encodage WebP depuis différents formats
- Redimensionnement carré avec préservation du ratio
- Génération et mise en cache de variantes
- Tests avec différentes tailles (portrait, landscape, carré)
## Améliorations de la couverture
- Passage de **0 test** à **37 tests** au total
- Ajout de `tempfile = "3"` comme dev-dependency dans `pmocache/Cargo.toml`
- Couverture des cas nominaux et des cas limites
- Tests d'intégration et unitaires
## Préservation des APIs
- ✅ Aucune API publique n'a été modifiée ou cassée
- ✅ Toutes les fonctions helpers sont privées (non exposées)
- ✅ Les signatures publiques restent identiques
- ✅ Rétrocompatibilité totale garantie
2025-11-06 08:43:11 +00:00
|
|
|
[dev-dependencies]
|
|
|
|
|
tempfile = "3"
|
|
|
|
|
|
2025-10-12 21:39:20 +02:00
|
|
|
[features]
|
|
|
|
|
default = []
|
|
|
|
|
openapi = ["dep:utoipa"]
|
2025-10-19 17:26:06 +02:00
|
|
|
pmoserver = ["dep:axum"]
|
2025-10-25 17:14:24 +02:00
|
|
|
pmoconfig = ["dep:pmoconfig", "dep:serde_yaml"]
|