private int DoFilter(FilterParams filterParams, int startLine, int maxCount, List <int> filterResultLines, List <int> lastFilterLinesList, List <int> filterHitList, ProgressCallback progressCallback) { int lineNum = startLine; int count = 0; int callbackCounter = 0; try { filterParams.Reset(); while ((count++ < maxCount || filterParams.isInRange) && !ShouldCancel) { if (lineNum >= _callback.GetLineCount()) { return(count); } string line = _callback.GetLogLine(lineNum); if (line == null) { return(count); } _callback.LineNum = lineNum; if (Classes.DamerauLevenshtein.TestFilterCondition(filterParams, line, _callback)) { AddFilterLine(lineNum, filterParams, filterResultLines, lastFilterLinesList, filterHitList); } lineNum++; callbackCounter++; if (lineNum % PROGRESS_BAR_MODULO == 0) { progressCallback(callbackCounter); callbackCounter = 0; } } } catch (Exception ex) { string message = string.Format("Exception while filtering. Please report to developer: \n\n{0}\n\n{1}", ex, ex.StackTrace); Logger.logError(message); MessageBox.Show(null, message, "LogExpert"); } return(count); }
public Range FindRange(int startLine) { Logger.logInfo("Starting range search for " + _filterParams.searchText + " ... " + _filterParams.rangeSearchText); if (_filterParams.rangeSearchText == null || _filterParams.rangeSearchText.Trim().Length == 0) { Logger.logInfo("Range search text not set. Cancelling range search."); return(null); } if (_filterParams.searchText == null || _filterParams.searchText.Trim().Length == 0) { Logger.logInfo("Search text not set. Cancelling range search."); return(null); } _filterParams.isRangeSearch = false; _filterParams.isInRange = false; string line; int lineCount = _callback.GetLineCount(); int lineNum = startLine; bool foundStartLine = false; Range range = new Range(); FilterParams tmpParam = _filterParams.CreateCopy2(); tmpParam.searchText = _filterParams.rangeSearchText; // search backward for starting keyword line = _callback.GetLogLine(lineNum); while (lineNum >= 0) { _callback.LineNum = lineNum; if (Classes.DamerauLevenshtein.TestFilterCondition(_filterParams, line, _callback)) { foundStartLine = true; break; } lineNum--; line = _callback.GetLogLine(lineNum); if (lineNum < 0 || Classes.DamerauLevenshtein.TestFilterCondition(tmpParam, line, _callback)) // do not crash on Ctrl+R when there is not start line found { // lower range bound found --> we are not in between a valid range break; } } if (!foundStartLine) { Logger.logInfo("Range start not found"); return(null); } range.StartLine = lineNum; _filterParams.isRangeSearch = true; _filterParams.isInRange = true; lineNum++; while (lineNum < lineCount) { line = _callback.GetLogLine(lineNum); _callback.LineNum = lineNum; if (!Classes.DamerauLevenshtein.TestFilterCondition(_filterParams, line, _callback)) { break; } lineNum++; } lineNum--; range.EndLine = lineNum; #if DEBUG Logger.logInfo("Range search finished. Found " + (range.EndLine - range.StartLine) + " lines"); #endif return(range); }