예제 #1
0
 void CreateHighlightingManager()
 {
     highlightingManager = new HighlightingManager(searchResultModel,
                                                   () => MessageTextGetters.Get(isRawMessagesMode), () => viewSize, highlightFilters, selectionManager, wordSelection, colorTheme, RegularExpressions.FCLRegexFactory.Instance);
 }
예제 #2
0
        async void DoSearch(bool reverseDirection)
        {
            var controlsState = view.GetCheckableControlsState();

            var uds = quickSearchPresenter.CurrentSuggestion?.Data as IUserDefinedSearch;

            if (uds == null)
            {
                uds = (quickSearchPresenter.CurrentSuggestion?.Data as IUserDefinedSearchHistoryEntry)?.UDS;
            }

            Search.Options coreOptions = new Search.Options();
            coreOptions.Template      = quickSearchPresenter.Text;
            coreOptions.WholeWord     = (controlsState & ViewCheckableControl.WholeWord) != 0;
            coreOptions.ReverseSearch = (controlsState & ViewCheckableControl.SearchUp) != 0;
            if (reverseDirection)
            {
                coreOptions.ReverseSearch = !coreOptions.ReverseSearch;
            }
            coreOptions.Regexp            = (controlsState & ViewCheckableControl.RegExp) != 0;
            coreOptions.MessageTextGetter = MessageTextGetters.Get(loadedMessagesPresenter.LogViewerPresenter.ShowRawMessages);
            if (loadedMessagesPresenter.LogViewerPresenter.FocusedMessage != null)
            {
                var focusedMsg    = loadedMessagesPresenter.LogViewerPresenter.FocusedMessage;
                var targetSources = new List <ILogSource>();
                var targetThreads = new List <IThread>();
                if ((controlsState & ViewCheckableControl.SearchWithinThisThread) != 0)
                {
                    targetThreads.Add(focusedMsg.Thread);
                }
                else if ((controlsState & ViewCheckableControl.SearchWithinCurrentLog) != 0)
                {
                    targetSources.Add(focusedMsg.GetLogSource());
                }
                if (targetSources.Count != 0 || targetThreads.Count != 0)
                {
                    coreOptions.Scope = filtersFactory.CreateScope(targetSources, targetThreads);
                }
            }
            coreOptions.MatchCase    = (controlsState & ViewCheckableControl.MatchCase) != 0;
            coreOptions.ContentTypes = checkListBoxAndFlags
                                       .Where(i => (controlsState & i.Key) != 0)
                                       .Aggregate(MessageFlag.None, (contentTypes, i) => contentTypes |= i.Value);

            IFiltersList filters;

            if (uds != null)
            {
                filters = uds.Filters;
                filters = filters.Clone();                 // clone to prevent filters from changing during ongoing search
                if (coreOptions.Scope != FiltersFactory.DefaultScope)
                {
                    foreach (var f in filters.Items)
                    {
                        var tmp = f.Options;
                        tmp.Scope = coreOptions.Scope;
                        f.Options = tmp;
                    }
                }
            }
            else
            {
                filters = filtersFactory.CreateFiltersList(FilterAction.Exclude, FiltersListPurpose.Search);
                filters.Insert(0, filtersFactory.CreateFilter(FilterAction.Include, "", true, coreOptions));
            }

            var searchHistoryEntry = uds != null ?
                                     (ISearchHistoryEntry) new UserDefinedSearchHistoryEntry(uds) :
                                     new SearchHistoryEntry(coreOptions);

            if ((controlsState & ViewCheckableControl.SearchAllOccurences) != 0)
            {
                var searchOptions = new SearchAllOptions()
                {
                    SearchInRawText = loadedMessagesPresenter.LogViewerPresenter.ShowRawMessages,
                    Filters         = filters
                };
                if (uds != null)
                {
                    searchOptions.SearchName = uds.Name;
                }
                if ((controlsState & ViewCheckableControl.SearchFromCurrentPosition) != 0)
                {
                    searchOptions.StartPositions = await loadedMessagesPresenter.GetCurrentLogPositions(
                        CancellationToken.None);
                }
                searchManager.SubmitSearch(searchOptions);
                ShowSearchResultPanel(true);
            }
            else if ((controlsState & ViewCheckableControl.QuickSearch) != 0)
            {
                var so = new LogViewer.SearchOptions()
                {
                    Filters         = filters,
                    HighlightResult = true,
                    SearchOnlyWithinFocusedMessage = false,
                    ReverseSearch = coreOptions.ReverseSearch
                };
                IMessage sr;
                try
                {
                    if ((controlsState & ViewCheckableControl.SearchInSearchResult) != 0)
                    {
                        sr = await searchResultPresenter.Search(so);
                    }
                    else
                    {
                        sr = await loadedMessagesPresenter.LogViewerPresenter.Search(so);
                    }
                }
                catch (Search.TemplateException)
                {
                    alerts.ShowPopup("Error", "Error in search template", AlertFlags.Ok | AlertFlags.WarningIcon);
                    return;
                }
                catch (OperationCanceledException)
                {
                    return;
                }
                if (sr == null)
                {
                    if (statusReportFactory != null)
                    {
                        statusReportFactory.CreateNewStatusReport().ShowStatusPopup("Search", GetUnseccessfulSearchMessage(searchHistoryEntry), true);
                    }
                }
            }
            searchHistory.Add(searchHistoryEntry);
        }
예제 #3
0
 void CreateHighlightingManager()
 {
     highlightingManager = new HighlightingManager(searchResultModel,
                                                   () => MessageTextGetters.Get(isRawMessagesMode), () => viewSize, highlightFilters, selectionManager, wordSelection, colorTheme);
 }