Example #1
0
        private void FillFromDeviceNode(SatIpTunerHostInfo info, XmlReader reader)
        {
            reader.MoveToContent();

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    switch (reader.LocalName)
                    {
                    case "UDN":
                    {
                        info.DeviceId = reader.ReadElementContentAsString();
                        break;
                    }

                    case "friendlyName":
                    {
                        info.FriendlyName = reader.ReadElementContentAsString();
                        break;
                    }

                    case "satip:X_SATIPCAP":
                    case "X_SATIPCAP":
                    {
                        // <satip:X_SATIPCAP xmlns:satip="urn:ses-com:satip">DVBS2-2</satip:X_SATIPCAP>
                        var value = reader.ReadElementContentAsString() ?? string.Empty;
                        var parts = value.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
                        if (parts.Length == 2)
                        {
                            int intValue;
                            if (int.TryParse(parts[1], NumberStyles.Any, CultureInfo.InvariantCulture, out intValue))
                            {
                                info.TunersAvailable = intValue;
                            }

                            if (int.TryParse(parts[0].Substring(parts[0].Length - 1), NumberStyles.Any, CultureInfo.InvariantCulture, out intValue))
                            {
                                info.Tuners = intValue;
                            }
                        }
                        break;
                    }

                    case "satip:X_SATIPM3U":
                    case "X_SATIPM3U":
                    {
                        // <satip:X_SATIPM3U xmlns:satip="urn:ses-com:satip">/channellist.lua?select=m3u</satip:X_SATIPM3U>
                        info.M3UUrl = reader.ReadElementContentAsString();
                        break;
                    }

                    default:
                        reader.Skip();
                        break;
                    }
                }
            }
        }
Example #2
0
        public async Task <SatIpTunerHostInfo> GetInfo(string url, CancellationToken cancellationToken)
        {
            Uri        locationUri      = new Uri(url);
            string     devicetype       = "";
            string     friendlyname     = "";
            string     uniquedevicename = "";
            string     manufacturer     = "";
            string     manufacturerurl  = "";
            string     modelname        = "";
            string     modeldescription = "";
            string     modelnumber      = "";
            string     modelurl         = "";
            string     serialnumber     = "";
            string     presentationurl  = "";
            string     capabilities     = "";
            string     m3u      = "";
            var        document = XDocument.Load(locationUri.AbsoluteUri);
            var        xnm      = new XmlNamespaceManager(new NameTable());
            XNamespace n1       = "urn:ses-com:satip";
            XNamespace n0       = "urn:schemas-upnp-org:device-1-0";

            xnm.AddNamespace("root", n0.NamespaceName);
            xnm.AddNamespace("satip:", n1.NamespaceName);
            if (document.Root != null)
            {
                var deviceElement = document.Root.Element(n0 + "device");
                if (deviceElement != null)
                {
                    var devicetypeElement = deviceElement.Element(n0 + "deviceType");
                    if (devicetypeElement != null)
                    {
                        devicetype = devicetypeElement.Value;
                    }
                    var friendlynameElement = deviceElement.Element(n0 + "friendlyName");
                    if (friendlynameElement != null)
                    {
                        friendlyname = friendlynameElement.Value;
                    }
                    var manufactureElement = deviceElement.Element(n0 + "manufacturer");
                    if (manufactureElement != null)
                    {
                        manufacturer = manufactureElement.Value;
                    }
                    var manufactureurlElement = deviceElement.Element(n0 + "manufacturerURL");
                    if (manufactureurlElement != null)
                    {
                        manufacturerurl = manufactureurlElement.Value;
                    }
                    var modeldescriptionElement = deviceElement.Element(n0 + "modelDescription");
                    if (modeldescriptionElement != null)
                    {
                        modeldescription = modeldescriptionElement.Value;
                    }
                    var modelnameElement = deviceElement.Element(n0 + "modelName");
                    if (modelnameElement != null)
                    {
                        modelname = modelnameElement.Value;
                    }
                    var modelnumberElement = deviceElement.Element(n0 + "modelNumber");
                    if (modelnumberElement != null)
                    {
                        modelnumber = modelnumberElement.Value;
                    }
                    var modelurlElement = deviceElement.Element(n0 + "modelURL");
                    if (modelurlElement != null)
                    {
                        modelurl = modelurlElement.Value;
                    }
                    var serialnumberElement = deviceElement.Element(n0 + "serialNumber");
                    if (serialnumberElement != null)
                    {
                        serialnumber = serialnumberElement.Value;
                    }
                    var uniquedevicenameElement = deviceElement.Element(n0 + "UDN");
                    if (uniquedevicenameElement != null)
                    {
                        uniquedevicename = uniquedevicenameElement.Value;
                    }
                    var presentationUrlElement = deviceElement.Element(n0 + "presentationURL");
                    if (presentationUrlElement != null)
                    {
                        presentationurl = presentationUrlElement.Value;
                    }
                    var capabilitiesElement = deviceElement.Element(n1 + "X_SATIPCAP");
                    if (capabilitiesElement != null)
                    {
                        capabilities = capabilitiesElement.Value;
                    }
                    var m3uElement = deviceElement.Element(n1 + "X_SATIPM3U");
                    if (m3uElement != null)
                    {
                        m3u = m3uElement.Value;
                    }
                }
            }

            var result = new SatIpTunerHostInfo
            {
                Url             = url,
                Id              = uniquedevicename,
                IsEnabled       = true,
                Type            = SatIpHost.DeviceType,
                Tuners          = 1,
                TunersAvailable = 1,
                M3UUrl          = m3u
            };

            result.FriendlyName = friendlyname;
            if (string.IsNullOrWhiteSpace(result.Id))
            {
                throw new NotImplementedException();
            }

            else if (!result.M3UUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                var fullM3uUrl = url.Substring(0, url.LastIndexOf('/'));
                result.M3UUrl = fullM3uUrl + "/" + result.M3UUrl.TrimStart('/');
            }

            _logger.Debug("SAT device result: {0}", _json.SerializeToString(result));

            return(result);
        }
