public async Task <IActionResult> Import(string playlistName, string playlistUrl, string provider, IFormFile file, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(playlistName)) { throw new ArgumentNullException(nameof(provider)); } if (string.IsNullOrEmpty(playlistName)) { playlistName = file.FileName.Replace(Path.GetExtension(file.FileName), string.Empty); //TODO : catch all ArgumentException et les passer en BadRequest } //Vérifier si la playlist existe bien avant PlaylistProvider <Playlist <TvgMedia>, TvgMedia> providerInstance = null; try { providerInstance = _providerFactory.CreateInstance(playlistUrl, provider); } catch (Exception ex) { return(BadRequest(ex.Message)); } var playlistStream = file.OpenReadStream(); if (string.IsNullOrEmpty(playlistUrl)) { //TODO : Save file and get Url throw new ApplicationException("Import playlist from file not supported yet !!"); } 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 = playlistName, Status = PlaylistStatus.Enabled, SynkConfig = null, Tags = new Dictionary <string, string> { { PlaylistTags.ImportProvider, provider } } }, providerInstance, _xtreamService.IsXtreamPlaylist(playlistUrl), true, cancellationToken); ClearCache(); var result = PlaylistModel.ToLightModel(pl, Url); return(Created(result.PublicUrl, result)); } }
public async Task <IActionResult> GetAsync(string id, [FromQuery] bool light = true, CancellationToken cancellationToken = default) { var idGuid = GetInternalPlaylistId(id); var playlist = await _dbContext.Playlist.FirstOrDefaultAsync(x => x.UniqueId == idGuid, cancellationToken); if (playlist == null) { return(NotFound(id)); } //var tmp = playlist.TvgMedias.Where(x => x.Name.Contains("SPORTS MAX") && x.Group.Equals("beIN SPORTS")); //foreach (var item in tmp) //{ // if (item.Name.Contains('1')) // { // item.Tvg.Id = "max1"; // item.Tvg.Name = "max1"; // item.Tvg.TvgIdentify = "mena_sports/max1"; // item.Tvg.TvgSiteSource = "Bein.net"; // } // else if (item.Name.Contains('2')) // { // item.Tvg.Id = "max2"; // item.Tvg.Name = "max2"; // item.Tvg.TvgIdentify = "mena_sports/max2"; // item.Tvg.TvgSiteSource = "Bein.net"; // } // else if (item.Name.Contains('3')) // { // item.Tvg.Id = "max3"; // item.Tvg.Name = "max3"; // item.Tvg.TvgIdentify = "mena_sports/max3"; // item.Tvg.TvgSiteSource = "Bein.net"; // } // else if (item.Name.Contains('4')) // { // item.Tvg.Id = "max4"; // item.Tvg.Name = "max4"; // item.Tvg.TvgIdentify = "mena_sports/max4"; // item.Tvg.TvgSiteSource = "Bein.net"; // } //} //await _dbContext.SaveChangesAsync(cancellationToken); var res = light ? Ok(PlaylistModel.ToLightModel(playlist, Url)) : Ok(PlaylistModel.ToModel(playlist, Url)); return(res); }
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 async Task <IActionResult> ListAsync([FromBody] QueryListBaseModel query, [FromQuery] bool light = true, CancellationToken cancellationToken = default) { var user = await _dbContext.Users.FindAsync(new object[] { UserId }, cancellationToken); if (user == null) { _logger.LogError($"User {this.UserEmail} not founded"); return(BadRequest($"User {this.UserEmail} not found")); } var plCacheKey = $"{UserCachePlaylistKey}_{query.GetHashCode()}_{light}"; var playlists = await _memoryCache.GetOrCreateAsync(plCacheKey, async entry => { if (_memoryCache.TryGetValue(UserCachePlaylistKey, out List <string> list)) { list.Add(UserCachePlaylistKey); } else { list = new List <string> { plCacheKey }; } _memoryCache.Set(UserCachePlaylistKey, list); entry.SlidingExpiration = TimeSpan.FromHours(2); return(await Task.Run(() => { var response = _dbContext.Playlist .Where(x => x.UserId == user.Id) .OrderByDescending(x => x.Id) .Select(pl => light ? PlaylistModel.ToLightModel(pl, Url) : PlaylistModel.ToModel(pl, Url)) .GetPaged(query.PageNumber, query.PageSize); return response; })); }); return(new OkObjectResult(playlists)); }