public void DeleteFileEntries(HashSet <FileEntry> fileEntries)
        {
            List <FileEntry>       fileEntriesList                     = new List <FileEntry>(fileEntries);
            List <FileEntryBroker> fileEntryBrokersExifTool            = new List <FileEntryBroker>();
            List <FileEntryBroker> fileEntryBrokersMicrosoftPhotos     = new List <FileEntryBroker>();
            List <FileEntryBroker> fileEntryBrokersWindowsPhotoGallary = new List <FileEntryBroker>();

            foreach (FileEntry fileEntry in fileEntries)
            {
                fileEntryBrokersExifTool.Add(new FileEntryBroker(fileEntry, MetadataBrokerType.ExifTool));
                fileEntryBrokersExifTool.Add(new FileEntryBroker(fileEntry, MetadataBrokerType.ExifTool | MetadataBrokerType.ExifToolWriteError));
                fileEntryBrokersExifTool.Add(new FileEntryBroker(fileEntry, MetadataBrokerType.UserSavedData));
                fileEntryBrokersMicrosoftPhotos.Add(new FileEntryBroker(fileEntry, MetadataBrokerType.MicrosoftPhotos));
                fileEntryBrokersWindowsPhotoGallary.Add(new FileEntryBroker(fileEntry, MetadataBrokerType.WindowsLivePhotoGallery));
            }

            databaseAndCacheMetadataExiftool.MetadataCacheRemove(fileEntryBrokersExifTool);
            databaseAndCacheMetadataExiftool.DeleteFileEntries(fileEntryBrokersExifTool);  //Also delete When Broker = @Broker

            databaseAndCacheMetadataMicrosoftPhotos.MetadataCacheRemove(fileEntryBrokersMicrosoftPhotos);
            databaseAndCacheMetadataMicrosoftPhotos.DeleteFileEntries(fileEntryBrokersMicrosoftPhotos);

            databaseAndCacheMetadataWindowsLivePhotoGallery.MetadataCacheRemove(fileEntryBrokersWindowsPhotoGallary);
            databaseAndCacheMetadataWindowsLivePhotoGallery.DeleteFileEntries(fileEntryBrokersWindowsPhotoGallary);

            databaseExiftoolData.DeleteFileEntriesFromMediaExiftoolTags(fileEntriesList);
            databaseExiftoolWarning.DeleteFileEntriesFromMediaExiftoolTagsWarning(fileEntriesList);
            databaseAndCacheThumbnail.DeleteThumbnails(fileEntriesList);
        }
        private void kryptonButtonDatabaseCleanerExiftoolData_Click(object sender, EventArgs e)
        {
            DatabaseAndCacheMetadataExiftool.OnRecordReadToCacheParameter += DatabaseAndCacheMetadataExiftool_OnRecordReadToCacheParameter;
            DatabaseAndCacheMetadataExiftool.ReadToCacheAllMetadatas();
            DatabaseAndCacheMetadataExiftool.OnRecordReadToCacheParameter -= DatabaseAndCacheMetadataExiftool_OnRecordReadToCacheParameter;


            List <FileEntryBroker> fileEntryBrokers = DatabaseAndCacheMetadataExiftool.GetAllCacheData();

            List <FileEntryBroker> fileEntryBrokersDelete = new List <FileEntryBroker>();

            foreach (FileEntryBroker fileEntryBroker in fileEntryBrokers)
            {
                if (fileEntryBroker.Broker == MetadataBrokerType.ExifTool)
                {
                    if (!File.Exists(fileEntryBroker.FileFullPath))
                    {
                        fileEntryBrokersDelete.Add(fileEntryBroker);
                    }
                    else
                    {
                        Metadata metadata = DatabaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(fileEntryBroker);
                        if (metadata != null && (metadata.FileMimeType == null || metadata.FileMimeType == CorruptFile))
                        {
                            fileEntryBrokersDelete.Add(fileEntryBroker);
                        }
                    }
                    UpdateStatus("Needs cleaning: " + fileEntryBrokersDelete.Count);
                }
            }


            DatabaseAndCacheMetadataExiftool.OnDeleteRecord += DatabaseAndCacheMetadataExiftool_OnDeleteRecord;
            DatabaseAndCacheMetadataExiftool.DeleteFileEntries(fileEntryBrokersDelete);
            DatabaseAndCacheMetadataExiftool.OnDeleteRecord -= DatabaseAndCacheMetadataExiftool_OnDeleteRecord;
            kryptonLabelStatus.Text = "Done cleaning...";
        }