public int DeepMatchListViews(ListView lvFilesLeft, ListView lvFilesRight, ToolStripProgressBar pbProgres, ComboBox cbRegexes)
        {
            int matchCounter = 0;

            pbProgres.Value = 0;
            LogUtils.AddLogTextLine("Deep matching operation started.");

            RenameUtils.ClearMathingLeftRight(lvFilesLeft, lvFilesRight);

            foreach (var item in cbRegexes.Items)
            {
                string regex = item.GetType().GetProperty("Value").GetValue(item, null).ToString();
                matchCounter += AutoMatchListViews(lvFilesLeft, lvFilesRight, pbProgres, true, regex, true, false);
            }

            matchCounter += AutoMatchListViews(lvFilesLeft, lvFilesRight, pbProgres, false, "", true, false);

            pbProgres.Value = 100;
            return(matchCounter);
        }
        public void Rename(string strDirection, ListView lvFilesLeft, ListView lvFilesRight, FolderBrowserDialog folderBrowserDialog, string strSearchPatternLeft, string strSearchPatternRight)
        {
            if (MessageBox.Show(Resources.TextUI_RenameOperationWarning, Resources.TextUI_Warning, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
            {
                foreach (ListViewItem lvItemLeft in lvFilesLeft.Items)
                {
                    foreach (ListViewItem lvItemRight in lvFilesRight.Items)
                    {
                        if (lvItemLeft.SubItems[LIST_VIEW_MATCH_INDEX].Text == lvItemRight.SubItems[LIST_VIEW_MATCH_INDEX].Text && lvItemLeft.SubItems[LIST_VIEW_MATCH_INDEX].Text.Length > 0)
                        {
                            FileInfo fileInfoLeft        = new FileInfo(RenameUtils.GetFullPath(folderBrowserDialog) + "\\" + lvItemLeft.Text);
                            string   strLeftFileNameOnly = fileInfoLeft.Name;
                            strLeftFileNameOnly = strLeftFileNameOnly.Replace(fileInfoLeft.Extension.ToString(), "");

                            FileInfo fileInfoRight        = new FileInfo(RenameUtils.GetFullPath(folderBrowserDialog) + "\\" + lvItemRight.Text);
                            string   strRightFileNameOnly = fileInfoRight.Name;
                            strRightFileNameOnly = strRightFileNameOnly.Replace(fileInfoRight.Extension.ToString(), "");

                            if (strDirection == DIRECTION_LEFT)
                            {
                                File.Move(fileInfoRight.FullName, fileInfoRight.Directory.FullName + "\\" + strLeftFileNameOnly + fileInfoRight.Extension);
                                LogUtils.AddLogTextLine("Renamed " + fileInfoRight.FullName + " to " + fileInfoRight.Directory.FullName + "\\" + strLeftFileNameOnly + fileInfoRight.Extension);
                                lvItemLeft.SubItems[LIST_VIEW_MATCH_INDEX].Text  = "";
                                lvItemRight.SubItems[LIST_VIEW_MATCH_INDEX].Text = "";
                            }
                            else
                            {
                                File.Move(fileInfoLeft.FullName, fileInfoLeft.Directory.FullName + "\\" + strRightFileNameOnly + fileInfoLeft.Extension);
                                LogUtils.AddLogTextLine("Renamed " + fileInfoLeft.FullName + " to " + fileInfoLeft.Directory.FullName + "\\" + strRightFileNameOnly + fileInfoLeft.Extension);
                                lvItemLeft.SubItems[LIST_VIEW_MATCH_INDEX].Text  = "";
                                lvItemRight.SubItems[LIST_VIEW_MATCH_INDEX].Text = "";
                            }
                        }
                    }
                }
                RenameUtils.PopulateFiles(lvFilesLeft, strSearchPatternLeft, folderBrowserDialog);
                RenameUtils.PopulateFiles(lvFilesRight, strSearchPatternRight, folderBrowserDialog);
            }
        }
 public static void ClearMathingLeftRight(ListView lvFilesLeft, ListView lvFilesRight)
 {
     RenameUtils.ClearMatchStatus(lvFilesLeft);
     RenameUtils.ClearMatchStatus(lvFilesRight);
     LogUtils.AddLogTextLine("Matching cleared.");
 }
        public int AutoMatchListViews(ListView lvFilesLeft, ListView lvFilesRight, ToolStripProgressBar pbProgres, bool flagUseComplexRegex, string strRegex, bool flagUseFastRendering, bool flagClearMatching)
        {
            int matchCounter = 0;

            if (flagClearMatching)
            {
                RenameUtils.ClearMathingLeftRight(lvFilesLeft, lvFilesRight);
            }

            LogUtils.AddLogTextLine("Auto matching operation " + (flagUseComplexRegex ? "with " : "without ") + "regex support " + (flagUseFastRendering ? "using " : "not using ") + "fast rendering.");

            pbProgres.Value = 0;
            foreach (ListViewItem lvItem in lvFilesLeft.Items)
            {
                //if matching done - skip
                if (lvItem.SubItems[LIST_VIEW_MATCH_INDEX].Text != string.Empty)
                {
                    continue;
                }

                string strLeftFileName  = GetFilenameWithoutExtension(lvItem.Text);
                string strKeyNumberLeft = RenameUtils.ExtractNumbers(strLeftFileName, flagUseComplexRegex ? strRegex : String.Empty);

                if (strKeyNumberLeft == "")
                {
                    //MessageBox.Show("CONTINUE 1");
                    continue;
                }

                int.TryParse(strKeyNumberLeft, out int uniqueLeftFileId);

                foreach (ListViewItem lvRightItem in lvFilesRight.Items)
                {
                    //if matching done - skip
                    if (lvRightItem.SubItems[LIST_VIEW_MATCH_INDEX].Text != string.Empty)
                    {
                        continue;
                    }

                    string strRightFileName  = GetFilenameWithoutExtension(lvRightItem.Text);
                    string strKeyNumberRight = RenameUtils.ExtractNumbers(strRightFileName, flagUseComplexRegex ? strRegex : String.Empty);

                    if (strKeyNumberRight == "")
                    {
                        //MessageBox.Show("CONTINUE 2");
                        continue;
                    }

                    int.TryParse(strKeyNumberRight, out int uniqueRightFileId);

                    //MessageBox.Show(strKeyNumberLeft + " : " + uniqueLeftFileId.ToString() + " || " + strKeyNumberRight + " : " + uniqueRightFileId.ToString());

                    if ((!flagUseComplexRegex && uniqueLeftFileId == uniqueRightFileId) ||
                        (flagUseComplexRegex && (strKeyNumberLeft.Contains(strKeyNumberRight) || strKeyNumberRight.Contains(strKeyNumberLeft))))
                    {
                        lvItem.Checked      = true;
                        lvRightItem.Checked = true;
                        this.MatchLeftRight(lvFilesLeft, lvFilesRight);
                        matchCounter++;
                        if (!flagUseFastRendering)
                        {
                            lvFilesLeft.Refresh();//for special effect.
                            lvFilesRight.Refresh();
                        }
                        break;
                    }
                }

                pbProgres.Value = (int)((decimal)(lvItem.Index + 1.00) * (decimal)(100.00 / lvFilesLeft.Items.Count));
            }

            pbProgres.Value = 100;
            return(matchCounter);
        }
        public static void PopulateFiles(ListView lvFiles, string searchPattern, FolderBrowserDialog folderBrowserDialog)
        {
            //Populate listview with files
            string[] lvData = new string[4];

            //clear list
            InitListView(lvFiles);

            //check path
            if (Directory.Exists((string)GetFullPath(folderBrowserDialog)) == false)
            {
                MessageBox.Show(Resources.TextUI_DirectoryDoesNotExist);
            }
            else
            {
                try
                {
                    string[] stringFiles    = GetFiles(GetFullPath(folderBrowserDialog), searchPattern, SearchOption.TopDirectoryOnly);
                    string   stringFileName = "";
                    DateTime dtModifyDate;
                    Int64    lFileSize = 0;

                    //loop throught all files
                    foreach (string stringFile in stringFiles)
                    {
                        stringFileName = stringFile;
                        FileInfo objFileSize = new FileInfo(stringFileName);
                        lFileSize    = objFileSize.Length;
                        dtModifyDate = objFileSize.LastWriteTime; //GetLastWriteTime(stringFileName);

                        //create listview data
                        lvData[0] = RenameUtils.GetPathName(stringFileName);
                        lvData[1] = RenameUtils.FormatSize(lFileSize);

                        //check if file is in local current day light saving time
                        if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtModifyDate) == false)
                        {
                            //not in day light saving time adjust time
                            lvData[2] = RenameUtils.FormatDate(dtModifyDate.AddHours(1));
                        }
                        else
                        {
                            //not in day light saving time adjust time
                            lvData[2] = RenameUtils.FormatDate(dtModifyDate);
                        }

                        //Create actual list item
                        ListViewItem lvItem = new ListViewItem(lvData, 0);
                        lvFiles.Items.Add(lvItem);
                    }
                }
                catch (IOException e)
                {
                    MessageBox.Show(Resources.TextUI_Error_DriveNotReady + e.Message);
                }
                catch (UnauthorizedAccessException e)
                {
                    MessageBox.Show(Resources.TextUI_Error_DriveAccessDenied + e.Message);
                }
                catch (Exception e)
                {
                    MessageBox.Show(Resources.TextUI_Error + e.Message);
                }
            }
        }