Example #1
0
        public async Task XtreamClient_OK(string url, CancellationToken cancellationToken = default)
        {
            var panelJsonData = await GetXtreamPanel(url);

            var mockHttpClientFactory = new Mock <Xtream.Client.IHttpClientFactory>();

            MockHttpClient(mockHttpClientFactory, panelJsonData);

            var xtreamJsonReader = new XtreamJsonReader(mockHttpClientFactory.Object);
            var connectionInfo   = new XtBasicConnectionFactory("http://server.tes", "", "").Create();
            var panel            = await xtreamJsonReader.GetFromApi <XtreamPanel>(connectionInfo, XtreamApiEnum.Panel_Api, cancellationToken);

            var mockXtreamClient = new Mock <IXtreamClient>();

            mockXtreamClient.Setup(x => x.GetPanelAsync(It.IsAny <ConnectionInfo>(), cancellationToken)).ReturnsAsync(panel);
            mockXtreamClient.Setup(x => x.GetLiveStreamsAsync(It.IsAny <ConnectionInfo>(), cancellationToken)).ReturnsAsync(panel.Available_Channels);
            mockXtreamClient.Setup(x => x.GetLiveCategoriesAsync(It.IsAny <ConnectionInfo>(), cancellationToken)).ReturnsAsync(panel.Categories.Live);

            var ds = new XtreamPlaylistDataSource
            {
                Authentication = new BasicAuthentication("user", "pwd"),
                Server         = UriAddress.For("http://test.tv")
            };

            var medias = await new XtreamDataSourceReader(ds, mockXtreamClient.Object).GetMediasAsync();

            medias.ShouldNotBeNull();
        }
Example #2
0
        public void Throw_MediaNotFoundException_if_not_exist()
        {
            var pl = new Playlist();

            pl.AddMedia(new Media {
                Id = 1, DisplayName = "name", Position = -1, Url = UriAddress.For("http://pl1.synker.ovh")
            });
            pl.AddMedia(new Media {
                Id = 2, DisplayName = "name2", Position = -1, Url = UriAddress.For("http://pl.synker.ovh")
            });
            Should.Throw <MediaNotFoundException>(() => pl.RemoveMedia(3));
        }
Example #3
0
        public void Media_with_some_url_are_equal()
        {
            var media1 = new Media {
                Id = 1, DisplayName = "name", Url = UriAddress.For("http://pl1.synker.ovh")
            };
            var media2 = new Media {
                Id = 2, DisplayName = "name2", Url = UriAddress.For("http://PL1.synker.ovh")
            };

            Assert.Equal(media1, media2);
            Assert.True(media1 == media2);
        }
Example #4
0
        public void PositionMedia_not_defined_Must_set_to_Max()
        {
            var pl = new Playlist();

            pl.AddMedia(new Media {
                Id = 1, DisplayName = "name", Position = -1, Url = UriAddress.For("http://pl1.synker.ovh")
            });
            pl.AddMedia(new Media {
                Id = 2, DisplayName = "name2", Position = -1, Url = UriAddress.For("http://pl.synker.ovh")
            });

            pl.Medias.First(x => x.Id == 2).Position.ShouldBe(1);
        }
Example #5
0
        public void Two_media_should_not_the_some_position()
        {
            var pl = new Playlist();

            pl.AddMedia(new Media {
                Id = 1, DisplayName = "name", Position = 1, Url = UriAddress.For("http://pl1.synker.ovh")
            });

            Should.Throw <MediaSomePositionException>(() =>
                                                      pl.AddMedia(new Media {
                Id = 2, DisplayName = "name2", Position = 1, Url = UriAddress.For("http://pl.synker.ovh")
            }));
        }
Example #6
0
        public void Must_throw_DuplicatedPlaylistMediaException()
        {
            var pl = new Playlist();

            pl.AddMedia(new Media {
                Id = 1, DisplayName = "name", Url = UriAddress.For("http://pl1.synker.ovh")
            });

            Should.Throw <DuplicatedPlaylistMediaException>(() =>
                                                            pl.AddMedia(new Media {
                Id = 2, DisplayName = "name2", Url = UriAddress.For("http://pl1.synker.ovh")
            }));
        }
Example #7
0
        public async Task Medias_Must_Have_DisplayNames(string url, int count)
        {
            var ds = new M3uPlaylistDataSource
            {
                Uri =
                    UriAddress.For(url)
            };

            var medias = await new M3UDataSourceReader(ds).GetMediasAsync();

            medias.ShouldNotBeNull();
            medias.Count.ShouldBe(count);
            medias.ShouldAllBe(x => x.DisplayName.Length > 0);
        }
Example #8
0
        protected async Task <List <Media> > PullMediasFromProviderAsync(StreamReader streamReader, CancellationToken cancellationToken)
        {
            var listChannels = new List <Media>();

            using (var stringReader = new StringReader(await streamReader.ReadToEndAsync()))
            {
                var line = stringReader.ReadLine();
                if (string.IsNullOrEmpty(line))
                {
                    return(listChannels);
                }
                var i = 1;
                //var isM3u = line.Equals(HeaderFile, StringComparison.OrdinalIgnoreCase);
                while ((line = await stringReader.ReadLineAsync()) != null)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    if (line != string.Empty && line.StartsWith(HeaderUrl))
                    {
                        var tab1 = line.Split(',');
                        //var tab2 = tab1[0].Split(' ');
                        //var live = tab2.FirstOrDefault().Equals(HeaderUrl + "0") || tab2.FirstOrDefault().Equals(HeaderUrl + "-1");
                        var channel = new Media
                        {
                            DisplayName = tab1.Last().Trim(),
                            Position    = i++,
                            //IsLive = live,
                            //OriginalHeaderLine = line
                        };

                        do
                        {
                            channel.Url = UriAddress.For(await stringReader.ReadLineAsync());
                        } while (string.IsNullOrWhiteSpace(channel.Url.Url));
                        // channel.StreamId = channel.StreamId;
                        GetTvg(tab1, channel);
                        listChannels.Add(channel);
                    }
                }
            }
            return(listChannels);
        }
Example #9
0
        public void TryAddMedia_Two_media_should_not_the_some_position()
        {
            var pl    = new Playlist();
            var media = new Media
            {
                Id          = 1,
                DisplayName = "name",
                Position    = 1,
                Url         = UriAddress.For("http://pl1.synker.ovh")
            };

            var result1 = pl.TryAddMedia(media, out List <ValidationResult> validationResult);

            result1.ShouldBe(true);
            validationResult.ShouldBeEmpty();

            var result = pl.TryAddMedia(media, out List <ValidationResult> validationResult2);

            result.ShouldBe(false);
            validationResult2.ShouldNotBeEmpty();
        }
Example #10
0
        public async Task <List <Media> > GetMediasAsync(CancellationToken cancellationToken = default)
        {
            var connectionInfo = _dataSource.GetConnection();
            var panelInfo      = await _xtreamClient.GetPanelAsync(connectionInfo, cancellationToken);

            var medias = await _xtreamClient.GetLiveStreamsAsync(connectionInfo, cancellationToken);

            if (medias == null)
            {
                return(new List <Media>());
            }

            return(medias.Select(x => new
            {
                success = UriAddress.TryFor(panelInfo.GenerateUrlFrom(x), out UriAddress uriAddress),
                media = x,
                url = uriAddress,
                labels = new List <Label> {
                    new Label {
                        Key = Media.KnowedLabelKeys.GroupKey, Value = x.Category_name
                    }
                }
            }
Example #11
0
        private void SeedPlaylists(SynkerDbContext context)
        {
            if (Data.Playlists.Count == 0)
            {
                Data.Playlists.Add(1, new Playlist {
                    Name = "playlist1", User = Data.Users[1]
                });
                Data.Playlists.Add(2, new Playlist {
                    Name = "test", User = Data.Users[1]
                });
                Data.Playlists.Add(3, new Playlist {
                    Name = "pl", User = Data.Users[1]
                });
                Data.Playlists.Add(4, new Playlist {
                    Name = "vip", User = Data.Users[2]
                });
                Data.Playlists.Add(5, new Playlist {
                    Name = "max", User = Data.Users[2], State = OnlineState.Disabled
                });

                for (int i = 1; i < 50; i++)
                {
                    Data.Medias.Add(i, new Media {
                        DisplayName = $"Medias {i}", Position = i, Url = UriAddress.For($"http://playlist/media{i}.ts")
                    });
                }

                Data.Playlists[4].AddRangeMedia(Data.Medias.Skip(0).Take(25).Select(x => x.Value).ToList());
                Data.Playlists[2].AddRangeMedia(Data.Medias.Skip(25).Take(15).Select(x => x.Value).ToList());
                Data.Playlists[3].AddRangeMedia(Data.Medias.Skip(40).Take(5).Select(x => x.Value).ToList());
            }

            foreach (var pl in Data.Playlists.OrderBy(x => x.Key).Select(x => x.Value))
            {
                context.Playlists.Add(pl);
            }
        }
Example #12
0
        private void SeedDataSources(SynkerDbContext context)
        {
            Data.DataSources.TryAdd(0, new M3uPlaylistDataSource
            {
                User        = Data.Users[2],
                Name        = "dsm3u_2",
                Uri         = UriAddress.For("http://tests.synker.ovh/m3u1"),
                State       = OnlineState.Disabled,
                CreatedDate = DateTime.UtcNow.AddMonths(-5)
            });

            Data.DataSources.TryAdd(1, new M3uPlaylistDataSource
            {
                User        = Data.Users[1],
                Name        = "dsm3u",
                Uri         = UriAddress.For("https://gist.githubusercontent.com/Fazzani/722f67c30ada8bac4602f62a2aaccff6/raw/032182a68311091617717168f22559c9993aa21a/playlist1.m3u"),
                CreatedDate = DateTime.UtcNow.AddDays(-2)
            });

            Data.DataSources.TryAdd(2, new XtreamPlaylistDataSource
            {
                User           = Data.Users[1],
                Name           = "ds_xt_1",
                Server         = UriAddress.For("https://gist.githubusercontent.com"),
                CreatedDate    = DateTime.UtcNow.AddMinutes(-13),
                Authentication = new BasicAuthentication("user_test", "pass_test")
            });

            Data.DataSources.TryAdd(3, new XtreamPlaylistDataSource
            {
                User           = Data.Users[2],
                Name           = "ds_xt_2",
                CreatedDate    = DateTime.UtcNow.AddYears(-2),
                Authentication = new BasicAuthentication("user", "pass"),
                Server         = UriAddress.For("http://synkertest.fr")
            });

            for (int i = 4, j = 23; i < 23; i++, j++)
            {
                var id = i % Data.Users.Keys.Count;

                Data.DataSources.TryAdd(i, new M3uPlaylistDataSource
                {
                    User        = Data.Users[id],
                    Name        = $"ds_{DateTime.Now}_{i}",
                    CreatedDate = DateTime.UtcNow.AddYears(-i),
                    State       = i % 2 == 0 ? OnlineState.Disabled : OnlineState.Enabled,
                    Uri         = UriAddress.For($"http://tests.synker.ovh/m3u{i}"),
                });

                Data.DataSources.TryAdd(j, new XtreamPlaylistDataSource
                {
                    User           = Data.Users[id],
                    Name           = $"ds_{DateTime.Now}_{j}",
                    CreatedDate    = DateTime.UtcNow.AddYears(-j),
                    State          = j % 2 == 0 ? OnlineState.Disabled : OnlineState.Enabled,
                    Server         = UriAddress.For($"http://synkertest{j}.fr"),
                    Authentication = new BasicAuthentication($"user{j}", $"pass{j}")
                });
            }

            foreach (var ds in Data.DataSources.OrderBy(x => x.Key).Select(x => x.Value))
            {
                context.PlaylistDataSources.Add(ds);
            }
        }