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 })); }
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() })); }
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 })); }
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)); }
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 })); }