/// <summary> /// Calcul des sommes md5 et update de la fenetre de progression /// </summary> /// <param name="images"></param> /// <returns></returns> public async Task Calculate_MD5(ExtImageDetails[] images, int retardateur) { ITrace.Indent++; ExtImageDetails[] extImages = new ExtImageDetails[images.Length]; int i = 1; foreach (ExtImageDetails image in images) { ITrace.WriteLine($"[Md5] {image.ImageType} | {image.Region}"); ITrace.WriteLine($"[Md5] {image.FilePath}"); //extImages[i].Md5Sum = image.Md5Sum = await GetMD5HashFromFile(image.FilePath); // Pour permettre un affichage lisible retarde le calcul await Task.Delay(retardateur); ITrace.WriteLine($"[Md5] Somme: {image.Md5Sum} \n"); CurrentFile?.Invoke(image.FilePath); CurrentPosition?.Invoke(i); i++; } ITrace.Indent--; }
/// <summary> /// Scanne une liste en fonction d'une référence /// </summary> /// <remarks>Enlève le premier élement qui est la référence pour réduire la liste</remarks> /// <remarks>Enlève le doublon trouvé</remarks> /// <remarks>Positionne le booléan doublon à true si occurence trouvée pour que la liste de référence passe par la suite</remarks> /// <param name="imRef"></param> /// <param name="extImages"></param> /// <returns></returns> private List <ExtImageDetails> GetDuplicates(ExtImageDetails imRef, List <ExtImageDetails> extImages) { List <ExtImageDetails> similaire = new List <ExtImageDetails>(); similaire.Add(imRef); // On ajoute en référence extImages.RemoveAt(0); // On lève le premier élement qui est en cours d'exam; ITrace.Indent++; ITrace.WriteLine($"[GetDuplicates] Recherche de similitudes pour '{imRef.FilePath}', {imRef.Md5Sum}, {imRef.doublon} dans tableau de taille {extImages.Count}"); for (int i = 0; i < extImages.Count; i++) { ExtImageDetails image = extImages[i]; ITrace.WriteLine($"Examen de element { i}, {image.FilePath}"); // Passer sur les images déjà repérées // if (image.doublon) continue; try { if (image.Md5Sum.Equals(imRef.Md5Sum)) { extImages[i].doublon = true; extImages.RemoveAt(i); similaire.Add(image); ITrace.WriteLine($"[GetDuplicates] similitude '{image.FilePath}', {image.Md5Sum} ajoutée"); i--; } } catch (Exception exc) { ITrace.WriteLine($"[GetDuplicates] Erreur {exc}"); } } ITrace.WriteLine($"[GetDuplicates] Nombre d'occurence(s) trouvée(s): {similaire.Count}"); ITrace.Indent--; if (similaire.Count <= 1) { return(null); } return(similaire); }