Files
pmomusic/pmocache/Cargo.toml

54 lines
1.1 KiB
TOML
Raw Normal View History

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
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 = { workspace = true }
async-trait = { workspace = true }
chrono = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
bytes = "1.6"
2025-10-27 12:32:31 +01:00
paste = "1.0"
2025-12-17 10:10:56 +01:00
pmoflac = { path = "../pmoflac" }
2025-10-12 21:39:20 +02:00
# Async
tokio = { workspace = true }
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 = { workspace = true }
2025-10-17 23:08:06 +02:00
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"]
pmoserver = ["dep:axum"]
2025-10-25 17:14:24 +02:00
pmoconfig = ["dep:pmoconfig", "dep:serde_yaml"]