public ActionResult CustomFields(string accountItemId, string videoId, VideoCustomFields videoCustomFields) { var accountItem = Sitecore.Context.Database.GetItem(new ID(accountItemId)); var authenticator = new BrightcoveAuthenticator(accountItem); var proxy = new VideoProxy(authenticator); var customFieldsResponse = proxy.RetrieveCustomFields(); proxy.UpdateCustomFields(videoId, videoCustomFields.Fields); var video = proxy.RetrieveById(videoId); var fields = (from cf in customFieldsResponse.CustomFields from vf in video.CustomFields.Select(i => new FieldInfo { Id = i.Key, Value = i.Value }) where cf.Id.Equals(vf.Id, StringComparison.OrdinalIgnoreCase) select MapValue(vf, cf)).ToList(); fields = customFieldsResponse.CustomFields.Where(i => i.EnumValues == null || i.EnumValues.Count > 0).Select(AddEmptyEnumValue).ToList(); var model = new VideoCustomFields { Video = video, Fields = fields }; ViewData["AjaxType"] = "post"; return(View("~/sitecore modules/Web/MediaFramework/MVC/Views/Brightcove/VideoCustomFields.cshtml", model)); }
/// <summary> /// Update /// </summary> /// <param name="operation"></param> /// <returns></returns> protected override object Update(ExportOperation operation) { IItemSynchronizer itemSynchronizer = MediaFrameworkContext.GetItemSynchronizer(operation.Item); if (itemSynchronizer == null) { return(null); } var video = (Video)itemSynchronizer.CreateEntity(operation.Item); if (video.CustomFields != null && video.CustomFields.Count == 0) { video.CustomFields = null; } var authenticator = new BrightcoveAuthenticator(operation.AccountItem); var result = new VideoProxy(authenticator).Patch(video); if (result == null || result.Id == null) { return(null); } if (result.CustomFields == null) { result.CustomFields = video.CustomFields; } return(result); }
private static VideoTextTracks CreateModel(string accountItemId, string videoId) { var accountItem = Sitecore.Context.Database.GetItem(new ID(accountItemId)); var authenticator = new BrightcoveAuthenticator(accountItem); var proxy = new VideoProxy(authenticator); return(CreateModel(proxy, videoId)); }
public static void SetIngestStatus(Notification notification) { if (notification == null) { return; } if (!notification.IsVideoUpload()) { return; } var videoItem = GetSearchResult(notification.Entity); if (videoItem == null) { return; } var accountItem = GetAccountItem(videoItem.GetItem()); if (accountItem == null) { return; } string fieldValue; if (notification.IsSuccess()) { var authenticator = new BrightcoveAuthenticator(accountItem); var proxy = new VideoProxy(authenticator); var response = proxy.RetrieveSourcesById(notification.Entity); if (response != null && response.Count > 0) { fieldValue = response.Count + " sources found."; } else { fieldValue = "No sources found."; } } else { fieldValue = "Ingest Failed"; } // Set the ingest successful field value videoItem.SetIngestSuccessfulField(fieldValue); }
public virtual void PostVideo() { if (VideoEntity != null && !VideoEntity.Name.IsEmptyOrNull()) { var videoToUpload = VideoEntity; var proxy = new VideoProxy(Authenticator); VideoEntity = proxy.Create(VideoEntity); LogStep("CreateVideo", () => JsonConvert.SerializeObject(videoToUpload), () => JsonConvert.SerializeObject(VideoEntity)); if (VideoEntity != null && !VideoEntity.Id.IsEmptyOrNull()) { IsVideoPostSuccessful = true; UploadFileInfo.MediaId = VideoEntity.Id; return; } } VideoEntity = null; }
private static VideoTextTracks CreateModel(VideoProxy proxy, string videoId, bool showUploading = false) { var video = proxy.RetrieveById(videoId); var tracks = video.TextTracks != null && video.TextTracks.Count > 0 ? video.TextTracks.Select(MapToViewModel).ToList() : new List <TextTrackInfo>(); return(new VideoTextTracks { Video = video, KindList = new List <string> { "captions" }, Languages = new List <string> { "ar", "et" }, Tracks = tracks, UploadingTracks = showUploading }); }
public ActionResult TextTracks(string accountItemId, string videoId, VideoTextTracks videoTextTracks) { var accountItem = Sitecore.Context.Database.GetItem(new ID(accountItemId)); var authenticator = new BrightcoveAuthenticator(accountItem); var proxy = new VideoProxy(authenticator); bool uploadingTracks = false; if (videoTextTracks.Tracks != null && videoTextTracks.Tracks.Count > 0) { var anyToSaveOrUpload = videoTextTracks.Tracks.Any(i => !i.IsDelete); var anyFileUpload = videoTextTracks.Tracks.Any(i => i.File != null); var tracksToIngest = new List <IngestTextTrack>(); var tracksToSave = new List <VideoTextTrack>(); var callbackUrl = string.Empty; if (anyToSaveOrUpload) { if (anyFileUpload) { var stringId = ID.NewID.ToUrlString(); var storageExecutor = StorageServiceManager.Service.GetExecutor() as StorageExecutor; var files = videoTextTracks.Tracks.Where(i => i.File != null).Select(i => new { key = i, file = new UploadFileInfo { Name = i.File.FileName, Bytes = new BinaryReader(i.File.InputStream).ReadBytes(i.File.ContentLength), Id = stringId } }).ToDictionary(a => a.key, a => a.file); var objectItem = StorageServiceManager.Service.GetExecutor().Save(files.Values.ToList()).FirstOrDefault(); (from i in videoTextTracks.Tracks from j in files where i == j.Key select MapFileUploadInfo(i, j.Value)).ToList(); if (objectItem != null) { callbackUrl = Settings.IngestionCallbackUrl(storageExecutor.Config.BaseUrl, ((MediaItem)objectItem).InnerItem.Parent.ID.ToUrlString()); } } tracksToSave = videoTextTracks.Tracks.Where(i => !i.IsDelete && !i.IsUpload).Select(MapToVideoTextTrack).ToList(); tracksToIngest = videoTextTracks.Tracks.Where(i => !i.IsDelete && i.IsUpload).Select(MapToIngestTextTrack).ToList(); } proxy.UpdateTextTracks(videoId, tracksToSave); if (tracksToIngest.Count > 0) { var ingestProxy = new DynamicIngestProxy(authenticator); ingestProxy.Ingest(new IngestVideo { VideoId = videoId, TextTracks = new Collection <IngestTextTrack>(tracksToIngest), Callbacks = string.IsNullOrEmpty(callbackUrl) ? null : new Collection <string> { callbackUrl } }); uploadingTracks = true; } } var model = CreateModel(proxy, videoId, uploadingTracks); return(View("~/sitecore modules/Web/MediaFramework/MVC/Views/Brightcove/VideoTextTracks.cshtml", model)); }
public async Task <HttpResponseMessage> PostFormData() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } var hasFile = false; var GuID = Guid.NewGuid().ToString(); string root = HttpContext.Current.Server.MapPath("~/" + UPLOAD_DIR); var provider = new MultipartFormDataStreamProvider(root); try { await Request.Content.ReadAsMultipartAsync(provider); VideoProxy video = new VideoProxy(); foreach (var key in provider.FormData) { if (key.Equals("video")) { var json = provider.FormData[key.ToString()]; video = JsonConvert.DeserializeObject <VideoProxy>(json); } } string path = string.Empty; foreach (MultipartFileData file in provider.FileData) { hasFile = true; string fileName = file.Headers.ContentDisposition.FileName; if (fileName.StartsWith("\"") && fileName.EndsWith("\"")) { fileName = fileName.Trim('"'); } if (fileName.Contains(@"/") || fileName.Contains(@"\")) { fileName = Path.GetFileName(fileName); } path = string.Format("{0}{1}", UPLOAD_DIR, fileName); var moveTo = Path.Combine(root, fileName); if (File.Exists(moveTo)) { File.Delete(moveTo); } File.Move(file.LocalFileName, moveTo); } var v = new Video { Title_EN = video.Title_EN, Title_TH = video.Title_TH, ImageUrl = path, VideoUrl = video.VideoUrl, IsActive = video.IsActive }; if (video.Id == 0) { this._videoRepository.Add(v); } else { var existing = this._videoRepository.FindById(video.Id); existing.Title_EN = video.Title_EN; existing.Title_TH = video.Title_TH; existing.IsActive = video.IsActive; if (hasFile) { existing.ImageUrl = path; } existing.VideoUrl = video.VideoUrl; this._videoRepository.Update(existing); } return(Request.CreateResponse(HttpStatusCode.OK)); } catch (System.Exception e) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e)); } }