public override void Union(_1_1.Data.WeekSchedule other) { //Doesn't do a union, but will serve as placeholder for actual functionality in future versions. Days = (other as WeekSchedule)?.Days; DaySchedules = (other as WeekSchedule)?.DaySchedules; TechnicalDays = (other as WeekSchedule)?.TechnicalDays; }
public static async Task <RetrievedData <WeekSchedule> > GetScheduleForStopAsync(string stopId, DataSourcePreference preference, CancellationToken cancellationToken) { WeekSchedule result = null; List <string> resultErrors = new List <string>(); List <Exception> resultExceptions = new List <Exception>(); foreach (var source in Sources) { if (cancellationToken.IsCancellationRequested) { throw new OperationCanceledException(); } if (!source.IsQualified(preference)) { continue; } if (source.CanGetScheduleForStop) { var sResult = await source.GetScheduleForStop(stopId, cancellationToken); if (sResult.HasData) { if (result == null) { result = sResult.Data; } else { result.Union(sResult.Data); } } if (sResult.ErrorMessage != null) { resultErrors.Add(sResult.ErrorMessage); } if (sResult.CaughtException != null) { resultExceptions.Add(sResult.CaughtException); } } } //if (result == null) // resultStops = new TransitStop[] { }; if (result == null) { return(new RetrievedData <WeekSchedule>(resultErrors.Count == 0 ? null : resultErrors.Aggregate("", (acc, err) => (acc == "" ? "" : ", ") + err), resultExceptions.Count == 0 ? null : new AggregateException(resultExceptions))); } return(new RetrievedData <WeekSchedule>(result, resultErrors.Count == 0 ? null : resultErrors.Aggregate("", (acc, err) => (acc == "" ? "" : ", ") + err), resultExceptions.Count == 0 ? null : new AggregateException(resultExceptions))); }
private async void LoadSchedule() { try { IsBusy = true; if (Stop.ID == null) { Subtitle = "No stop is selected."; HasSchedule = false; } else { Subtitle = null; var retrievedSchedule = await DataSource.GetScheduleForStopAsync(Stop.ID, DataSourcePreference.All, TokenSource.Token); if (retrievedSchedule.HasData) { Schedule = retrievedSchedule.Data; DayGroups.Clear(); var groups = Schedule.GetScheduleGroups().ToArray(); foreach (var group in groups) { DayGroups.Add(new DayScheduleGroup(group)); } //if (groups.Length > 0) // DayGroups.AddRange(groups); HasSchedule = true; var today = DateTime.Today.DayOfWeek.ToServiceDay(); var todaysGroup = DayGroups.FirstOrDefault(dg => (dg.DayGroup & today) == today); if (todaysGroup == null) SelectedDayGroup = DayGroups[0]; else SelectedDayGroup = todaysGroup; } //LoadSelectedSchedule(); } } catch (OperationCanceledException) { Subtitle = "Schedule retrieval was cancelled."; HasSchedule = false; } catch (Exception ex) { Subtitle = "Error has occured: " + ex.Message; HasSchedule = false; } finally { IsBusy = false; } }
public abstract void Union(WeekSchedule other);