Ejemplo n.º 1
0
        /// <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--;
        }
Ejemplo n.º 2
0
        /// <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);
        }