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