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);
        }
示例#3
0
        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));
        }
示例#4
0
        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;
        }
示例#6
0
        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
            });
        }
示例#7
0
        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));
        }
示例#8
0
        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));
            }
        }