public void DeleteSelectedFiles(MainForm mainForm, ImageListView imageListView, HashSet <FileEntry> fileEntries, bool deleteFromFileSystemAlso) { try { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; ImageListViewHandler.SuspendLayout(imageListView); using (new WaitCursor()) { foreach (FileEntry fileEntry in fileEntries) { try { mainForm.UpdateStatusAction("Deleting the file " + fileEntry.FileFullPath + " and records in database"); if (deleteFromFileSystemAlso) { FileHandler.Delete(fileEntry.FileFullPath, Properties.Settings.Default.MoveToRecycleBin); } this.DeleteFileAndHistory(fileEntry.FileFullPath); imageListView.Items.Remove(ImageListViewHandler.FindItem(imageListView.Items, fileEntry.FileFullPath)); } catch (Exception ex) { KryptonMessageBox.Show("Was not able to delete the file: " + fileEntry.FileFullPath + "\r\n\r\n" + ex.Message, "Deleting file failed", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } } } } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { ImageListViewHandler.ResumeLayout(imageListView); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; } }
private void SelectedGroupByMatch(ImageListView imageListView, bool checkFileCreated, bool checkMediaTaken, bool checkAllDates, int maxDayRange, bool checkLocationName, bool checkLocationCity, bool checkLocationDistrict, bool checkLocationCountry, bool checkAllLocations) { try { ImageListViewHandler.SuspendLayout(imageListView1); ImageListViewHandler.Enable(imageListView, false); TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, false); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; #region Do the work using (new WaitCursor()) { ImageListViewItemCollection imageListViewItems = imageListView.Items; List <GroupMacth> groupMacthSourceList = new List <GroupMacth>(); #region Init foreach (ImageListViewItem imageListViewItem in imageListView.SelectedItems) { Metadata metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); GroupMacth groupMacthSource = new GroupMacth(); groupMacthSource.IsMetadataNull = (metadata == null); groupMacthSource.FileDate = imageListViewItem.Date; groupMacthSource.MediaTaken = metadata?.MediaDateTaken; groupMacthSource.LocationName = metadata?.LocationName; groupMacthSource.LocationCity = metadata?.LocationCity; groupMacthSource.LocationDistrict = metadata?.LocationState; groupMacthSource.LocationCountry = metadata?.LocationCountry; groupMacthSourceList.Add(groupMacthSource); } #endregion imageListView.ClearSelection(); #region Find and Select foreach (ImageListViewItem imageListViewItem in imageListView.Items) { Metadata metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); GroupMacth groupMacthCheckWith = new GroupMacth(); groupMacthCheckWith.IsMetadataNull = (metadata == null); groupMacthCheckWith.FileDate = imageListViewItem.Date; groupMacthCheckWith.MediaTaken = metadata?.MediaDateTaken; groupMacthCheckWith.LocationName = metadata?.LocationName; groupMacthCheckWith.LocationCity = metadata?.LocationCity; groupMacthCheckWith.LocationDistrict = metadata?.LocationState; groupMacthCheckWith.LocationCountry = metadata?.LocationCountry; bool isItemsEqual = false; foreach (GroupMacth groupMacthSource in groupMacthSourceList) { isItemsEqual = GroupMacth.IsMatch(groupMacthSource, groupMacthCheckWith, checkFileCreated, checkMediaTaken, checkAllDates, maxDayRange, checkLocationName, checkLocationCity, checkLocationDistrict, checkLocationCountry, checkAllLocations); if (isItemsEqual) { break; } } if (isItemsEqual) { imageListViewItem.Selected = true; } else { imageListViewItem.Selected = false; } } #endregion } #endregion } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, true); ImageListViewHandler.Enable(imageListView, true); ImageListViewHandler.ResumeLayout(imageListView1); imageListView.Focus(); ImageListView_SelectionChanged_Action_ImageListView_DataGridView(false); } }
private void MoveFilesNoRename_UpdateTreeViewFolderBrowser(TreeViewFolderBrowser folderTreeView, ImageListView imageListView, StringCollection files, string targetNodeDirectory, TreeNode treeNodeTarget) { if (GlobalData.IsApplicationClosing) { return; } if (InvokeRequired) { this.BeginInvoke(new Action <TreeViewFolderBrowser, ImageListView, StringCollection, string, TreeNode>(MoveFilesNoRename_UpdateTreeViewFolderBrowser), folderTreeView, imageListView, files, targetNodeDirectory, treeNodeTarget); return; } if (GlobalData.IsApplicationClosing) { return; } if (DoNotTrigger_ImageListView_SelectionChanged()) { return; } try { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; ImageListViewHandler.SuspendLayout(imageListView1); #region Do the work using (new WaitCursor()) { foreach (string oldPath in files) //Move all files to target directory { string sourceFullFilename = oldPath; string filename = Path.GetFileName(sourceFullFilename); string targetFullFilename = Path.Combine(targetNodeDirectory, filename); try { bool directoryCreated = filesCutCopyPasteDrag.MoveFile(sourceFullFilename, targetFullFilename); //------ Update node tree ----- GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = true; if (treeNodeTarget == null) { string targetFolder = Path.GetDirectoryName(targetFullFilename); TreeViewFolderBrowserHandler.RemoveFolderWithName(folderTreeView, targetFolder); } else { TreeViewFolderBrowserHandler.RefreshTreeNode(folderTreeView, treeNodeTarget); } GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = false; ImageListViewItem foundItem = ImageListViewHandler.FindItem(imageListView.Items, sourceFullFilename); if (foundItem != null) { ImageListViewHandler.ImageListViewRemoveItem(imageListView, foundItem); } } catch (Exception ex) { DateTime dateTimeLastWriteTime = DateTime.Now; try { dateTimeLastWriteTime = FileHandler.GetLastWriteTime(sourceFullFilename); } catch { } FileStatus fileStatus = FileHandler.GetFileStatus( sourceFullFilename, checkLockedStatus: true, hasErrorOccured: true, errorMessage: ex.Message); ImageListView_UpdateItemFileStatusInvoke(sourceFullFilename, fileStatus); FileStatus fileStatusTarget = FileHandler.GetFileStatus( targetFullFilename, checkLockedStatus: true, hasErrorOccured: true, errorMessage: ex.Message, exiftoolProcessStatus: ExiftoolProcessStatus.DoNotUpdate); ImageListView_UpdateItemFileStatusInvoke(targetFullFilename, fileStatus); AddError( Path.GetDirectoryName(sourceFullFilename), Path.GetFileName(sourceFullFilename), dateTimeLastWriteTime, AddErrorFileSystemRegion, AddErrorFileSystemMove, sourceFullFilename, targetFullFilename, "Issue: Failed moving file.\r\n" + "From File name : " + sourceFullFilename + "\r\n" + "From File staus: " + fileStatus.ToString() + "\r\n" + "To File name : " + targetFullFilename + "\r\n" + "To File staus: " + fileStatusTarget.ToString() + "\r\n" + "Error message: " + ex.Message); Logger.Error(ex, "Error when move file."); } } } #endregion } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { GlobalData.IsPerformingAButtonAction = false; ImageListViewHandler.ResumeLayout(imageListView1); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; ImageListView_SelectionChanged_Action_ImageListView_DataGridView(false); } }
private void SelectedGroupBySelections(ImageListView imageListView, int baseItemIndex, int direction, int maxSelectCount, bool checkFileCreated, bool checkMediaTaken, bool checkAllDates, int maxDayRange, bool checkLocationName, bool checkLocationCity, bool checkLocationDistrict, bool checkLocationCountry, bool checkAllLocations) { try { ImageListViewHandler.SuspendLayout(imageListView1); ImageListViewHandler.Enable(imageListView, false); TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, false); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; #region Do the work using (new WaitCursor()) { ImageListViewItemCollection imageListViewItems = imageListView.Items; if (baseItemIndex < imageListViewItems.Count && direction != 0) { #region Init Variables GroupMacth groupMacthSource = new GroupMacth(); ImageListViewItem imageListViewItem = imageListViewItems[baseItemIndex]; Metadata metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); groupMacthSource.IsMetadataNull = (metadata == null); groupMacthSource.FileDate = imageListViewItem.Date; groupMacthSource.MediaTaken = metadata?.MediaDateTaken; groupMacthSource.LocationName = metadata?.LocationName; groupMacthSource.LocationCity = metadata?.LocationCity; groupMacthSource.LocationDistrict = metadata?.LocationState; groupMacthSource.LocationCountry = metadata?.LocationCountry; #endregion imageListView.ClearSelection(); #region Find and Select int selectedCount = 0; int itemIndex = baseItemIndex; while (itemIndex > -1 && itemIndex < imageListViewItems.Count && selectedCount < maxSelectCount) { imageListViewItem = imageListViewItems[itemIndex]; metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOnly(new FileEntryBroker(imageListViewItem.FileFullPath, imageListViewItem.DateModified, MetadataBrokerType.ExifTool)); GroupMacth groupMacthCheckWith = new GroupMacth(); groupMacthCheckWith.IsMetadataNull = (metadata == null); groupMacthCheckWith.FileDate = imageListViewItem.Date; groupMacthCheckWith.MediaTaken = metadata?.MediaDateTaken; groupMacthCheckWith.LocationName = metadata?.LocationName; groupMacthCheckWith.LocationCity = metadata?.LocationCity; groupMacthCheckWith.LocationDistrict = metadata?.LocationState; groupMacthCheckWith.LocationCountry = metadata?.LocationCountry; bool isItemsEqual = GroupMacth.IsMatch(groupMacthSource, groupMacthCheckWith, checkFileCreated, checkMediaTaken, checkAllDates, maxDayRange, checkLocationName, checkLocationCity, checkLocationDistrict, checkLocationCountry, checkAllLocations); if (isItemsEqual) { selectedCount++; imageListViewItem.Selected = true; } else { imageListViewItem.Selected = false; } itemIndex += direction; } #endregion imageListView.EnsureVisible(itemIndex - direction); imageListView.EnsureVisible(baseItemIndex); } lastGroupBaseIndex = baseItemIndex; } #endregion } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; TreeViewFolderBrowserHandler.Enabled(treeViewFolderBrowser1, true); ImageListViewHandler.Enable(imageListView, true); ImageListViewHandler.ResumeLayout(imageListView1); imageListView.Focus(); ImageListView_SelectionChanged_Action_ImageListView_DataGridView(false); } }