コード例 #1
0
        private void FavoritesButtonClicked(object sender, EventArgs e)
        {
            try
            {
                Structures.Basic.RoutesInfoBasic.RouteInfoBasic route = Request.GetRouteInfoFromLabel(lineEntry.Text);

                if (route == null)
                {
                    PlatformDependentSettings.ShowMessage(Settings.Localization.UnableToFindRouteInfo + ": " + lineEntry.Text);
                    return;
                }

                if (LineInfoCached.Select(route.ID) != null)
                {
                    return;
                }

                var fav = new LineInfoCached(route.ID);

#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                Request.CacheDepartureBoardAsync(fav.ConstructNewRequest());
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed

                favoritesStackLayout.Children.Add(new FavoriteItemContentView(favoritesStackLayout, scrollView, fav, lineEntry));
            }
            catch
            {
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                Request.CheckBasicDataValidity();
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            }
        }
コード例 #2
0
        public FindLineInfoPage()
        {
            InitializeComponent();

            BindingContext = new FindStationInfoPageViewModel();

            foreach (var cached in LineInfoCached.FetchLineInfoData())
            {
                favoritesStackLayout.Children.Add(new FavoriteItemContentView(favoritesStackLayout, scrollView, cached, lineEntry));
            }
        }
コード例 #3
0
        private static async Task <DepartureBoardResponse> SendDepartureBoardRequestAsync(LineInfoRequest dbRequest, bool forceCache = false)
        {
            DepartureBoardResponse dbResponse = null;

            using (var dbProcessing = new DepartureBoardProcessing())
            {
                var cached = LineInfoCached.Select(dbRequest.RouteInfoID);

                if (cached == null || (cached.ShouldBeUpdated || forceCache))
                {
                    try
                    {
                        if (!await CheckBasicDataValidity())
                        {
                            var results = cached?.FindResultsSatisfyingRequest(dbRequest);
                            return(results?.Departures.Count == 0 ? null : results);
                        }

                        // Process the request immediately so the user does not have to wait until the caching is completed.

                        dbResponse = await dbProcessing.ProcessAsync(dbRequest, dbRequest.Count == -1?int.MaxValue : Settings.TimeoutDuration);

                        // Then update the cache.

#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                        if (cached != null && cached.ShouldBeUpdated && dbRequest.Count != -1 && CanBeCached)
                        {
                            Task.Run(async() => cached.UpdateCache(await dbProcessing.ProcessAsync(cached.ConstructNewRequest(), int.MaxValue)));
                        }
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                    }
                    catch (System.Net.WebException)
                    {
                        PlatformDependentSettings.ShowMessage(Settings.Localization.UnreachableHost);
                    }
                }

                else
                {
                    dbResponse = cached?.FindResultsSatisfyingRequest(dbRequest);
                    if (dbResponse?.Departures.Count == 0)
                    {
                        dbResponse = await dbProcessing.ProcessAsync(dbRequest, Settings.TimeoutDuration);
                    }
                }
            }

            return(dbResponse);
        }
コード例 #4
0
        private void removeButton_Click(object sender, EventArgs e)
        {
            foreach (LineInfoCached item in favoritesListBox.CheckedItems)
            {
                item.Remove();
            }

            favorites = LineInfoCached.FetchLineInfoData().ToList();

            favoritesListBox.Items.Clear();
            foreach (var item in favorites)
            {
                favoritesListBox.Items.Add(item);
            }

            removeButton.Enabled = favoritesListBox.CheckedItems.Count > 0;
            findButton.Enabled   = favoritesListBox.CheckedItems.Count > 0;
        }
コード例 #5
0
        private void addButton_Click(object sender, System.EventArgs e)
        {
            Structures.Basic.RoutesInfoBasic.RouteInfoBasic route = Request.GetRouteInfoFromLabel(lineTextBox.Text);

            if (route == null || LineInfoCached.Select(route.ID) != null)
            {
                return;
            }

            var fav = new LineInfoCached(route.ID);

#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            Request.CacheDepartureBoardAsync(fav.ConstructNewRequest());
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed

            favoritesListBox.Items.Add(fav);
            favorites.Add(fav);
        }
コード例 #6
0
        public FavoriteLinesWindow()
        {
            InitializeComponent();

            Settings.Theme.Apply(this);

            lineTextBox.Text  = Settings.Localization.Line;
            addButton.Text    = Settings.Localization.Add;
            removeButton.Text = Settings.Localization.Remove;
            findButton.Text   = Settings.Localization.Find;

            favorites = LineInfoCached.FetchLineInfoData().ToList();

            foreach (var item in favorites)
            {
                favoritesListBox.Items.Add(item);
            }
        }
コード例 #7
0
ファイル: Request.cs プロジェクト: TheSpeedding/Timetables
        /// <summary>
        /// Updates all the cached results.
        /// </summary>
        public static async Task UpdateCachedResultsAsync(bool forceUpdate = false)
        {
            Task ForEachFetchedResult <Res, Req>(IEnumerable <CachedData <Res, Req> > collection, Func <Req, bool, Task> processAsync) where Res : ResponseBase where Req : RequestBase
            {
                return(Task.Run(() =>
                {
                    foreach (var fetched in collection)
                    {
                        if (forceUpdate || fetched.ShouldBeUpdated)
                        {
                            processAsync(fetched.ConstructNewRequest(), forceUpdate);
                        }
                    }
                }));
            }

            await Task.WhenAll(
                ForEachFetchedResult(StationInfoCached.FetchStationInfoData(), CacheDepartureBoardAsync),
                ForEachFetchedResult(LineInfoCached.FetchLineInfoData(), CacheDepartureBoardAsync),
                ForEachFetchedResult(JourneyCached.FetchJourneyData(), CacheJourneyAsync)
                );
        }
コード例 #8
0
ファイル: Request.cs プロジェクト: TheSpeedding/Timetables
 /// <summary>
 /// Caches the departures according to departure board request.
 /// </summary>
 private static async Task <bool> CacheDepartureBoardAsync(LineInfoRequest dbRequest, bool forceCache = false) =>
 LineInfoCached.CacheResults(DataFeedDesktop.Basic.RoutesInfo.FindByIndex(dbRequest.RouteInfoID), DataFeedDesktop.OfflineMode ? new DepartureBoardResponse() : await SendDepartureBoardRequestAsync(dbRequest, forceCache)) != null;
コード例 #9
0
 /// <summary>
 /// Caches the departures according to departure board request.
 /// </summary>
 private static async Task <bool> CacheDepartureBoardAsync(LineInfoRequest dbRequest, bool forceUpdate = false) => CanBeCached?
 LineInfoCached.CacheResults(DataFeedClient.Basic.RoutesInfo.FindByIndex(dbRequest.RouteInfoID), await SendDepartureBoardRequestAsync(dbRequest, forceUpdate)) != null : false;