private IEnumerable <IFilter> GenerateFilters(IEnumerable <string> queries) { foreach (var s in queries) { FilterCluster cluster = null; try { cluster = QueryCompiler.ToFilter(s); } catch (Exception e) { ExceptionStorage.Register(e, ExceptionCategory.ConfigurationError, "フィルタ クエリを読み取れません: " + s); } if (cluster != null) { if (cluster.Filters.Count() == 1) { var filter = cluster.Filters.First(); if (cluster.Negate) { filter.Negate = !filter.Negate; } yield return(filter); } else { yield return(cluster); } } } }
public FilterElementEditorViewModel(FilterBase filter = null) { if (filter != null) { this._currentSelectedItem = filter.Identifier + ": " + filter.Description; this._prevDescString = this._currentSelectedItem; ConfiguredFilterBase = QueryCompiler.ToFilter(filter.ToQuery()).Filters.First() as FilterBase; this.IsNegate = filter.Negate; } else { this.CurrentSelectedItem = GetFilterDescriptions().First(); } this._filterDescriptions = GetFilterDescriptions().ToArray(); }
public static FilterCluster Copy(this FilterCluster cluster) { return(QueryCompiler.ToFilter(cluster.ToQuery())); }
public FilterQueryEditorViewModel(IFilter[] clusters) { var filter = QueryCompiler.ToFilter("(" + String.Join("|", clusters.Select(s => s.ToQuery())) + ")"); this.Text = filter.ToQuery(); }
private void AnalyzeCurrentQuery() { var cf = this.CurrentForegroundTimeline as TimelineListViewModel; if (cf == null) { return; } if (this.TimelinesCount == 1) { this._queryTextBuffer = String.Empty; } IEnumerable <IFilter> filter = null; var prefix = (this._queryTextBuffer.Length > 2 && this._queryTextBuffer[1] == ':') ? this._queryTextBuffer[0] : '\0'; switch (prefix) { case 'u': case 'U': // search with user // tokenizing var uqsplitted = this._queryTextBuffer.Substring(2) .Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(new[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries)); filter = uqsplitted.Select(s => new FilterCluster() { ConcatenateAnd = true, Filters = s.Select(un => new FilterUserScreenName(un)).ToArray() }).ToArray(); break; case 't': case 'T': // search text var tsplitted = this._queryTextBuffer.Substring(2) .Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(new[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries)); filter = tsplitted.Select(s => new FilterCluster() { ConcatenateAnd = true, Filters = s.Select(un => new Filter.Filters.Text.FilterText(un)).ToArray() }).ToArray(); break; case 'q': case 'Q': // search with query try { filter = new[] { QueryCompiler.ToFilter(this._queryTextBuffer.Substring(2)) }; } catch (Exception e) { this.IsQueryValid = false; this.QueryError = e.Message; return; } break; default: var tosplitted = this._queryTextBuffer .Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(new[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries)); filter = tosplitted.Select(s => new FilterCluster() { ConcatenateAnd = true, Filters = s.Select(un => new Filter.Filters.Text.FilterText(un)).ToArray() }).ToArray(); break; } this.IsQueryValid = true; RaisePropertyChanged(() => IsUserScreenName); CreateTabFromTopTimelineCommand.RaiseCanExecuteChanged(); cf.TimelineListCoreViewModel.Sources = filter; Task.Factory.StartNew(() => cf.TimelineListCoreViewModel.InvalidateCache()); }