public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService service) { if (service == null) { throw new ArgumentNullException(nameof(service)); } if (VerifyIsInactive(ownerForm, service)) { return(false); } var task = GetRecordTask(service, null, new DateTime()); using (var dlg = new RecordChannelDialog()) { dlg.Task = task; dlg.IsNewTask = true; dlg.ShowDialog(ownerForm); task = dlg.Task; if (dlg.DialogResult != DialogResult.OK) { return(false); } } // using dlg return(ScheduleTask(ownerForm, task)); } // RecordService
} // CanRecord public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram epgProgram, DateTime localReferenceTime) { var channel = GetRecordChannel(service); if (epgProgram == null) { return(RecordTask.CreateWithDefaultValues(channel)); } // if var isCurrent = epgProgram.IsCurrent(localReferenceTime); var program = GetRecordProgram(epgProgram); var schedule = GetRecordSchedule(epgProgram, isCurrent); var duration = GetRecordDuration(epgProgram, isCurrent); var description = GetRecordDescription(epgProgram, channel); var action = GetRecordAction(service, epgProgram); var advanced = GetRecordAdvancedSettings(); var task = new RecordTask() { Channel = channel, Program = program, Schedule = schedule, Duration = duration, Description = description, Action = action, AdvancedSettings = advanced, }; return(task); } // GetRecordTask
} // GetEpgInfo public string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait) { try { var crid = MovistarCrId.Get(epgEvent.CRID); if (crid == null) { return(null); } var builder = new UriBuilder(); builder.Scheme = EpgThumbnailScheme; builder.Host = EpgThumbnailHost; builder.Port = EpgThumbnailPort; builder.Path = string.Format(EpgThumbnailUrlFormat, portrait? EpgThumbnailPortraitSubPath: EpgThumbnailLandscapeSubPath, EpgThumbnailBigSubPath, crid.ContentIdRoot, crid.ContentId); return(builder.Uri.ToString()); } catch { // ignore return(null); } // try-catch } // GetEpgProgramThumbnailUrl
} // EnableListItem private string GetServiceLogoImageKey(UiBroadcastService service, bool disabled) { var logo = service.Logo; if (SmallImageList.Images.ContainsKey(logo.Key)) { return(disabled ? "<Disabled> " + logo.Key : logo.Key); } // if var key = logo.Key; var disabledKey = "<Disabled> " + key; // load small logo and add it to small image list using (var image = logo.GetImage(SmallLogoSize, true)) { SmallImageList.Images.Add(logo.Key, image); using (var disabledImage = PictureBoxEx.ToGrayscale(image)) { SmallImageList.Images.Add(disabledKey, disabledImage); } // using image } // using image // load large logo and add it to large image list using (var image = logo.GetImage(LargeLogoSize, true)) { LargeImageList.Images.Add(logo.Key, image); using (var disabledImage = PictureBoxEx.ToGrayscale(image)) { LargeImageList.Images.Add(disabledKey, disabledImage); } // using image } // using image return(disabled ? disabledKey : key); } // GetChannelLogoKey
private static void LaunchShortcut(TvPlayer player, UiBroadcastService service, string arguments) { var shortcutPath = Path.Combine(AppUiConfiguration.Current.Folders.Cache, service.FullServiceName) + ".lnk"; // delete exising shortcut if (File.Exists(shortcutPath)) { File.SetAttributes(shortcutPath, FileAttributes.Normal); File.Delete(shortcutPath); } // if var shortcut = new ShellLink(); shortcut.TargetPath = player.Path; shortcut.Arguments = arguments; shortcut.Description = string.Format(Properties.Texts.ExternalPlayerShortcutDescription, player.Name, service.DisplayName); shortcut.IconLocation = service.Logo.GetLogoIconPath(); shortcutPath = shortcut.CreateShortcut(shortcutPath); var start = new ProcessStartInfo() { UseShellExecute = true, FileName = shortcutPath, ErrorDialog = true, }; using (var process = Process.Start(start)) { // no op } // using process } // LaunchShortcut
} // GetMappedServices protected MappedService GetMappedService(BroadcastList item, UiBroadcastService service, IDictionary <string, MappedService> mappedServices, IDictionary <string, ServiceLogoMappings.ReplacementDomain> domainMappings) { MappedService mappedService; var domain = item.Provider.DomainName; while (domain != null) { ServiceLogoMappings.ReplacementDomain replacement; var key = MappedService.GetKey(service.ServiceName, domain); if (mappedServices.TryGetValue(key, out mappedService)) { return(mappedService); } // if if (!domainMappings.TryGetValue(domain.ToLowerInvariant(), out replacement)) { return(null); } // if domain = replacement.Replacement; } // while return(null); } // GetMappedService
} // DumpHeader private void DumpBroadcastService(UiBroadcastService service, StringBuilder buffer) { buffer.Append(service.DisplayLogicalNumber); buffer.Append("\t"); buffer.Append(service.DisplayName); buffer.Append("\t"); buffer.Append(service.DisplayDescription); buffer.Append("\t"); buffer.Append(service.DisplayServiceType); buffer.Append("\t"); buffer.Append(service.DisplayLocationUrl); buffer.Append("\t"); buffer.Append(service.FullServiceName); buffer.Append("\t"); var replacement = service.ReplacementService; if (replacement != null) { if (string.IsNullOrEmpty(replacement.DomainName)) { buffer.Append(replacement.ServiceName); buffer.Append('.'); buffer.Append(service.DomainName); } else { buffer.Append(replacement.ServiceName); buffer.Append('.'); buffer.Append(replacement.DomainName); } // if-else } // if } // DumpBroadcastService
} // constructor public void DisplayData(UiBroadcastService service, EpgProgram epgProgram, DateTime referenceTime, string caption) { Service = service; EpgProgram = epgProgram; labelProgramCaption.Text = caption; labelProgramCaption.Visible = caption != null; labelProgramTime.Visible = (epgProgram != null); labelProgramDetails.Visible = (epgProgram != null); pictureProgramThumbnail.ImageLocation = null; buttonProgramProperties.Visible = (epgProgram != null); pictureProgramThumbnail.Cursor = (epgProgram != null) ? Cursors.Hand : Cursors.Default; if (EpgProgram == null) { labelProgramTitle.Text = Properties.Texts.EpgNoInformation; pictureProgramThumbnail.Image = Properties.Resources.EpgNoProgramImage; } else { labelProgramTitle.Text = EpgProgram.Title; labelProgramTime.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(EpgProgram.LocalStartTime, EpgProgram.LocalEndTime, referenceTime), FormatString.TimeSpanTotalMinutes(EpgProgram.Duration, FormatString.Format.Extended)); labelProgramDetails.Text = string.Format("{0} / {1}", (EpgProgram.Genre != null) ? EpgProgram.Genre.Description : Properties.Texts.EpgNoGenre, (EpgProgram.ParentalRating != null) ? EpgProgram.ParentalRating.Description : Properties.Texts.EpgNoParentalRating); pictureProgramThumbnail.Image = Properties.Resources.EpgLoadingProgramImage; pictureProgramThumbnail.ImageLocation = null; // TODO: EPG // pictureProgramThumbnail.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(service, EpgProgram, false); } // if-else } // DisplayData
} // FireStatusChanged private void FireSelectionChanged() { var listItem = (ListView.SelectedItems.Count == 0) ? null : ListView.SelectedItems[0]; fieldSelectedService = (listItem == null) ? null : (UiBroadcastService)listItem.Tag; OnSelectionChanged(this, new ListSelectionChangedEventArgs(fieldSelectedService)); } // FireSelectionChanged
} // ProcessParentalGuidance private UiBroadcastService GetService(EpgService service) { var identifier = new Etsi.Ts102034.v010501.XmlSerialization.Common.TextualIdentifier() { ServiceName = service.ServiceNameReference, }; return(BroadcastDiscovery.TryGetService(UiBroadcastService.GetKey(identifier, ServiceProvider.DomainName))); } // GetService
} // constructor public static void ShowEpgPrograms(UiBroadcastService service, EpgProgram[] epg, IWin32Window owner, DateTime referenceTime) { using (var form = new EpgNowThenDialog()) { form.Service = service; form.EpgPrograms = epg; form.ReferenceTime = referenceTime; form.ShowDialog(owner); } // using form } // ShowEpgBasicData
} // RecordService public static bool RecordProgram(CommonBaseForm ownerForm, UiBroadcastService service, EpgProgram program, DateTime localReferenceTime, bool allowRecordChannel = true) { RecordProgramOptions.RecordOption option; if (service == null) { throw new ArgumentNullException(nameof(service)); } if (VerifyIsInactive(ownerForm, service)) { return(false); } // select record options using (var dlg = new RecordProgramOptions()) { dlg.SelectedService = service; dlg.SelectedProgram = program; dlg.LocalReferenceTime = localReferenceTime; dlg.AllowRecordChannel = allowRecordChannel; dlg.ShowDialog(ownerForm); option = dlg.SelectedOption; } // using if (option == RecordProgramOptions.RecordOption.None) { return(false); } if (option == RecordProgramOptions.RecordOption.Channel) { program = null; } // create record task and allow to edit it var task = GetRecordTask(service, program, localReferenceTime); if (option != RecordProgramOptions.RecordOption.Default) { using (var dlg = new RecordChannelDialog()) { dlg.Task = task; dlg.IsNewTask = true; dlg.LocalReferenceTime = localReferenceTime; dlg.ShowDialog(ownerForm); task = dlg.Task; if (dlg.DialogResult != DialogResult.OK) { return(false); } } // using dlg } // if return(ScheduleTask(ownerForm, task)); } // RecordProgram
} // constructor #region Public methods public void LoadEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, EpgDatastore datastore, bool async = true) { SelectedService = service; LocalReferenceTime = localReferenceTime.TruncateToMinutes(); Datastore = datastore; // clean-up UI ClearEpgPrograms(); pictureChannelLogo.SetImage(service?.Logo.GetImage(Configuration.Logos.LogoSize.Size48)); BeginLoadEpgPrograms(async); } // LoadEpgPrograms
} // Refresh public bool EnableService(UiBroadcastService service, bool isInactive, bool isHidden) { if (service == null) { throw new ArgumentNullException(); } // not changed? if ((service.IsInactive == isInactive) && (service.IsHidden == isHidden)) { return(true); } // save requested status change service.IsInactive = isInactive; service.IsHidden = isHidden; // is int list? var item = ListView.Items[service.Key]; if (item == null) { return(false); } var remove = false; if ((isInactive) && (!Settings.ShowInactiveServices)) { remove = true; } if ((isHidden) && (!Settings.ShowHiddenServices)) { remove = true; } ListView.BeginUpdate(); if (remove) { ListView.Items.Remove(item); } else { EnableListItem(item, service, Settings.CurrentColumns); } // if-else ListView.EndUpdate(); return(true); } // EnableService
public static void ShowTvChannel(Form owner, UiBroadcastService service, bool defaultPlayer = true) { TvPlayer player; if (service == null) { return; } if (service.IsHidden) { return; } if (service.IsInactive) { var box = new ExceptionMessageBox() { Caption = owner.Text, Text = string.Format(Properties.Texts.ShowTvChannelInactiveService, service.DisplayName), Beep = true, Symbol = ExceptionMessageBoxSymbol.Question, Buttons = ExceptionMessageBoxButtons.YesNo, DefaultButton = ExceptionMessageBoxDefaultButton.Button2, }; if (box.Show(owner) != System.Windows.Forms.DialogResult.Yes) { return; } } // if var tvPlayerSettings = TvPlayersSettingsRegistration.Settings; if (defaultPlayer) { player = tvPlayerSettings.GetDefaultPlayer(); } else { using (var dialog = new SelectTvPlayerDialog()) { if (dialog.ShowDialog(owner) != DialogResult.OK) { return; } // if player = dialog.SelectedPlayer; } // using } // if-else ExternalTvPlayer.Launch(player, service, !tvPlayerSettings.DirectLaunch); } // ShowTvChannel
} // GetRecordTask public static RecordChannel GetRecordChannel(UiBroadcastService service) { var channel = new RecordChannel() { LogicalNumber = service.DisplayLogicalNumber, Name = service.DisplayName, Description = service.DisplayDescription, ServiceKey = service.Key, ServiceName = service.FullServiceName, ChannelUrl = service.LocationUrl, }; return(channel); } // GetRecordChannel
public static void ShowExtendedInfo(IWin32Window owner, UiBroadcastService service, EpgProgram epgProgram) { using (var dialog = new EpgExtendedInfoDialog()) { // TODO: EPG /* * dialog.ProgramInfo = new ProgramEpgInfo() * { * Service = service, * Base = epgProgram, * }; * dialog.ShowDialog(owner); */ } // using dialog } // ShowExtendedInfo
} // GetRecordDescription public static RecordAction GetRecordAction(UiBroadcastService service, EpgProgram epgProgram) { if (epgProgram == null) { throw new ArgumentNullException(nameof(epgProgram)); } var action = RecordAction.CreateWithDefaultValues(); var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); action.Filename = string.Format("{0} - {1}", service.DisplayName, epgProgram.Title); action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; action.SaveLocationName = defaultLocation.Name; action.SaveLocationPath = defaultLocation.Path; action.Recorder = GetDefaultRecorder(); return(action); } // GetRecordAction
} // GetColumnWidth private void EnableListItem(ListViewItem item, UiBroadcastService service, IList <UiBroadcastListColumn> columns) { if (service.IsInactive || service.IsHidden) { item.UseItemStyleForSubItems = (Settings.CurrentMode == View.Details); item.ForeColor = SystemColors.GrayText; item.Font = service.IsHidden ? FontNormalHidden : FontNormalNotAvailable; item.ImageKey = GetServiceLogoImageKey(service, true); } else { item.UseItemStyleForSubItems = false; item.ForeColor = ListView.ForeColor; item.Font = (Settings.CurrentMode == View.Details) ? FontDetails : FontNormal; item.ImageKey = GetServiceLogoImageKey(service, false); } // if-else // set certains columns as bold if ((Settings.CurrentMode == View.Details) && (!item.UseItemStyleForSubItems)) { var index = (int)0; foreach (var column in columns) { switch (column) { case UiBroadcastListColumn.Name: case UiBroadcastListColumn.NameAndNumber: case UiBroadcastListColumn.Number: case UiBroadcastListColumn.NumberAndName: case UiBroadcastListColumn.NumberAndNameCrlf: case UiBroadcastListColumn.OriginalName: case UiBroadcastListColumn.OriginalNumber: case UiBroadcastListColumn.UserName: case UiBroadcastListColumn.UserNumber: item.SubItems[index].Font = FontDetailsBold; break; } // switch index++; } // foreach } // if } // EnableListItem
} // ShowTvChannel public static void Launch(TvPlayer player, UiBroadcastService service, bool throughShortcut) { if (!File.Exists(player.Path)) { var ex = new FileNotFoundException(); throw new FileNotFoundException(ex.Message + "\r\n" + player.Path); } // if if (LaunchParamKeys == null) { LaunchParamKeys = new string[] { "Channel.Url", "Channel.Name", "Channel.Description", "Channel.Icon.Path", }; } // if var paramValues = new string[] { service.LocationUrl, service.DisplayName, service.DisplayDescription, service.Logo.GetLogoIconPath(), }; var parameters = ArgumentsManager.CreateParameters(LaunchParamKeys, paramValues, false); var arguments = ArgumentsManager.ExpandArguments(player.Arguments, parameters, TvPlayer.ParameterOpenBrace, TvPlayer.ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); var launchArguments = ArgumentsManager.JoinArguments(arguments); if (throughShortcut) { LaunchShortcut(player, service, launchArguments); } else { LaunchProcess(player, launchArguments); } // if-else } // Launch
} // GetDefaultRecorder private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) { if (service.IsInactive) { var box = new ExceptionMessageBox() { Caption = ownerForm.Text, Text = string.Format(Properties.Resources.RecordDeadTvChannel, service.DisplayName), Beep = true, Symbol = ExceptionMessageBoxSymbol.Question, Buttons = ExceptionMessageBoxButtons.YesNo, DefaultButton = ExceptionMessageBoxDefaultButton.Button2, }; if (box.Show(ownerForm) != DialogResult.Yes) { return(true); } } // if return(false); } // VerifyIsInactive
} // DisplayProgramData private void ChangeSelectedRow(int rowIndex) { if (rowIndex == SelectedRowIndex) { return; } SelectedRowIndex = rowIndex; SelectedService = (rowIndex >= 0)? ServicesList[rowIndex] : null; if (rowIndex == -1) { pictureProgramThumbnail.Visible = false; epgMiniGuide.Visible = false; return; } // if var epgPrograms = EpgPrograms[rowIndex]; var singleServiceDatastore = new EpgSingleServiceDatastore(SelectedService.FullServiceName, EpgPrograms[SelectedRowIndex]); epgMiniGuide.LoadEpgPrograms(SelectedService, LocalReferenceTime, singleServiceDatastore, false); epgMiniGuide.Visible = true; } // ChangeSelectedRow
} // Capabilities public ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait) { var request = GetExtendedInfoRequest(epgEvent); if (request == null) { return(null); } var movistarEpgInfoResponse = SendRequest <MovistarJsonEpgInfoResponse>(request); if (movistarEpgInfoResponse.Code != 0) { return(null); } var result = ToExtendedEpgEvent(movistarEpgInfoResponse.Data); result.UrlThumbnail = GetEpgProgramThumbnailUrl(service, epgEvent, portrait); return(result); } // GetEpgInfo
public static DialogResult ShowGrid(CommonBaseForm parentForm, IList <UiBroadcastService> list, UiBroadcastService currentService, EpgDatastore datastore) { using (var dialog = new EpgBasicGridDialog()) { dialog.ServicesList = list; dialog.InitialService = currentService; dialog.Datastore = datastore; return(dialog.ShowDialog(parentForm)); } // using } // ShowGrid
} // dataGridPrograms_SelectionChanged #endregion private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) { if (dialog.QueryCancel()) { return; } dialog.SetProgressText("Filling the list..."); var serviceRowIndex = -1; foreach (var service in ServicesList) { var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); var rowIndex = dataGridPrograms.Rows.Add(name); if (service.Key == InitialService?.Key) { serviceRowIndex = rowIndex; } // if // TODO: use ListManager view options for hidden and inactive programs (to show or no to show) if ((service.IsHidden) || (service.IsInactive)) { dataGridPrograms.Rows[rowIndex].DefaultCellStyle.ForeColor = SystemColors.GrayText; } // if } // foreach for (int index = 0; index < EpgPrograms.Length; index++) { int cellIndex; var row = dataGridPrograms.Rows[index]; var node = EpgPrograms[index]?.Requested; cellIndex = 1; while ((node != null) && (cellIndex < 4)) { var cell = row.Cells[cellIndex]; cell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; cell.Value = node.Program.Title; node = node.Next; cellIndex++; } // while // mark remaining cells as empty for (; cellIndex < 4; cellIndex++) { var cell = row.Cells[cellIndex]; cell.Style.ForeColor = SystemColors.GrayText; cell.Value = Properties.Texts.EpgNoInformationShort; cell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; } // for cellIndex } // for index SelectedService = null; IsGridReady = true; if (serviceRowIndex >= 0) { dataGridPrograms.CurrentCell = dataGridPrograms.Rows[serviceRowIndex].Cells[1]; } else { SelectedRowIndex = -1; } // if-else } // FillGrid
} // GetColumnDefaultWidth public static string GetColumnData(UiBroadcastService service, UiBroadcastListColumn column) { switch (column) { case UiBroadcastListColumn.Number: return(service.DisplayLogicalNumber); case UiBroadcastListColumn.Name: return(service.DisplayName); case UiBroadcastListColumn.NumberAndName: return(string.Format(Properties.ListViewManager.NumberAndNameFormat, service.DisplayLogicalNumber, service.DisplayName)); case UiBroadcastListColumn.NumberAndNameCrlf: return(string.Format(Properties.ListViewManager.NumberAndNameCrlfFormat, service.DisplayLogicalNumber, service.DisplayName)); case UiBroadcastListColumn.NameAndNumber: return(string.Format(Properties.ListViewManager.NameAndNumberFormat, service.DisplayName, service.DisplayLogicalNumber)); case UiBroadcastListColumn.Description: return(service.DisplayDescription); case UiBroadcastListColumn.DvbType: return(service.DisplayServiceType); case UiBroadcastListColumn.LocationUrl: return(service.DisplayLocationUrl); case UiBroadcastListColumn.ShortName: return(service.DisplayShortName); case UiBroadcastListColumn.Genre: return(service.DisplayGenre); case UiBroadcastListColumn.GenreCode: return(service.DisplayGenreCode); case UiBroadcastListColumn.ParentalRating: return(service.DisplayParentalRating); case UiBroadcastListColumn.ParentalRatingCode: return(service.DisplayParentalRatingCode); case UiBroadcastListColumn.ServiceId: return(service.ServiceName); case UiBroadcastListColumn.FullServiceId: return(service.FullServiceName); case UiBroadcastListColumn.UserName: return(service.UserDisplayName ?? ""); case UiBroadcastListColumn.UserNumber: return(service.UserLogicalNumber ?? Properties.Texts.ChannelNumberNone); case UiBroadcastListColumn.OriginalName: return(service.DisplayOriginalName); case UiBroadcastListColumn.OriginalNumber: return(service.ServiceLogicalNumber ?? Properties.Texts.ChannelNumberNone); case UiBroadcastListColumn.IsActive: return((service.IsInactive) ? Properties.Texts.No : Properties.Texts.Yes); case UiBroadcastListColumn.IsEnabled: return((service.IsHidden) ? Properties.Texts.No : Properties.Texts.Yes); case UiBroadcastListColumn.LockLevel: return(service.DisplayLockLevel); default: throw new IndexOutOfRangeException(); } // switch } // GetColumnData
} // constructor public ListSelectionChangedEventArgs(UiBroadcastService item) { Item = item; } // constructor