示例#1
0
        public async Task <JsonNetResult> Recent(GetRecentVideosViewModel model)
        {
            LatestVideos recentVideos = await _videoCatalog.GetLastestVideos(new GetLatestVideos
            {
                PageSize    = model.PageSize,
                PagingState = model.PagingState
            });

            // TODO:  Better solution than client-side JOINs
            var authorIds = new HashSet <Guid>(recentVideos.Videos.Select(v => v.UserId));
            Task <IEnumerable <UserProfile> > authorsTask = _userManagement.GetUserProfiles(authorIds);

            var videoIds = new HashSet <Guid>(recentVideos.Videos.Select(v => v.VideoId));
            Task <IEnumerable <PlayStats> > statsTask = _stats.GetNumberOfPlays(videoIds);

            await Task.WhenAll(authorsTask, statsTask);

            return(JsonSuccess(new RecentVideosViewModel
            {
                Videos = recentVideos.Videos
                         .Join(authorsTask.Result, vp => vp.UserId, a => a.UserId,
                               (vp, a) => new { VideoPreview = vp, Author = a })
                         .Join(statsTask.Result, vpa => vpa.VideoPreview.VideoId, s => s.VideoId,
                               (vpa, s) => VideoPreviewViewModel.FromDataModel(vpa.VideoPreview, vpa.Author, s, Url))
                         .ToList(),
                PagingState = recentVideos.PagingState
            }));
        }
示例#2
0
        public async Task <JsonNetResult> Videos(SearchVideosViewModel model)
        {
            VideosForSearchQuery videos = await _searchService.SearchVideos(new SearchVideosQuery
            {
                Query       = model.Query,
                PageSize    = model.PageSize,
                PagingState = model.PagingState
            });

            // TODO:  Better solution than client-side JOINs
            var authorIds = new HashSet <Guid>(videos.Videos.Select(v => v.UserId));
            Task <IEnumerable <UserProfile> > authorsTask = _userManagement.GetUserProfiles(authorIds);

            var videoIds = new HashSet <Guid>(videos.Videos.Select(v => v.VideoId));
            Task <IEnumerable <PlayStats> > statsTask = _stats.GetNumberOfPlays(videoIds);

            await Task.WhenAll(authorsTask, statsTask);

            return(JsonSuccess(new SearchResultsViewModel
            {
                Query = videos.Query,
                PagingState = videos.PagingState,
                Videos = videos.Videos
                         .Join(authorsTask.Result, vp => vp.UserId, a => a.UserId,
                               (vp, a) => new { VideoPreview = vp, Author = a })
                         .Join(statsTask.Result, vpa => vpa.VideoPreview.VideoId, s => s.VideoId,
                               (vpa, s) => VideoPreviewViewModel.FromDataModel(vpa.VideoPreview, vpa.Author, s, Url))
                         .ToList()
            }));
        }
示例#3
0
        public async Task <JsonNetResult> ByUser(GetUserVideosViewModel model)
        {
            // If no user was specified, default to the current logged in user
            Guid?userId = model.UserId ?? User.GetCurrentUserId();

            if (userId == null)
            {
                ModelState.AddModelError(string.Empty, "No user specified and no user currently logged in.");
                return(JsonFailure());
            }

            UserVideos userVideos = await _videoCatalog.GetUserVideos(new GetUserVideos
            {
                UserId      = userId.Value,
                PageSize    = model.PageSize,
                PagingState = model.PagingState
            });

            // TODO:  Better solution than client-side JOINs
            Task <UserProfile> authorTask = _userManagement.GetUserProfile(userId.Value);

            var videoIds = new HashSet <Guid>(userVideos.Videos.Select(v => v.VideoId));
            Task <IEnumerable <PlayStats> > statsTask = _stats.GetNumberOfPlays(videoIds);

            await Task.WhenAll(authorTask, statsTask);

            return(JsonSuccess(new UserVideosViewModel
            {
                UserId = userVideos.UserId,
                Videos = userVideos.Videos.Join(statsTask.Result, v => v.VideoId, s => s.VideoId,
                                                (v, s) => VideoPreviewViewModel.FromDataModel(v, authorTask.Result, s, Url))
                         .ToList(),
                PagingState = userVideos.PagingState
            }));
        }
示例#4
0
        public IActionResult preview(string url = null)
        {
            var model = new VideoPreviewViewModel();

            if (url == null)
            {
                model.isExist = false;
            }
            else
            {
                model.isExist    = true;
                model.previewUrl = WebUtility.HtmlDecode(url).Replace(",/videoframe/preview", "");
            }
            return(View(model));
        }
示例#5
0
        public async Task <JsonNetResult> Recommended(GetRecommendedVideosViewModel model)
        {
            // If no user was specified, default to the current logged in user
            Guid?userId = User.GetCurrentUserId();

            if (userId == null)
            {
                ModelState.AddModelError(string.Empty, "No user currently logged in.");
                return(JsonFailure());
            }

            SuggestedVideos.Dtos.SuggestedVideos suggestions = await _suggestions.GetSuggestions(new SuggestedVideosQuery
            {
                UserId      = userId.Value,
                PagingState = model.PagingState,
                PageSize    = model.PageSize
            });

            // TODO:  Better solution than client-side JOINs
            var authorIds = new HashSet <Guid>(suggestions.Videos.Select(v => v.UserId));
            Task <IEnumerable <UserProfile> > authorsTask = _userManagement.GetUserProfiles(authorIds);

            var videoIds = new HashSet <Guid>(suggestions.Videos.Select(v => v.VideoId));
            Task <IEnumerable <PlayStats> > statsTask = _stats.GetNumberOfPlays(videoIds);

            await Task.WhenAll(authorsTask, statsTask);

            return(JsonSuccess(new RecommendedVideosViewModel
            {
                Videos = suggestions.Videos
                         .Join(authorsTask.Result, vp => vp.UserId, a => a.UserId,
                               (vp, a) => new { VideoPreview = vp, Author = a })
                         .Join(statsTask.Result, vpa => vpa.VideoPreview.VideoId, s => s.VideoId,
                               (vpa, s) => VideoPreviewViewModel.FromDataModel(vpa.VideoPreview, vpa.Author, s, Url))
                         .ToList(),
                PagingState = suggestions.PagingState
            }));
        }