예제 #1
0
        public async Task<IEnumerable<ChannelMediaInfo>> GetChannelItemMediaInfo(string id,
            CancellationToken cancellationToken)
        {
            var channelID = id.Split('_');
            var items = new List<ChannelMediaInfo>();

            using (var site = await _httpClient.Get(channelID[1] + "&formats=mp3,aac", CancellationToken.None).ConfigureAwait(false))
            {
                using (var reader = new StreamReader(site))
                {
                    while (!reader.EndOfStream)
                    {
                        var url = reader.ReadLine();
                        _logger.Debug("FILE NAME : " + url.Split('/').Last().Split('?').First());

                        var ext = Path.GetExtension(url.Split('/').Last().Split('?').First());

                        _logger.Debug("URL : " + url);
                        if (!string.IsNullOrEmpty(ext))
                        {
                            _logger.Debug("Extension : " + ext);
                            if (ext == ".pls")
                            {
                                try
                                {
                                    using (var value = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false))
                                    {
                                        var parser = new IniParser(value);
                                        var count = Convert.ToInt16(parser.GetSetting("playlist", "NumberOfEntries"));
                                        _logger.Debug("COUNT : " + count);
                                        for (var i = 0; i < count; i++)
                                        {
                                            var file = parser.GetSetting("playlist", "File" + count);
                                            _logger.Debug("FILE : " + count + " - " + file);

                                            items.Add(new ChannelMediaInfo
                                            {
                                                Path = file.ToLower()
                                            });
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _logger.Error(ex.ToString());
                                }
                            }
                            else if (ext == ".m3u")
                            {
                                try
                                {
                                    using (var value = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false))
                                    {
                                        using (var reader2 = new StreamReader(value))
                                        {
                                            while (!reader2.EndOfStream)
                                            {
                                                var url2 = reader2.ReadLine();
                                                items.Add(new ChannelMediaInfo
                                                {
                                                    Path = url2
                                                });
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _logger.Error(ex.ToString());
                                }
                            }
                            else
                            {
                                items.Add(new ChannelMediaInfo
                                {
                                    Path = url
                                });
                            }
                        }
                        else
                        {
                            _logger.Debug("Normal URL");

                            items.Add(new ChannelMediaInfo
                            {
                                Path = url
                            });
                        }
                    }
                }
            }

            return items;
        }