From 64586721b98f704b14c2ba4b0fda005027068c44 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 06:26:27 +0000 Subject: [PATCH] Simplify pk calculation to work for all file types Simplified the FLAC pk collision fix to work uniformly for all files: - Always read up to 1024 bytes (or whatever is available) - Use at most the last 512 bytes for pk calculation This approach works correctly for: - Small files (< 512 bytes, e.g., tiny images): uses all content - Medium files (512-1024 bytes): uses bytes after 512 - Large files (>= 1024 bytes, e.g., FLAC): uses bytes 512-1024 No special detection needed - the algorithm adapts automatically. Fixes potential issues with small images in pmocovers cache. --- pmocache/src/cache.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pmocache/src/cache.rs b/pmocache/src/cache.rs index 4aae6c2a..938eb165 100755 --- a/pmocache/src/cache.rs +++ b/pmocache/src/cache.rs @@ -387,22 +387,22 @@ impl Cache { where R: AsyncRead + Send + Unpin + 'static, { - // 1. Lire les premiers octets pour calculer le pk - // Pour éviter les collisions entre fichiers FLAC au même format, on skip le header (512 octets) - // et on utilise les octets 512-1024 (début du contenu audio) pour calculer le pk - let buffer_size = if explicit_pk.is_none() { 1024 } else { 512 }; - let header = crate::download::peek_reader_header(&mut reader, buffer_size) + // 1. Lire jusqu'à 1024 octets (ou ce qui est disponible) + let header = crate::download::peek_reader_header(&mut reader, 1024) .await .map_err(|e| anyhow!("Failed to peek reader header: {}", e))?; - // 2. Calculer le pk: si pas de pk explicite, utiliser octets 512-1024 au lieu de 0-512 + // 2. Calculer le pk en utilisant au plus les 512 derniers octets + // Ceci évite les collisions pour les fichiers avec headers identiques (ex: FLAC) + // tout en fonctionnant pour les petits fichiers (images < 512 octets) let pk = if let Some(explicit) = explicit_pk { explicit } else { - // Skip les 512 premiers octets (header FLAC) et utiliser les 512 suivants let pk_bytes = if header.len() > 512 { + // Fichier >= 512 octets: utiliser les octets 512+ (au plus 512 octets) &header[512..] } else { + // Petit fichier < 512 octets: utiliser tout le contenu &header[..] }; crate::cache_trait::pk_from_content_header(pk_bytes)