示例#1
0
            } // default constructor

            public AssignNumbersArgs(UiBroadcastDiscovery currentUiDiscovery, PackageDiscoveryRoot packageDiscovery, UiServiceProvider serviceProvider, bool highDefinitionPriority)
            {
                Current                = currentUiDiscovery;
                PackageDiscovery       = packageDiscovery;
                ServiceProvider        = serviceProvider;
                HighDefinitionPriority = highDefinitionPriority;
            } // constructor
示例#2
0
        }     // ServicesCount

        public static void ClearLogicalNumbers(UiBroadcastDiscovery uiDiscovery)
        {
            foreach (var service in uiDiscovery.Services)
            {
                service.ServiceLogicalNumber = null;
            } // foreach service
        }     // ClearLogicalNumbers
示例#3
0
        } // IsHighDefinitionTv

        private UiServicesLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority, bool clear = false)
        {
            UiDiscovery            = uiDiscovery;
            PackageDiscovery       = packageDiscovery;
            DefaultDomain          = defaultDomain;
            HighDefinitionPriority = highDefinitionPriority;
        } // constructor
示例#4
0
        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
示例#5
0
            } // default constructor

            public MergeEventArgs(UiBroadcastDiscovery downloadedUiDiscovery, UiBroadcastDiscovery currentUiDiscovery)
            {
                Downloaded = downloadedUiDiscovery;
                Current    = currentUiDiscovery;
            } // constructor
示例#6
0
        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
示例#7
0
        }     // 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
示例#8
0
        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