} // BeginLoadEpgPrograms private void LoadEpgPrograms(LoadEpgProgramsData data) { var programs = Datastore.GetPrograms(data.FullServiceName, LocalReferenceTime, 1, 2); // try alternate service if no EPG data if ((programs == null) && (data.FullAlternateServiceName != null)) { programs = Datastore.GetPrograms(data.FullAlternateServiceName, LocalReferenceTime, 1, 2); } // if // populate data if (programs != null) { var epgPrograms = new EpgProgram[4]; epgPrograms[0] = programs.Requested?.Previous?.Program; epgPrograms[1] = programs.Requested?.Program; var next = programs.Requested?.Next; epgPrograms[2] = next?.Program; next = next?.Next; epgPrograms[3] = next?.Program; data.EpgPrograms = epgPrograms; } // if if (InvokeRequired) { BeginInvoke(new Action <LoadEpgProgramsData>(LoadEpgProgramsEnded), data); } else { LoadEpgProgramsEnded(data); } // if-else } // LoadEpgPrograms
} // buttonRecordChannel_Click #endregion #region Auxiliary methods private void BeginLoadEpgPrograms(bool async) { if (IsDisabled) { return; } if (CurrentRequestId == int.MaxValue) { CurrentRequestId = 0; } if (async) { timerLoadingData.Enabled = false; timerLoadingData.Enabled = true; } // if // TODO: do NOT assume .imagenio.es var fullServiceName = SelectedService.ServiceName + ".imagenio.es"; var fullAlternateServiceName = SelectedService.ReplacementService?.ServiceName + ".imagenio.es"; var data = new LoadEpgProgramsData() { RequestId = Interlocked.Increment(ref CurrentRequestId), FullServiceName = fullServiceName, FullAlternateServiceName = fullAlternateServiceName, ReferenceTime = this.LocalReferenceTime }; if (async) { ThreadPool.QueueUserWorkItem((o) => LoadEpgPrograms(data), null); } else { LoadEpgPrograms(data); } // if-else } // BeginLoadEpgPrograms
} // LoadEpgPrograms private void LoadEpgProgramsEnded(LoadEpgProgramsData data) { try { // ignore data if not from current request // as data is loading async, "old" load request may arrive if channel is quickly changed if (data.RequestId != CurrentRequestId) { return; } timerLoadingData.Enabled = false; SetAutoRefreshTimer(true); EpgPrograms = data.EpgPrograms; buttonFullView.Enabled = (EpgPrograms != null); DisplayEpgProgram((data.EpgPrograms != null)? 1 : 0); } catch (Exception ex) { HandleException(new ExceptionEventData(ex)); } // try-catch } // DisplayEpgPrograms