public async void UpdateVideoCache(VideoPage videoPage) { try { foreach (var video in videoPage.Videos) { if (!ThumbnailDict.ContainsKey(video.Id)) { var success = await DownloadImage(video.ImgString, video.Id); if (!success) { throw new Exception($"Image download was not successful! Video id: {video.Id}"); } } } if (!cachedVideoPages.ContainsKey(videoPage.Pagination.CurrentPage)) { cachedVideoPages.Add(videoPage.Pagination.CurrentPage, videoPage); } } catch { //logging needed } }
private async Task UpdateVideos() { _viewModel.IsBusy = true; if (_viewModel.PageNumber < 1) { _viewModel.PageNumber = 1; } // _viewModel.TagsCollection.Clear(); _viewModel.ItemsPerPage = Preferences.Get(Constants.VideosPerPage, 8); VideoPage videosPage = await ProgenyService.GetVideoPage(_viewModel.PageNumber, _viewModel.ItemsPerPage, _viewModel.ViewChild, _viewModel.UserAccessLevel, _viewModel.UserInfo.Timezone, 1, _viewModel.TagFilter); if (videosPage.VideosList != null) { _viewModel.VideoItems.ReplaceRange(videosPage.VideosList); _viewModel.PageNumber = videosPage.PageNumber; _viewModel.PageCount = videosPage.TotalPages; VideosListView.ScrollTo(0); if (!string.IsNullOrEmpty(videosPage.TagsList)) { List <string> tagsList = videosPage.TagsList.Split(',').ToList(); tagsList.Sort(); foreach (string tagString in tagsList) { _viewModel.TagsCollection.Add(tagString); } } } _viewModel.IsBusy = false; }
public static void CloseVideoPage() { UiBlockerUtility.Unblock(); if (_VideoPage == null) { return; } ModalSheetUtility.Hide(_VideoPage); _VideoPage = null; }
public static void OpenVideoPage(object Object) { if (_VideoPage != null) { return; } _VideoPage = new VideoPage(); ModalSheetUtility.PassingObject = Object; UiBlockerUtility.BlockNavigation(); ModalSheetUtility.Show(_VideoPage); }
public PageManage() { this.downloadPage = new DownloadPage(); this.findMusicPage = new FindMusicPage(); this.fMPage = new FMPage(); this.friendPage = new FriendPage(); this.localMusicPage = new LocalMusicPage(); this.lOOKPage = new LOOKPage(); this.mainPage = new MainPage(); this.videoPage = new VideoPage(); }
public App() { InitializeComponent(); try { MainPage = new VideoPage(); } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
public void WhenClcickingShareShouldSeeAvailableLink(string browser) { var driver = DriverFactory.Create(browser, "https://www.youtube.com/results?search_query=tibia"); SearchPage searchPage = new SearchPage(driver); searchPage.AccessFirstVideo(); VideoPage videoPage = new VideoPage(driver); videoPage.ClickShareButton(); Uri url = videoPage.GetSharingUrl(); url.Should().NotBeNull(); url.Host.Should().Be("youtu.be"); url.Scheme.Should().Be("https"); }
private void SetVideoProperties(VideoPage videoPage) { try { OriginalVideoList = new List <Video>(videoPage.Videos); VideoList = videoPage.Videos; ActualPage = videoPage.Pagination; PageNumber = ActualPage.CurrentPage; TotalPages = ActualPage.TotalPages; FillQualityList(); FillTagList(); RaisePropertyChanged(nameof(NextBtnEnabled)); RaisePropertyChanged(nameof(PrevBtnEnabled)); } catch (Exception e) { MessageBox.Show($"Handled exception during setting video properties: {e.Message}", Displayresource.Warning, MessageBoxButton.OK, MessageBoxImage.Warning); } }
private VideoPage ConvertJsonResult(string response) { var result = new VideoPage { Videos = new List <Video>(), Pagination = new Page() }; try { JObject responseObject = JObject.Parse(response); JObject dataJson = (JObject)responseObject[Settings.Default.ApiDataString]; JArray videoJsonArray = (JArray)dataJson[Settings.Default.ApiVideoString]; var pageJson = dataJson[Settings.Default.ApiPaginationString]; result.Videos = JsonConvert.DeserializeObject <Video[]>(videoJsonArray.ToString()); result.Pagination = JsonConvert.DeserializeObject <Page>(pageJson.ToString()); } catch (Exception ex) { throw new Exception($"Exception during response json conversion:{ex.Message}"); } return(result); }
/// <summary> /// 获取视频剧集 /// </summary> /// <returns></returns> public List <VideoPage> GetVideoPages() { List <VideoPage> pages = new List <VideoPage>(); if (bangumiSeason == null) { return(pages); } if (bangumiSeason.Episodes == null) { return(pages); } if (bangumiSeason.Episodes.Count == 0) { return(pages); } int order = 0; foreach (BangumiEpisode episode in bangumiSeason.Episodes) { order++; // 标题 string name; // 判断title是否为数字,如果是,则将share_copy作为name,否则将title作为name //if (int.TryParse(episode.Title, out int result)) //{ // name = Regex.Replace(episode.ShareCopy, @"《.*?》", ""); // //name = episode.ShareCopy; //} //else //{ // if (episode.LongTitle != null && episode.LongTitle != "") // { // name = $"{episode.Title} {episode.LongTitle}"; // } // else // { // name = episode.Title; // } //} // 将share_copy作为name,删除《》中的标题 name = Regex.Replace(episode.ShareCopy, @"^《.*?》", ""); // 删除前后空白符 name = name.Trim(); VideoPage page = new VideoPage { Avid = episode.Aid, Bvid = episode.Bvid, Cid = episode.Cid, EpisodeId = -1, FirstFrame = episode.Cover, Order = order, Name = name, Duration = "N/A" }; // UP主信息 if (bangumiSeason.UpInfo != null) { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = bangumiSeason.UpInfo.Name, Face = bangumiSeason.UpInfo.Avatar, Mid = bangumiSeason.UpInfo.Mid, }; } else { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = "", Face = "", Mid = -1, }; } // 文件命名中的时间格式 string timeFormat = SettingsManager.GetInstance().GetFileNamePartTimeFormat(); // 视频发布时间 DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 DateTime dateTime = startTime.AddSeconds(episode.PubTime); page.PublishTime = dateTime.ToString(timeFormat); pages.Add(page); } return(pages); }
/// <summary> /// 获取视频流的信息,从VideoPage返回 /// </summary> /// <param name="page"></param> public void GetVideoStream(VideoPage page) { PlayUrl playUrl = VideoStream.GetBangumiPlayUrl(page.Avid, page.Bvid, page.Cid); Utils.VideoPageInfo(playUrl, page); }
/// <summary> /// 获取视频章节与剧集 /// </summary> /// <returns></returns> public List <VideoSection> GetVideoSections(bool noUgc = false) { if (bangumiSeason == null) { return(null); } List <VideoSection> videoSections = new List <VideoSection> { new VideoSection { Id = bangumiSeason.Positive.Id, Title = bangumiSeason.Positive.Title, IsSelected = true, VideoPages = GetVideoPages() } }; // 不需要其他季或花絮内容 if (noUgc) { return(videoSections); } if (bangumiSeason.Section == null) { return(null); } if (bangumiSeason.Section.Count == 0) { return(null); } foreach (BangumiSection section in bangumiSeason.Section) { List <VideoPage> pages = new List <VideoPage>(); int order = 0; foreach (BangumiEpisode episode in section.Episodes) { order++; // 标题 string name = episode.LongTitle != null && episode.LongTitle != "" ? $"{episode.Title} {episode.LongTitle}" : episode.Title; VideoPage page = new VideoPage { Avid = episode.Aid, Bvid = episode.Bvid, Cid = episode.Cid, EpisodeId = -1, FirstFrame = episode.Cover, Order = order, Name = name, Duration = "N/A" }; // UP主信息 if (bangumiSeason.UpInfo != null) { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = bangumiSeason.UpInfo.Name, Face = bangumiSeason.UpInfo.Avatar, Mid = bangumiSeason.UpInfo.Mid, }; } else { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = "", Face = "", Mid = -1, }; } // 文件命名中的时间格式 string timeFormat = SettingsManager.GetInstance().GetFileNamePartTimeFormat(); // 视频发布时间 DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 DateTime dateTime = startTime.AddSeconds(episode.PubTime); page.PublishTime = dateTime.ToString(timeFormat); pages.Add(page); } VideoSection videoSection = new VideoSection { Id = section.Id, Title = section.Title, VideoPages = pages }; videoSections.Add(videoSection); } return(videoSections); }
/// <summary> /// 获取视频剧集 /// </summary> /// <returns></returns> public List <VideoPage> GetVideoPages() { List <VideoPage> pages = new List <VideoPage>(); if (cheeseView == null) { return(pages); } if (cheeseView.Episodes == null) { return(pages); } if (cheeseView.Episodes.Count == 0) { return(pages); } int order = 0; foreach (CheeseEpisode episode in cheeseView.Episodes) { order++; string name = episode.Title; string duration = Format.FormatDuration(episode.Duration - 1); VideoPage page = new VideoPage { Avid = episode.Aid, Bvid = null, Cid = episode.Cid, EpisodeId = episode.Id, FirstFrame = episode.Cover, Order = order, Name = name, Duration = "N/A" }; // UP主信息 if (cheeseView.UpInfo != null) { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = cheeseView.UpInfo.Name, Face = cheeseView.UpInfo.Avatar, Mid = cheeseView.UpInfo.Mid, }; } else { page.Owner = new Core.BiliApi.Models.VideoOwner { Name = "", Face = "", Mid = -1, }; } // 文件命名中的时间格式 string timeFormat = SettingsManager.GetInstance().GetFileNamePartTimeFormat(); // 视频发布时间 DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 DateTime dateTime = startTime.AddSeconds(episode.ReleaseDate); page.PublishTime = dateTime.ToString(timeFormat); pages.Add(page); } return(pages); }
/// <summary> /// 获取视频流的信息,从VideoPage返回 /// </summary> /// <param name="page"></param> public void GetVideoStream(VideoPage page) { PlayUrl playUrl = VideoStream.GetCheesePlayUrl(page.Avid, page.Bvid, page.Cid, page.EpisodeId); Utils.VideoPageInfo(playUrl, page); }
/// <summary> /// 从视频流更新VideoPage /// </summary> /// <param name="playUrl"></param> /// <param name="page"></param> internal static void VideoPageInfo(PlayUrl playUrl, VideoPage page) { if (playUrl == null) { return; } // 视频流信息 page.PlayUrl = playUrl; // 获取设置 UserInfoSettings userInfo = SettingsManager.GetInstance().GetUserInfo(); int defaultQuality = SettingsManager.GetInstance().GetQuality(); VideoCodecs videoCodecs = SettingsManager.GetInstance().GetVideoCodecs(); int defaultAudioQuality = SettingsManager.GetInstance().GetAudioQuality(); // 未登录时,最高仅720P if (userInfo.Mid == -1) { if (defaultQuality > 64) { defaultQuality = 64; } } // 非大会员账户登录时,如果设置的画质高于1080P,则这里限制为1080P if (!userInfo.IsVip) { if (defaultQuality > 80) { defaultQuality = 80; } } if (playUrl.Durl != null) { // 音质 // 画质 // 视频编码 // 时长 return; } if (playUrl.Dash != null) { // 如果video列表或者audio列表没有内容,则返回false if (playUrl.Dash.Video == null) { return; } if (playUrl.Dash.Video.Count == 0) { return; } // 音质 page.AudioQualityFormatList = GetAudioQualityFormatList(playUrl, defaultAudioQuality); if (page.AudioQualityFormatList.Count > 0) { page.AudioQualityFormat = page.AudioQualityFormatList[0]; } // 画质 & 视频编码 page.VideoQualityList = GetVideoQualityList(playUrl, userInfo, defaultQuality, videoCodecs); if (page.VideoQualityList.Count > 0) { page.VideoQuality = page.VideoQualityList[0]; } // 时长 page.Duration = Format.FormatDuration(playUrl.Dash.Duration); } }