Example #3
0
        public async Task<SatIpTunerHostInfo> GetInfo(string url, CancellationToken cancellationToken)
        {
            Uri locationUri = new Uri(url);
            string devicetype = "";
            string friendlyname = "";
            string uniquedevicename = "";
            string manufacturer = "";
            string manufacturerurl = "";
            string modelname = "";
            string modeldescription = "";
            string modelnumber = "";
            string modelurl = "";
            string serialnumber = "";
            string presentationurl = "";
            string capabilities = "";
            string m3u = "";
            var document = XDocument.Load(locationUri.AbsoluteUri);
            var xnm = new XmlNamespaceManager(new NameTable());
            XNamespace n1 = "urn:ses-com:satip";
            XNamespace n0 = "urn:schemas-upnp-org:device-1-0";
            xnm.AddNamespace("root", n0.NamespaceName);
            xnm.AddNamespace("satip:", n1.NamespaceName);
            if (document.Root != null)
            {
                var deviceElement = document.Root.Element(n0 + "device");
                if (deviceElement != null)
                {
                    var devicetypeElement = deviceElement.Element(n0 + "deviceType");
                    if (devicetypeElement != null)
                        devicetype = devicetypeElement.Value;
                    var friendlynameElement = deviceElement.Element(n0 + "friendlyName");
                    if (friendlynameElement != null)
                        friendlyname = friendlynameElement.Value;
                    var manufactureElement = deviceElement.Element(n0 + "manufacturer");
                    if (manufactureElement != null)
                        manufacturer = manufactureElement.Value;
                    var manufactureurlElement = deviceElement.Element(n0 + "manufacturerURL");
                    if (manufactureurlElement != null)
                        manufacturerurl = manufactureurlElement.Value;
                    var modeldescriptionElement = deviceElement.Element(n0 + "modelDescription");
                    if (modeldescriptionElement != null)
                        modeldescription = modeldescriptionElement.Value;
                    var modelnameElement = deviceElement.Element(n0 + "modelName");
                    if (modelnameElement != null)
                        modelname = modelnameElement.Value;
                    var modelnumberElement = deviceElement.Element(n0 + "modelNumber");
                    if (modelnumberElement != null)
                        modelnumber = modelnumberElement.Value;
                    var modelurlElement = deviceElement.Element(n0 + "modelURL");
                    if (modelurlElement != null)
                        modelurl = modelurlElement.Value;
                    var serialnumberElement = deviceElement.Element(n0 + "serialNumber");
                    if (serialnumberElement != null)
                        serialnumber = serialnumberElement.Value;
                    var uniquedevicenameElement = deviceElement.Element(n0 + "UDN");
                    if (uniquedevicenameElement != null) uniquedevicename = uniquedevicenameElement.Value;
                    var presentationUrlElement = deviceElement.Element(n0 + "presentationURL");
                    if (presentationUrlElement != null) presentationurl = presentationUrlElement.Value;
                    var capabilitiesElement = deviceElement.Element(n1 + "X_SATIPCAP");
                    if (capabilitiesElement != null) capabilities = capabilitiesElement.Value;
                    var m3uElement = deviceElement.Element(n1 + "X_SATIPM3U");
                    if (m3uElement != null) m3u = m3uElement.Value;
                }
            }

            var result = new SatIpTunerHostInfo
            {
                Url = url,
                Id = uniquedevicename,
                IsEnabled = true,
                Type = SatIpHost.DeviceType,
                Tuners = 1,
                TunersAvailable = 1,
                M3UUrl = m3u
            };

            result.FriendlyName = friendlyname;
            if (string.IsNullOrWhiteSpace(result.Id))
            {
                throw new NotImplementedException();
            }

            else if (!result.M3UUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                var fullM3uUrl = url.Substring(0, url.LastIndexOf('/'));
                result.M3UUrl = fullM3uUrl + "/" + result.M3UUrl.TrimStart('/');
            }

            _logger.Debug("SAT device result: {0}", _json.SerializeToString(result));

            return result;
        }
