Example #1
0
        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
            }
        }
Example #2
0
        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;
        }
Example #3
0
 public static void CloseVideoPage()
 {
     UiBlockerUtility.Unblock();
     if (_VideoPage == null)
     {
         return;
     }
     ModalSheetUtility.Hide(_VideoPage);
     _VideoPage = null;
 }
Example #4
0
 public static void OpenVideoPage(object Object)
 {
     if (_VideoPage != null)
     {
         return;
     }
     _VideoPage = new VideoPage();
     ModalSheetUtility.PassingObject = Object;
     UiBlockerUtility.BlockNavigation();
     ModalSheetUtility.Show(_VideoPage);
 }
Example #5
0
 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();
 }
Example #6
0
        public App()
        {
            InitializeComponent();

            try
            {
                MainPage = new VideoPage();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
Example #7
0
        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");
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
        }
Example #10
0
        /// <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);
        }
Example #11
0
        /// <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);
        }
Example #12
0
        /// <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);
        }
Example #13
0
        /// <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);
        }
Example #14
0
        /// <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);
        }
Example #15
0
        /// <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);
            }
        }