Exemplo n.º 1
0
        public async Task <IActionResult> Post([FromServices] Func <string, IVideoDetailService> videoService, LiveVideoReq model)
        {
            try
            {
                if (model.Entry[0].Changes[0].Value.Status.Equals("live"))
                {
                    var pageId     = model.Entry[0].Id;
                    var objAccount = _accountService.FindAsync(() => Builders <AccountModel> .Filter.Eq("PageTokens.ProfileId", pageId)).Result.FirstOrDefault();
                    if (objAccount != null)
                    {
                        var strPageToken = String.Empty;
                        foreach (var pageToken in objAccount.PageTokens)
                        {
                            if (pageToken.ProfileId.Equals(pageId))
                            {
                                strPageToken = pageToken.AccessToken;
                                break;
                            }
                        }

                        if (!String.IsNullOrEmpty(strPageToken))
                        {
                            var objVideos = await _facebookService.GetLiveVideoOfPageAsync(strPageToken);

                            if (objVideos != null)
                            {
                                LiveVideoDataResp objLiveVideo = null;
                                foreach (var video in objVideos.Data)
                                {
                                    if (video.Status.Equals("LIVE"))
                                    {
                                        objLiveVideo = video;
                                        break;
                                    }
                                }

                                if (objLiveVideo != null)
                                {
                                    var objPageModel = _pageService.FindAsync(() => Builders <PageModel> .Filter.Eq("PageId", pageId)).Result.FirstOrDefault();

                                    if (objPageModel != null && objPageModel.Videos != null)
                                    {
                                        bool isExist = false;
                                        foreach (var video in objPageModel.Videos)
                                        {
                                            if (objLiveVideo.VideoId.Equals(video.VideoId))
                                            {
                                                isExist = true;
                                                break;
                                            }
                                        }

                                        if (isExist == false)
                                        {
                                            var lst = objPageModel.Videos;
                                            lst.Add(new VideoModel()
                                            {
                                                VideoId = objLiveVideo.VideoId,
                                                Video   = new VideoInsideModel()
                                                {
                                                    DisplayVideoId = objLiveVideo.Video.DisplayVideoId
                                                },
                                                Status                      = objLiveVideo.Status,
                                                Title                       = objLiveVideo.Title,
                                                Description                 = objLiveVideo.Description,
                                                PermalinkUrl                = objLiveVideo.PermalinkUrl,
                                                LiveViews                   = objLiveVideo.LiveViews,
                                                IsSendWhenDetectedPhone     = false,
                                                IsDeleteWhenDetectedBadWord = false,
                                                IsSendWhenDetectedGoodWord  = false,
                                                IsHidden                    = false,
                                                GoodWords                   = new System.Collections.Generic.List <string>(),
                                                BadWords                    = new System.Collections.Generic.List <string>(),
                                                CreationTime                = objLiveVideo.CreationTime,
                                            });
                                            await _pageService.UpdateOneAsync(() => Builders <PageModel> .Filter.Eq("PageId", pageId), () => Builders <PageModel> .Update.Set("Videos", lst));

                                            await _pipelineService.StreamingPipelineAsync(videoService(objLiveVideo.VideoId), objLiveVideo.VideoId, strPageToken);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else if (model.Entry[0].Changes[0].Value.Status.Equals("live_stopped"))
                {
                    var pageId  = model.Entry[0].Id;
                    var objPage = _pageService.FindAsync(() => Builders <PageModel> .Filter.Eq("PageId", pageId)).Result.FirstOrDefault();
                    if (objPage != null && objPage.Videos != null && objPage.Videos[objPage.Videos.Count - 1].Status.Equals("LIVE"))
                    {
                        var videoId = objPage.Videos[objPage.Videos.Count - 1].VideoId;
                        await _pageService.UpdateOneAsync(() => Builders <PageModel> .Filter.Eq("PageId", pageId)& Builders <PageModel> .Filter.ElemMatch(e => e.Videos, Builders <VideoModel> .Filter.Eq("VideoId", videoId)), () => Builders <PageModel> .Update.Set(e => e.Videos[-1].Status, "VOD"));
                    }
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
            return(Ok());
        }