예제 #1
0
        /// <summary>
        /// Start the searching
        /// </summary>
        /// <param name="searchWithInResults">true for searching within current results, false starts a new search</param>
        /// <history>
        /// [Curtis_Beard]		10/17/2005	Created
        /// [Curtis_Beard]		07/03/2006	FIX: 1516775, Remove trim on the search expression
        /// [Curtis_Beard]		07/12/2006	CHG: moved thread actions to grep class
        /// [Curtis_Beard]		11/22/2006	CHG: Remove use of browse in combobox
        /// [Curtis_Beard]		08/07/2007  ADD: 1741735, better search error handling
        /// [Curtis_Beard]		08/21/2007  FIX: 1778467, make sure file pattern is correct if a '\' is present
        /// [Curtis_Beard]		01/31/2012	CHG: 3424154/1816655, allow multiple starting directories
        /// [Curtis_Beard]		02/07/2012  CHG: 1741735, report full error message
        /// [Curtis_Beard]		02/24/2012	CHG: 3488322, use hand cursor for results view to signal click
        /// [Curtis_Beard]		10/30/2012	ADD: 28, search within results
        /// [Curtis_Beard]		12/01/2014	ADD: support for encoding detection event
        /// [Curtis_Beard]		12/17/2014	ADD: support for Win7+ taskbar progress
        /// [Curtis_Beard]		02/24/2015	CHG: remove isSearching check so that you can view selected file during a search
        /// [Curtis_Beard]		05/26/2015  CHG: add stop search messsage to log with time
        /// </history>
        private void StartSearch(bool searchWithInResults)
        {
            try
             {
            string path = cboFilePath.Text.Trim();

            string[] filePaths = null;
            if (searchWithInResults)
            {
               // get currently listed file paths from ListView
               filePaths = new string[lstFileNames.Items.Count];
               for (int i = 0; i < lstFileNames.Items.Count; i++)
               {
                  filePaths[i] = Path.Combine(lstFileNames.Items[i].SubItems[Constants.COLUMN_INDEX_DIRECTORY].Text, lstFileNames.Items[i].SubItems[Constants.COLUMN_INDEX_FILE].Text);
               }
            }

            // update combo selections
            AddComboSelection(cboSearchForText, cboSearchForText.Text);
            AddComboSelection(cboFileName, cboFileName.Text);
            AddComboSelection(cboFilePath, path);

            SetWindowText();

            // disable gui
            SetSearchState(false);

            // reset display
            LogItems.Clear();
            SetStatusBarMessage(string.Empty);
            SetStatusBarEncoding(string.Empty);
            SetStatusBarTotalCount(0);
            SetStatusBarFileCount(0);
            SetStatusBarFilterCount(0);
            SetStatusBarErrorCount(0);

            ClearItems();
            txtHits.LineNumbers = null;
            txtHits.Clear();

            // setup structs to pass to grep
            var fileFilterSpec = GetFilterSpecFromUI();
            var searchSpec = GetSearchSpecFromUI(path, fileFilterSpec.FileFilter, filePaths);

            // create new grep instance
            __Grep = new Grep(searchSpec, fileFilterSpec);

            // add plugins
            __Grep.Plugins = Core.PluginManager.Items;

            // attach events
            __Grep.FileHit += ReceiveFileHit;
            __Grep.LineHit += ReceiveLineHit;
            __Grep.SearchCancel += ReceiveSearchCancel;
            __Grep.SearchComplete += ReceiveSearchComplete;
            __Grep.SearchError += ReceiveSearchError;
            __Grep.SearchingFile += ReceiveSearchingFile;
            __Grep.FileFiltered += ReceiveFileFiltered;
            __Grep.DirectoryFiltered += ReceiveDirectoryFiltered;
            __Grep.SearchingFileByPlugin += ReceiveSearchingFileByPlugin;
            __Grep.FileEncodingDetected += ReceiveFileEncodingDetected;

            API.TaskbarProgress.SetState(this.Handle, API.TaskbarProgress.TaskbarStates.Indeterminate);
            LogItems.Add(new LogItem(LogItem.LogItemTypes.Status, "SearchStarted"));
            LogStartSearchMessage(searchSpec, fileFilterSpec);
            StartingTime = Stopwatch.GetTimestamp();

            __Grep.BeginExecute();
             }
             catch (Exception ex)
             {
            LogStopSearchMessage("error");

            RestoreTaskBarProgress();
            LogItems.Add(new LogItem(LogItem.LogItemTypes.Error, "SearchGenericError", string.Format("{0}||{1}", string.Empty, ex.Message)));
            LogClient.Instance.Logger.Error("Unhandled search error: {0}", LogClient.GetAllExceptions(ex));

            string message = string.Format(Language.GetGenericText("SearchGenericError"), ex.Message);
            MessageBox.Show(this, message, ProductInformation.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Error);

            SetStatusBarMessage(message);
            SetSearchState(true);
            CalculateTotalCount();
             }
        }