Example #4
0
        public async Task <SatIpTunerHostInfo> GetInfo(string url, CancellationToken cancellationToken)
        {
            var result = new SatIpTunerHostInfo
            {
                Url             = url,
                IsEnabled       = true,
                Type            = SatIpHost.DeviceType,
                Tuners          = 1,
                TunersAvailable = 1
            };

            using (var stream = await _httpClient.Get(url, cancellationToken).ConfigureAwait(false))
            {
                using (var streamReader = new StreamReader(stream))
                {
                    // Use XmlReader for best performance
                    using (var reader = XmlReader.Create(streamReader))
                    {
                        reader.MoveToContent();

                        // Loop through each element
                        while (reader.Read())
                        {
                            if (reader.NodeType == XmlNodeType.Element)
                            {
                                switch (reader.Name)
                                {
                                case "device":
                                    using (var subtree = reader.ReadSubtree())
                                    {
                                        FillFromDeviceNode(result, subtree);
                                    }
                                    break;

                                default:
                                    reader.Skip();
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            if (string.IsNullOrWhiteSpace(result.DeviceId))
            {
                throw new NotImplementedException();
            }

            // Device hasn't implemented an m3u list
            if (string.IsNullOrWhiteSpace(result.M3UUrl))
            {
                result.IsEnabled = false;
            }

            else if (!result.M3UUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                var fullM3uUrl = url.Substring(0, url.LastIndexOf('/'));
                result.M3UUrl = fullM3uUrl + "/" + result.M3UUrl.TrimStart('/');
            }

            _logger.Debug("SAT device result: {0}", _json.SerializeToString(result));

            return(result);
        }