Пример #1
0
        public async Task <IActionResult> DiffAsync([FromBody] PlaylistPostModel playlistPostModel, CancellationToken cancellationToken = default)
        {
            //TODO: Déduire le provider from playlist (isXtream => xtreamProvider, m3u ou tvlist)
            // Load dynmaiquement all providers (singleton)
            PlaylistProvider <Playlist <TvgMedia>, TvgMedia> providerInstance = null;

            try
            {
                providerInstance = _providerFactory.CreateInstance(playlistPostModel.Url, playlistPostModel.Provider);
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }

            try
            {
                var user = await _dbContext.Users.FindAsync(new object[] { UserId }, cancellationToken);

                if (user == null)
                {
                    return(BadRequest($"User {this.UserEmail} not found"));
                }

                var playlist = await _dbContext.Playlist
                               .FirstOrDefaultAsync(x => x.SynkConfig.Url == playlistPostModel.Url, cancellationToken) ?? new Playlist
                {
                    UserId       = user.Id,
                    Freindlyname = playlistPostModel.Freindlyname,
                    Status       = playlistPostModel.Status,
                    SynkConfig   = new SynkConfig {
                        Url = playlistPostModel.Url, Provider = playlistPostModel.Provider
                    }
                };

                using (providerInstance)
                {
                    var pl = await _playlistService
                             .DiffWithSourceAsync(() => playlist, providerInstance, cancellationToken : cancellationToken);

                    return(Ok(pl));
                }
            }
            catch (HttpRequestException)
            {
                throw new BusinessException($"Playlist url {playlistPostModel.Url} not reachable");
            }
        }
Пример #2
0
        public async Task <IActionResult> ImportFromUrl([FromBody] PlaylistPostModel playlistPostModel, CancellationToken cancellationToken)
        {
            //Vérifier si la playlist existe-elle avant
            var stopwatch = Stopwatch.StartNew();

            PlaylistProvider <Playlist <TvgMedia>, TvgMedia> providerInstance = null;

            try
            {
                providerInstance = _providerFactory.CreateInstance(playlistPostModel.Url, playlistPostModel.Provider);
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }

            using (providerInstance)
            {
                var user = await _dbContext.Users.FindAsync(new object[] { UserId }, cancellationToken);

                if (user == null)
                {
                    return(BadRequest($"User {this.UserEmail} not found"));
                }

                var pl = await _playlistService.SynkPlaylistAsync(() => new Playlist
                {
                    UserId       = user.Id,
                    Freindlyname = playlistPostModel.Freindlyname,
                    Status       = PlaylistStatus.Enabled,
                    SynkConfig   = new SynkConfig {
                        Url = playlistPostModel.Url
                    },
                    Tags = new Dictionary <string, string> {
                        { PlaylistTags.ImportProvider, playlistPostModel.Provider }
                    }
                }, providerInstance, _xtreamService.IsXtreamPlaylist(playlistPostModel.Url), cancellationToken : cancellationToken);

                ClearCache();

                stopwatch.Stop();
                _logger.LogInformation($"Elapsed time : {stopwatch.Elapsed.ToString("c")}");

                var model = PlaylistModel.ToLightModel(pl, Url);
                return(Created(model.PublicUrl, model));
            }
        }
Пример #3
0
        public IActionResult Add(PlaylistPostModel model)
        {
            if (model is null)
            {
                return(Redirect(""));
            }

            //Playlist
            var playlist = _context.Playlists.Add(new Domain.Entities.Playlist
            { /*CreatedBy = _userManager.FindByIdAsync(model.UserId.ToString()).Result,*/
                Title       = model.Title,
                CreatedById = model.UserId,
                CreatedOn   = DateTime.Now,
                PublishedOn = DateTime.Now,
                UpdatedOn   = DateTime.Now,
                Plays       = 0,
                Description = ""
            });

            _context.SaveChanges();

            // UserPlaylist
            _context.UserPlaylist.Add(new UserPlaylist {
                UserId = model.UserId, PlaylistId = playlist.Entity.PlaylistId
            });
            _context.SaveChanges();

            // TrackPlaylist
            foreach (var trackId in model.TracksId)
            {
                _context.PlaylistTrack.Add(new PlaylistTrack {
                    PlaylistId = playlist.Entity.PlaylistId, TrackId = trackId
                });
            }
            _context.SaveChanges();

            return(Redirect("/debug"));
        }
Пример #4
0
        public async Task <IActionResult> SynkAsync([FromBody] PlaylistPostModel playlistPostModel, CancellationToken cancellationToken = default)
        {
            var user = await _dbContext.Users.FindAsync(new object[] { UserId }, cancellationToken);

            if (user == null)
            {
                return(BadRequest($"User {this.UserEmail} not found"));
            }

            var playlist = _dbContext.Playlist.AsNoTracking().FirstOrDefault(x => x.SynkConfig.Url == playlistPostModel.Url) ?? new Playlist
            {
                UserId       = user.Id,
                Freindlyname = playlistPostModel.Freindlyname,
                Status       = playlistPostModel.Status,
                SynkConfig   = new SynkConfig {
                    Url = playlistPostModel.Url, Provider = playlistPostModel.Provider
                }
            };

            var pl = await _playlistService.SynkPlaylistAsync(playlist, true, cancellationToken : cancellationToken);

            return(CreatedAtRoute(nameof(SynkAsync), new { id = UTF8Encoding.UTF8.EncodeBase64(pl.UniqueId.ToString()) }, null));
        }