public async Task <List <Media> > GetYoutubePlaylist(Playlist playlist, CTDbContext _context) { List <Media> newMedia = new List <Media>(); CTGrpc.JsonString jsonString = null; CTGrpc.JsonString metadata = new CTGrpc.JsonString { Json = playlist.JsonMetadata != null?playlist.JsonMetadata.ToString() : "" }; try { jsonString = await _rpcClient.PythonServerClient.GetYoutubePlaylistRPCAsync(new CTGrpc.PlaylistRequest { Url = playlist.PlaylistIdentifier, Metadata = metadata }); } catch (RpcException e) { if (e.Status.StatusCode == StatusCode.InvalidArgument) { if (e.Status.Detail == "INVALID_PLAYLIST_IDENTIFIER") { // Notification to Instructor. } GetLogger().LogError(e.Message); } return(newMedia); } JArray jArray = JArray.Parse(jsonString.Json); foreach (JObject jObject in jArray) { // Check if there is a valid videoId, and for the same playlist the same media does not exist. if (jObject["videoId"].ToString().Length > 0 && !await _context.Medias.Where(m => m.UniqueMediaIdentifier == jObject["videoId"].ToString() && m.SourceType == playlist.SourceType && m.PlaylistId == playlist.Id).AnyAsync()) { newMedia.Add(new Media { JsonMetadata = jObject, SourceType = playlist.SourceType, PlaylistId = playlist.Id, UniqueMediaIdentifier = jObject["videoId"].ToString() }); } } newMedia.ForEach(m => m.Name = GetMediaName(m)); await _context.Medias.AddRangeAsync(newMedia); await _context.SaveChangesAsync(); return(newMedia); }
public async Task <List <Media> > GetKalturaPlaylist(Playlist playlist, CTDbContext _context) { List <Media> newMedia = new List <Media>(); CTGrpc.JsonString jsonString = null; try { jsonString = await _rpcClient.PythonServerClient.GetKalturaChannelEntriesRPCAsync(new CTGrpc.PlaylistRequest { Url = playlist.PlaylistIdentifier }); } catch (RpcException e) { if (e.Status.StatusCode == StatusCode.InvalidArgument) { if (e.Status.Detail == "INVALID_PLAYLIST_IDENTIFIER") { // Notification to Instructor. } _logger.LogError(e.Message); } return(newMedia); } JArray jArray = JArray.Parse(jsonString.Json); foreach (JObject jObject in jArray) { // Check if there is a valid Id, and for the same playlist the same media does not exist. if (jObject["id"].ToString().Length > 0 && !await _context.Medias.Where(m => m.UniqueMediaIdentifier == jObject["id"].ToString() && m.SourceType == playlist.SourceType && m.PlaylistId == playlist.Id).AnyAsync()) { newMedia.Add(new Media { JsonMetadata = jObject, SourceType = playlist.SourceType, PlaylistId = playlist.Id, UniqueMediaIdentifier = jObject["id"].ToString(), CreatedAt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddSeconds(jObject["createdAt"].ToObject <int>()) }); } } newMedia.ForEach(m => m.Name = GetMediaName(m)); await _context.Medias.AddRangeAsync(newMedia); await _context.SaveChangesAsync(); return(newMedia); }
public async Task <List <Media> > GetEchoPlaylist(Playlist playlist, CTDbContext _context) { List <Media> newMedia = new List <Media>(); CTGrpc.JsonString jsonString = null; try { jsonString = await _rpcClient.PythonServerClient.GetEchoPlaylistRPCAsync(new CTGrpc.PlaylistRequest { Url = playlist.PlaylistIdentifier, Stream = 0 }); } catch (RpcException e) { if (e.Status.StatusCode == StatusCode.InvalidArgument) { if (e.Status.Detail == "INVALID_PLAYLIST_IDENTIFIER") { // Notification to Instructor. } GetLogger().LogError(e.Message); } return(newMedia); } JObject res = JObject.Parse(jsonString.Json); // Add DownloadHeader to playlist, required for downloading media. if (playlist.JsonMetadata == null) { playlist.JsonMetadata = new JObject(); } if (playlist.JsonMetadata.ContainsKey("downloadHeader")) { playlist.JsonMetadata["downloadHeader"] = res["downloadHeader"].ToString(); } else { playlist.JsonMetadata.Add("downloadHeader", res["downloadHeader"].ToString()); } JArray jArray = res["medias"] as JArray; foreach (JObject jObject in jArray) { // Check if there is a valid Id, and for the same playlist the same media does not exist. if (jObject["mediaId"].ToString().Length > 0 && !await _context.Medias.Where(m => m.UniqueMediaIdentifier == jObject["mediaId"].ToString() && m.SourceType == playlist.SourceType && m.PlaylistId == playlist.Id).AnyAsync()) { newMedia.Add(new Media { JsonMetadata = jObject, SourceType = playlist.SourceType, PlaylistId = playlist.Id, UniqueMediaIdentifier = jObject["mediaId"].ToString(), CreatedAt = Convert.ToDateTime(jObject["createdAt"], CultureInfo.InvariantCulture) }); } } newMedia.ForEach(m => m.Name = GetMediaName(m)); await _context.Medias.AddRangeAsync(newMedia); await _context.SaveChangesAsync(); return(newMedia); }