Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }