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(); }
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)); }
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); }
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); }
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") })); }
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") })); }
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); }
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); }
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(); }
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 } } }
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); } }
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); } }