public async Task SetContent(string searchText, bool full, Func <object, bool> searchFilter = null) { searchFilter = searchFilter ?? (o => true); this.SearchKey = searchText; IEnumerable <StopModel> stops = new StopModel[0]; IEnumerable <RouteGroup> routes = new RouteGroup[0]; if (searchText.Length > 0) { routes = await Task.Run(() => CommonComponent.Current.TB.Logic.FindRoutes(searchText) .OrderByText(r => r.Name) .ToList() ); } if (searchText.Length >= 3) { //elvileg nem teljesen pontos, mert lehetnek azonos route-ok a szummában de közelítésnek megteszi //+ A megálló végállomásként is számít stops = await Task.Run(() => CommonComponent.Current.TB.Logic .FindStops(searchText) .Select(s => new StopModel(s, true, true)) .OrderByText(s => s.Name) .OrderByDescending(s => s.RouteCount) .OrderBy(s => s.HighestPriority) .ToList() ); } if (stops.Take(1).Count() == 0) { ResultItems = full ? routes.Where(o => searchFilter(o)).ToList() : routes.Take(5).ToList(); } else if (routes.Take(1).Count() == 0) { var stops1 = full ? stops.ToList() : stops.Take(5).ToList(); ResultItems = stops1.Where(searchFilter).ToList(); } else { var firstRoutes = routes.Where(r => r.Name.Normalize().Contains(searchText.Normalize())).Cast <object>().ToList(); var lastRoutes = routes.Cast <object>().Except(firstRoutes); var routesAndStops = firstRoutes.Concat(stops).Concat(lastRoutes).ToList(); ResultItems = full ? routesAndStops.Where(searchFilter).ToList() : routesAndStops.Take(5).ToList(); } SetSearchResult(stops.Select(s => s.Stop), routes); }
public async Task SetContent(bool full, Func <object, bool> searchFilter = null) { searchFilter = searchFilter ?? (o => true); if (SearchText.Text.Length == 0) { var history = await Task.Run(() => App.UB.History.StopEntries .GroupBy(p => p.Stop) .Select(x => Tuple.Create(x.Key, x.Min(e => HistoryHelpers.DayPartDistance(e)), x.Sum(p => p.RawCount))) .OrderByDescending(t => t.Item3) .OrderBy(t => t.Item2) ); ClearContent(); CategorySelector.Visibility = Visibility.Visible; HistoryList.Visibility = Visibility.Visible; HistoryList.ItemsSource = history.Select(t => new StopModel(t.Item1)).Take(8).ToArray(); ResetSearchResult(); } else { IEnumerable <StopModel> stops = new StopModel[0]; IEnumerable <RouteGroup> routes = new RouteGroup[0]; string searchText = SearchText.Text; if (searchText.Length > 0) { routes = await Task.Run(() => App.Model.FindRoutes(searchText) .OrderByText(r => r.Name) .ToList() ); } if (searchText.Length >= 3) { //elvileg nem teljesen pontos, mert lehetnek azonos route-ok a szummában de közelítésnek megteszi //+ A megálló végállomásként is számít stops = await Task.Run(() => App.Model .FindStops(searchText) .Select(s => new StopModel(s, true, true)) .OrderByText(s => s.Name) .OrderByDescending(s => s.RouteCount) .OrderBy(s => s.HighestPriority) .ToList() ); } ClearContent(); if (stops.Take(1).Count() == 0) { RouteList.Visibility = Visibility.Visible; RouteList.ItemsSource = full ? routes.Where(o => searchFilter(o)).ToList() : routes.Take(5).ToList(); } else if (routes.Take(1).Count() == 0) { var stops1 = full ? stops.ToList() : stops.Take(5).ToList(); StopList.Visibility = Visibility.Visible; StopList.ItemsSource = stops1.Where(searchFilter).ToList(); } else { var firstRoutes = routes.Where(r => r.Name.Normalize().Contains(searchText.Normalize())).Cast <object>().ToList(); var lastRoutes = routes.Cast <object>().Except(firstRoutes); var routesAndStops = firstRoutes.Concat(stops).Concat(lastRoutes).ToList(); RouteStopList.Visibility = Visibility.Visible; RouteStopList.ItemsSource = full ? routesAndStops.Where(searchFilter).ToList() : routesAndStops.Take(5).ToList(); } SetSearchResult(stops.Select(s => s.Stop), routes); } }