/// <summary> /// Get schedule as an asynchronous operation /// </summary> /// <param name="cultures">A <see cref="IEnumerable{CultureInfo}" /> specifying the languages to which the returned instance should be translated</param> /// <returns>A <see cref="Task{TResult}" /> representing an async operation</returns> public async Task <IEnumerable <URN> > GetScheduleAsync(IEnumerable <CultureInfo> cultures) { var missingCultures = LanguageHelper.GetMissingCultures(cultures, _loadedSchedules).ToList(); if (_scheduleUrns == null && missingCultures.Any()) { var tasks = missingCultures.Select(s => DataRouterManager.GetSportEventsForTournamentAsync(Id, s, this)).ToList(); await Task.WhenAll(tasks).ConfigureAwait(false); if (tasks.All(a => a.IsCompleted)) { _loadedSchedules.AddRange(missingCultures); if (tasks.First().Result != null) { _scheduleUrns = tasks.First().Result.Select(s => s.Item1); } } } if (_scheduleUrns.IsNullOrEmpty() && _currentSeasonInfo != null) { _scheduleUrns = _currentSeasonInfo.Schedule; } return(_scheduleUrns); }
/// <summary> /// get stages as an asynchronous operation. /// </summary> /// <param name="cultures">The cultures</param> /// <returns>A <see cref="Task{T}" /> representing the asynchronous operation</returns> public async Task <IEnumerable <URN> > GetStagesAsync(IEnumerable <CultureInfo> cultures) { if (_childStages != null) { return(_childStages); } await FetchMissingSummary(new[] { DefaultCulture }, false).ConfigureAwait(false); if (_childStages == null && !_stageScheduleFetched) { try { _stageScheduleFetched = true; var results = await DataRouterManager.GetSportEventsForTournamentAsync(Id, DefaultCulture, this).ConfigureAwait(false); if (!results.IsNullOrEmpty()) { _childStages = new ReadOnlyCollection <URN>(results.Select(r => r.Item1).ToList()); } } catch { } } return(_childStages); }
/// <summary> /// Gets the associated event timeline /// </summary> /// <param name="cultures">A <see cref="IEnumerable{CultureInfo}" /> specifying the languages to which the returned instance should be translated</param> /// <returns>A <see cref="Task{T}" /> representing an async operation</returns> /// <exception cref="System.NotImplementedException"></exception> /// <remarks>The timeline is cached only after the event status indicates that the event has finished</remarks> public async Task<EventTimelineCI> GetEventTimelineAsync(IEnumerable<CultureInfo> cultures) { var wantedCultures = cultures as IList<CultureInfo> ?? cultures.ToList(); if (_eventTimeline == null || !_eventTimeline.IsFinalized) { // if we dont have timeline or is not yet finalized, all cultures should be fetched; otherwise only missing ones } else { wantedCultures = LanguageHelper.GetMissingCultures(wantedCultures, _eventTimeline.FetchedCultureInfos).ToList(); } var tasks = wantedCultures.Select(s => DataRouterManager.GetInformationAboutOngoingEventAsync(Id, s, this)); await Task.WhenAll(tasks).ConfigureAwait(false); return _eventTimeline; }
/// <summary> /// Get seasons as an asynchronous operation /// </summary> /// <param name="cultures">A <see cref="IEnumerable{CultureInfo}" /> specifying the languages to which the returned instance should be translated</param> /// <returns>A <see cref="Task{TResult}" /> representing an async operation</returns> public async Task <IEnumerable <URN> > GetSeasonsAsync(IEnumerable <CultureInfo> cultures) { var missingCultures = LanguageHelper.GetMissingCultures(cultures, _loadedSeasons).ToList(); if (_seasons == null && missingCultures.Any()) { var tasks = missingCultures.Select(s => DataRouterManager.GetSeasonsForTournamentAsync(Id, s, this)).ToList(); await Task.WhenAll(tasks).ConfigureAwait(false); if (tasks.All(a => a.IsCompleted)) { _loadedSeasons.AddRange(missingCultures); _seasons = tasks.First().Result; } } return(_seasons); }