public static async Task <DownloadManager> Create(RouteListing listing, CancellationToken cancellationToken) { listing.Progress = 0; listing.ShowProgress = true; DownloadManager result = new DownloadManager(); result.Listing = listing; result._Route = result.Listing.Route; var stopsAndShapes = await ApiLayer.GetStopsAndShapesForRoute(result.Listing.Route.ID, cancellationToken); result._Shapes = stopsAndShapes.Item2; result._StopsPending = new ObservableCollection <BusStop>(stopsAndShapes.Item1); if (cancellationToken.IsCancellationRequested) { return(null); } result.Initialize(); result._TotalStops = result.StopsPending.Count; DownloadsInProgress.Add(result); if (!FileManager.PendingDownloads.Any(item => item.First() == result.Route.ID)) { List <string> pend = new List <string>() { result.Route.ID }; pend.AddRange(result.StopsPending.Select(stop => stop.ID)); FileManager.PendingDownloads.Add(pend); await listing.RefreshIsDownloaded(); await FileManager.SavePendingDownloads(); } return(result); }
public static async Task<DownloadManager> Create(RouteListing listing, CancellationToken cancellationToken) { listing.Progress = 0; listing.ShowProgress = true; DownloadManager result = new DownloadManager(); result.Listing = listing; result._Route = result.Listing.Route; var stopsAndShapes = await ApiLayer.GetStopsAndShapesForRoute(result.Listing.Route.ID, cancellationToken); result._Shapes = stopsAndShapes.Item2; result._StopsPending = new ObservableCollection<BusStop>(stopsAndShapes.Item1); if (cancellationToken.IsCancellationRequested) return null; result.Initialize(); result._TotalStops = result.StopsPending.Count; DownloadsInProgress.Add(result); if (!FileManager.PendingDownloads.Any(item => item.First() == result.Route.ID)) { List<string> pend = new List<string>() { result.Route.ID }; pend.AddRange(result.StopsPending.Select(stop => stop.ID)); FileManager.PendingDownloads.Add(pend); await listing.RefreshIsDownloaded(); await FileManager.SavePendingDownloads(); } return result; }
private async void AgenciesListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { LoadingRect.Visibility = Visibility.Visible; MainProgressRing.IsActive = true; var inOrder = (Func <RouteListing, RouteListing, bool>) delegate(RouteListing first, RouteListing second) { var splitName = (Func <string, Tuple <int, string> >) delegate(string name) { string num = new string(name.TakeWhile(chr => char.IsNumber(chr)).ToArray()); if (num.Length == 0) { return(new Tuple <int, string>(0, name)); } else { return(new Tuple <int, string>(int.Parse(num), name.Replace(num, ""))); } }; var splitFirst = splitName(first.Name); var splitSecond = splitName(second.Name); if (splitFirst.Item1 < splitSecond.Item1) { return(true); } else if (splitFirst.Item1 > splitSecond.Item1) { return(false); } else { return(string.Compare(splitFirst.Item2, splitSecond.Item2, StringComparison.CurrentCultureIgnoreCase) < 0); } }; MainList.Items.Clear(); var agency = (TransitAgency)AgenciesListView.SelectedItem; SortedSet <RouteListing> routesList = new SortedSet <RouteListing>(Comparer <RouteListing> .Create(new Comparison <RouteListing>((rt1, rt2) => inOrder(rt1, rt2) ? -1 : 1))); var routes = await Data.GetBusRoutesForAgency(agency.ID, new DataRetrievalOptions(DataSourceDescriptor.Cloud), MasterCancellationTokenSource.Token); RoutesWarning = routes.Item2.FinalSource != DataSourceDescriptor.Cloud; if (routes.Item1 != null) { foreach (var rte in routes.Item1) { var listing = new RouteListing(rte); await listing.RefreshIsDownloaded(); routesList.Add(listing); } foreach (var rte in routesList) { MainList.Items.Add(rte); } await FileManager.SaveAgency(agency, routesList.Select(item => item.Route.ID).ToArray()); } MainProgressRing.IsActive = false; LoadingRect.Visibility = Visibility.Collapsed; }
public static async Task<DownloadManager> Create(RouteListing listing, CancellationToken cancellationToken) { listing.Progress = 0; listing.ShowProgress = true; DownloadManager result = new DownloadManager(); result.Listing = listing; result._Route = result.Listing.Route; var stopsAndShapes = await ApiLayer.GetStopsForRoute(result.Listing.Route.ID, cancellationToken); result._Shapes = stopsAndShapes.Item2; result._StopsPending = new ObservableCollection<BusStop>(stopsAndShapes.Item1); if (cancellationToken.IsCancellationRequested) return null; result.Initialize(); result._TotalStops = result.StopsPending.Count; DownloadsInProgress.Add(result); return result; }
private async void AgenciesListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { LoadingRect.Visibility = Visibility.Visible; MainProgressRing.IsActive = true; var inOrder = (Func<RouteListing, RouteListing, bool>)delegate (RouteListing first, RouteListing second) { var splitName = (Func<string, Tuple<int, string>>)delegate (string name) { string num = new string(name.TakeWhile(chr => char.IsNumber(chr)).ToArray()); if (num.Length == 0) return new Tuple<int, string>(0, name); else return new Tuple<int, string>(int.Parse(num), name.Replace(num, "")); }; var splitFirst = splitName(first.Name); var splitSecond = splitName(second.Name); if (splitFirst.Item1 < splitSecond.Item1) return true; else if (splitFirst.Item1 > splitSecond.Item1) return false; else return string.Compare(splitFirst.Item2, splitSecond.Item2, StringComparison.CurrentCultureIgnoreCase) < 0; }; MainList.Items.Clear(); var agency = (TransitAgency)AgenciesListView.SelectedItem; SortedSet<RouteListing> routesList = new SortedSet<RouteListing>(Comparer<RouteListing>.Create(new Comparison<RouteListing>((rt1, rt2) => inOrder(rt1, rt2) ? -1 : 1))); var routes = await Data.GetBusRoutesForAgency(agency.ID, new DataRetrievalOptions(DataSourceDescriptor.Cloud), MasterCancellationTokenSource.Token); RoutesWarning = routes.Item2.FinalSource != DataSourceDescriptor.Cloud; if (routes.Item1 != null) { foreach (var rte in routes.Item1) { var listing = new RouteListing(rte); await listing.RefreshIsDownloaded(); routesList.Add(listing); } foreach (var rte in routesList) MainList.Items.Add(rte); await FileManager.SaveAgency(agency, routesList.Select(item => item.Route.ID).ToArray()); } MainProgressRing.IsActive = false; LoadingRect.Visibility = Visibility.Collapsed; }