} // default constructor public AssignNumbersArgs(UiBroadcastDiscovery currentUiDiscovery, PackageDiscoveryRoot packageDiscovery, UiServiceProvider serviceProvider, bool highDefinitionPriority) { Current = currentUiDiscovery; PackageDiscovery = packageDiscovery; ServiceProvider = serviceProvider; HighDefinitionPriority = highDefinitionPriority; } // constructor
} // ServicesCount public static void ClearLogicalNumbers(UiBroadcastDiscovery uiDiscovery) { foreach (var service in uiDiscovery.Services) { service.ServiceLogicalNumber = null; } // foreach service } // ClearLogicalNumbers
} // IsHighDefinitionTv private UiServicesLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority, bool clear = false) { UiDiscovery = uiDiscovery; PackageDiscovery = packageDiscovery; DefaultDomain = defaultDomain; HighDefinitionPriority = highDefinitionPriority; } // constructor
public static UiBroadcastDiscoveryMergeResult Merge(IWin32Window owner, UiBroadcastDiscovery oldDiscovery, UiBroadcastDiscovery newDiscovery) { var result = UiBroadcastDiscovery.Merge(oldDiscovery, newDiscovery); if (oldDiscovery != null) { using (var dialog = new UiBroadcastDiscoveryMergeResultDialog()) { dialog.MergeResult = result; dialog.ShowDialog(owner); } // using dialog } // if return(result); } // Merge
} // default constructor public MergeEventArgs(UiBroadcastDiscovery downloadedUiDiscovery, UiBroadcastDiscovery currentUiDiscovery) { Downloaded = downloadedUiDiscovery; Current = currentUiDiscovery; } // constructor
public UiBroadcastDiscovery Download(Form ownerForm, UiServiceProvider serviceProvider, UiBroadcastDiscovery currentUiDiscovery, bool fromCache, bool?highDefinitionPriority = null) { UiBroadcastDiscovery uiDiscovery; try { uiDiscovery = null; if (fromCache) { OnBeforeCacheLoad(this, EventArgs.Empty); var cachedDiscovery = AppUiConfiguration.Current.Cache.LoadXmlDocument <UiBroadcastDiscovery>("UiBroadcastDiscovery", serviceProvider.Key); OnAfterCacheLoad(this, new CacheEventArgs(cachedDiscovery)); if (cachedDiscovery != null) { uiDiscovery = cachedDiscovery.Document; } } // if if (uiDiscovery == null) { OnBeforeDownload(this, EventArgs.Empty); var downloader = new UiDvbStpEnhancedDownloader() { Request = new UiDvbStpEnhancedDownloadRequest(2) { MulticastAddress = IPAddress.Parse(serviceProvider.Offering.Push[0].Address), MulticastPort = serviceProvider.Offering.Push[0].Port, Description = Properties.Texts.BroadcastObtainingList, DescriptionParsing = Properties.Texts.BroadcastParsingList, AllowXmlExtraWhitespace = false, XmlNamespaceReplacer = NamespaceUnification.Replacer, #if DEBUG DumpToFolder = AppUiConfiguration.Current.Folders.Cache #endif }, TextUserCancelled = Properties.Texts.UserCancelListRefresh, TextDownloadException = Properties.Texts.BroadcastListUnableRefresh, }; downloader.Request.AddPayload(0x02, null, Properties.Texts.Payload02DisplayName, typeof(BroadcastDiscoveryRoot)); downloader.Request.AddPayload(0x05, null, Properties.Texts.Payload05DisplayName, typeof(PackageDiscoveryRoot)); downloader.Download(ownerForm); OnAfterDownload(this, new DownloadEventArgs(downloader)); if (!downloader.IsOk) { return(null); } var xmlDiscovery = downloader.Request.Payloads[0].XmlDeserializedData as BroadcastDiscoveryRoot; uiDiscovery = new UiBroadcastDiscovery(xmlDiscovery, serviceProvider.DomainName, downloader.Request.Payloads[0].SegmentVersion); OnBeforeMerge(this, new MergeEventArgs(uiDiscovery, currentUiDiscovery)); UiBroadcastDiscoveryMergeResultDialog.Merge(ownerForm, currentUiDiscovery, uiDiscovery); OnAfterMerge(this, new MergeEventArgs(uiDiscovery, currentUiDiscovery)); var packageDiscovery = downloader.Request.Payloads[1].XmlDeserializedData as PackageDiscoveryRoot; highDefinitionPriority = highDefinitionPriority.HasValue ? highDefinitionPriority.Value : !AppUiConfiguration.Current.User.ChannelNumberStandardDefinitionPriority; OnBeforeAssignNumbers(this, new AssignNumbersArgs(uiDiscovery, packageDiscovery, serviceProvider, highDefinitionPriority.Value)); UiServicesLogicalNumbers.AssignLogicalNumbers(uiDiscovery, packageDiscovery, serviceProvider.DomainName, highDefinitionPriority.Value); OnAfterAssignNumbers(this, new AssignNumbersArgs(uiDiscovery, packageDiscovery, serviceProvider, highDefinitionPriority.Value)); AppUiConfiguration.Current.Cache.SaveXml("PackageDiscovery", serviceProvider.Key, 0, packageDiscovery); AppUiConfiguration.Current.Cache.SaveXml("UiBroadcastDiscovery", serviceProvider.Key, uiDiscovery.Version, uiDiscovery); } // if return(uiDiscovery); } catch (Exception ex) { OnHandleException(this, new HandleExceptionEventArgs(ownerForm, null, Properties.Texts.BroadcastListUnableRefresh, ex)); return(null); } // try-catch } // Download
} // ClearLogicalNumbers public static void AssignLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority = true) { var aux = new UiServicesLogicalNumbers(uiDiscovery, packageDiscovery, defaultDomain, highDefinitionPriority); aux.Assign(); } // AssignLogicalNumbers
public static UiBroadcastDiscoveryMergeResult Merge(UiBroadcastDiscovery oldDiscovery, UiBroadcastDiscovery newDiscovery) { if (newDiscovery == null) { throw new ArgumentNullException("newDiscovery"); } if (oldDiscovery == null) { return(new UiBroadcastDiscoveryMergeResult() { RemovedServices = new List <UiBroadcastService>(), NewServices = newDiscovery.Services.AsReadOnly(), ChangedServices = new List <UiBroadcastService>(), CountNotChanged = -1, IsEmpty = (newDiscovery.Services.Count == 0) }); } // if var removedServices = new List <UiBroadcastService>(); var newServices = new List <UiBroadcastService>(); var changedServices = new List <UiBroadcastService>(); int notChanged = 0; oldDiscovery.BuildServicesDictionary(); newDiscovery.BuildServicesDictionary(); // detect new services and changes foreach (var service in newDiscovery.Services) { UiBroadcastService oldService; if (oldDiscovery.ServicesDictionary.TryGetValue(service.Key, out oldService)) { if (service.IsSameService(oldService)) { notChanged++; service.TransferMergeProperties(oldService); } else { changedServices.Add(service); } // if-else } else { newServices.Add(service); } // if-else } // foreach service // detect removed services foreach (var service in oldDiscovery.Services) { if (!newDiscovery.ServicesDictionary.ContainsKey(service.Key)) { removedServices.Add(service); } // if } // foreach service oldDiscovery.ServicesDictionary = null; newDiscovery.ServicesDictionary = null; var result = new UiBroadcastDiscoveryMergeResult() { RemovedServices = removedServices.AsReadOnly(), NewServices = newServices.AsReadOnly(), ChangedServices = changedServices.AsReadOnly(), CountNotChanged = notChanged, IsEmpty = (newDiscovery.Services.Count == 0) }; return(result); } // Merge