コード例 #1
0
ファイル: DownloadService.cs プロジェクト: Loongtze/downkyi
        protected string BaseDownloadCover(DownloadingItem downloading, string coverUrl, string fileName)
        {
            // 更新状态显示
            downloading.DownloadStatusTitle = DictionaryResource.GetString("WhileDownloading");
            downloading.DownloadContent     = DictionaryResource.GetString("DownloadingCover");
            // 下载大小
            downloading.DownloadingFileSize = string.Empty;
            // 下载速度
            downloading.SpeedDisplay = string.Empty;

            // 查询、保存封面
            StorageCover storageCover = new StorageCover();
            string       cover        = storageCover.GetCover(downloading.DownloadBase.Avid, downloading.DownloadBase.Bvid, downloading.DownloadBase.Cid, coverUrl);

            if (cover == null)
            {
                return(null);
            }

            // 复制图片到指定位置
            try
            {
                File.Copy(cover, fileName, true);

                // 记录本次下载的文件
                if (!downloading.Downloading.DownloadFiles.ContainsKey(coverUrl))
                {
                    downloading.Downloading.DownloadFiles.Add(coverUrl, fileName);
                }

                return(fileName);
            }
            catch (Exception e)
            {
                Core.Utils.Debugging.Console.PrintLine($"{Tag}.DownloadCover()发生异常: {0}", e);
                LogManager.Error($"{Tag}.DownloadCover()", e);
            }

            return(null);
        }
コード例 #2
0
        /// <summary>
        /// 获取视频信息
        /// </summary>
        /// <returns></returns>
        public VideoInfoView GetVideoView()
        {
            if (bangumiSeason == null)
            {
                return(null);
            }

            // 查询、保存封面
            // 将SeasonId保存到avid字段中
            // 每集封面的cid保存到cid字段,EpisodeId保存到bvid字段中
            StorageCover storageCover = new StorageCover();
            string       coverUrl     = bangumiSeason.Cover;
            string       cover        = storageCover.GetCover(bangumiSeason.SeasonId, "bangumi", -1, coverUrl);

            // 获取用户头像
            string upName;
            string header;

            if (bangumiSeason.UpInfo != null)
            {
                upName = bangumiSeason.UpInfo.Name;

                StorageHeader storageHeader = new StorageHeader();
                header = storageHeader.GetHeader(bangumiSeason.UpInfo.Mid, bangumiSeason.UpInfo.Name, bangumiSeason.UpInfo.Avatar);
            }
            else
            {
                upName = "";
                header = null;
            }

            // 为videoInfoView赋值
            VideoInfoView videoInfoView = new VideoInfoView();

            App.PropertyChangeAsync(new Action(() =>
            {
                videoInfoView.CoverUrl = coverUrl;

                videoInfoView.Cover = cover == null ? null : new BitmapImage(new Uri(cover));
                videoInfoView.Title = bangumiSeason.Title;

                // 分区id
                videoInfoView.TypeId = BangumiType.TypeId[bangumiSeason.Type];

                videoInfoView.VideoZone = DictionaryResource.GetString(BangumiType.Type[bangumiSeason.Type]);

                videoInfoView.PlayNumber     = Format.FormatNumber(bangumiSeason.Stat.Views);
                videoInfoView.DanmakuNumber  = Format.FormatNumber(bangumiSeason.Stat.Danmakus);
                videoInfoView.LikeNumber     = Format.FormatNumber(bangumiSeason.Stat.Likes);
                videoInfoView.CoinNumber     = Format.FormatNumber(bangumiSeason.Stat.Coins);
                videoInfoView.FavoriteNumber = Format.FormatNumber(bangumiSeason.Stat.Favorites);
                videoInfoView.ShareNumber    = Format.FormatNumber(bangumiSeason.Stat.Share);
                videoInfoView.ReplyNumber    = Format.FormatNumber(bangumiSeason.Stat.Reply);
                videoInfoView.Description    = bangumiSeason.Evaluate;

                videoInfoView.UpName = upName;
                if (header != null)
                {
                    StorageHeader storageHeader = new StorageHeader();
                    videoInfoView.UpHeader      = storageHeader.GetHeaderThumbnail(header, 48, 48);

                    videoInfoView.UpperMid = bangumiSeason.UpInfo.Mid;
                }
                else
                {
                    videoInfoView.UpHeader = null;
                }
            }));

            return(videoInfoView);
        }
コード例 #3
0
ファイル: CheeseInfoService.cs プロジェクト: Loongtze/downkyi
        /// <summary>
        /// 获取视频信息
        /// </summary>
        /// <returns></returns>
        public VideoInfoView GetVideoView()
        {
            if (cheeseView == null)
            {
                return(null);
            }

            // 查询、保存封面
            // 将SeasonId保存到avid字段中
            // 每集封面的cid保存到cid字段,EpisodeId保存到bvid字段中
            StorageCover storageCover = new StorageCover();
            string       coverUrl     = cheeseView.Cover;
            string       cover        = storageCover.GetCover(cheeseView.SeasonId, "cheese", -1, coverUrl);

            // 获取用户头像
            string upName;
            string header;

            if (cheeseView.UpInfo != null)
            {
                upName = cheeseView.UpInfo.Name;
                StorageHeader storageHeader = new StorageHeader();
                header = storageHeader.GetHeader(cheeseView.UpInfo.Mid, cheeseView.UpInfo.Name, cheeseView.UpInfo.Avatar);
            }
            else
            {
                upName = "";
                header = null;
            }

            // 为videoInfoView赋值
            VideoInfoView videoInfoView = new VideoInfoView();

            App.PropertyChangeAsync(new Action(() =>
            {
                videoInfoView.CoverUrl = coverUrl;

                videoInfoView.Cover = cover == null ? null : new BitmapImage(new Uri(cover));
                videoInfoView.Title = cheeseView.Title;

                // 分区id
                // 课堂的type id B站没有定义,这里自定义为-10
                videoInfoView.TypeId = -10;

                videoInfoView.VideoZone  = DictionaryResource.GetString("Cheese");
                videoInfoView.CreateTime = "";

                videoInfoView.PlayNumber     = Format.FormatNumber(cheeseView.Stat.Play);
                videoInfoView.DanmakuNumber  = Format.FormatNumber(0);
                videoInfoView.LikeNumber     = Format.FormatNumber(0);
                videoInfoView.CoinNumber     = Format.FormatNumber(0);
                videoInfoView.FavoriteNumber = Format.FormatNumber(0);
                videoInfoView.ShareNumber    = Format.FormatNumber(0);
                videoInfoView.ReplyNumber    = Format.FormatNumber(0);
                videoInfoView.Description    = cheeseView.Subtitle;

                videoInfoView.UpName = upName;
                if (header != null)
                {
                    StorageHeader storageHeader = new StorageHeader();
                    videoInfoView.UpHeader      = storageHeader.GetHeaderThumbnail(header, 48, 48);

                    videoInfoView.UpperMid = cheeseView.UpInfo.Mid;
                }
                else
                {
                    videoInfoView.UpHeader = null;
                }
            }));

            return(videoInfoView);
        }
コード例 #4
0
        /// <summary>
        /// 获取收藏夹元数据
        /// </summary>
        /// <param name="mediaId"></param>
        /// <returns></returns>
        public Favorites GetFavorites(long mediaId)
        {
            var favoritesMetaInfo = FavoritesInfo.GetFavoritesInfo(mediaId);

            if (favoritesMetaInfo == null)
            {
                return(null);
            }

            // 查询、保存封面
            StorageCover storageCover = new StorageCover();
            string       coverUrl     = favoritesMetaInfo.Cover;
            BitmapImage  cover        = storageCover.GetCoverThumbnail(favoritesMetaInfo.Id, "Favorites", favoritesMetaInfo.Mid, coverUrl, 300, 188);

            // 获取用户头像
            string upName;
            string header;

            if (favoritesMetaInfo.Upper != null)
            {
                upName = favoritesMetaInfo.Upper.Name;
                StorageHeader storageHeader = new StorageHeader();
                header = storageHeader.GetHeader(favoritesMetaInfo.Upper.Mid, favoritesMetaInfo.Upper.Name, favoritesMetaInfo.Upper.Face);
            }
            else
            {
                upName = "";
                header = null;
            }

            // 为Favorites赋值
            Favorites favorites = new Favorites();

            App.PropertyChangeAsync(new Action(() =>
            {
                favorites.CoverUrl = coverUrl;

                favorites.Cover = cover;
                favorites.Title = favoritesMetaInfo.Title;

                DateTime startTime   = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
                DateTime dateTime    = startTime.AddSeconds(favoritesMetaInfo.Ctime);
                favorites.CreateTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss");

                favorites.PlayNumber     = Format.FormatNumber(favoritesMetaInfo.CntInfo.Play);
                favorites.LikeNumber     = Format.FormatNumber(favoritesMetaInfo.CntInfo.ThumbUp);
                favorites.FavoriteNumber = Format.FormatNumber(favoritesMetaInfo.CntInfo.Collect);
                favorites.ShareNumber    = Format.FormatNumber(favoritesMetaInfo.CntInfo.Share);
                favorites.Description    = favoritesMetaInfo.Intro;
                favorites.MediaCount     = favoritesMetaInfo.MediaCount;

                favorites.UpName = upName;
                if (header != null)
                {
                    StorageHeader storageHeader = new StorageHeader();
                    favorites.UpHeader          = storageHeader.GetHeaderThumbnail(header, 48, 48);

                    favorites.UpperMid = favoritesMetaInfo.Upper.Mid;
                }
                else
                {
                    favorites.UpHeader = null;
                }
            }));

            return(favorites);
        }
コード例 #5
0
        ///// <summary>
        ///// 获取收藏夹所有内容明细列表
        ///// </summary>
        ///// <param name="mediaId"></param>
        ///// <param name="result"></param>
        ///// <param name="eventAggregator"></param>
        //public void GetFavoritesMediaList(long mediaId, ObservableCollection<FavoritesMedia> result, IEventAggregator eventAggregator, CancellationToken cancellationToken)
        //{
        //    List<Core.BiliApi.Favorites.Models.FavoritesMedia> medias = FavoritesResource.GetAllFavoritesMedia(mediaId);
        //    if (medias.Count == 0) { return; }

        //    GetFavoritesMediaList(medias, result, eventAggregator, cancellationToken);
        //}

        ///// <summary>
        ///// 获取收藏夹指定页的内容明细列表
        ///// </summary>
        ///// <param name="mediaId"></param>
        ///// <param name="pn"></param>
        ///// <param name="ps"></param>
        ///// <param name="result"></param>
        ///// <param name="eventAggregator"></param>
        //public void GetFavoritesMediaList(long mediaId, int pn, int ps, ObservableCollection<FavoritesMedia> result, IEventAggregator eventAggregator, CancellationToken cancellationToken)
        //{
        //    List<Core.BiliApi.Favorites.Models.FavoritesMedia> medias = FavoritesResource.GetFavoritesMedia(mediaId, pn, ps);
        //    if (medias.Count == 0) { return; }

        //    GetFavoritesMediaList(medias, result, eventAggregator, cancellationToken);
        //}

        /// <summary>
        /// 获取收藏夹内容明细列表
        /// </summary>
        /// <param name="medias"></param>
        /// <param name="result"></param>
        /// <param name="eventAggregator"></param>
        public void GetFavoritesMediaList(List <Core.BiliApi.Favorites.Models.FavoritesMedia> medias, ObservableCollection <FavoritesMedia> result, IEventAggregator eventAggregator, CancellationToken cancellationToken)
        {
            int order = 0;

            foreach (var media in medias)
            {
                if (media.Title == "已失效视频")
                {
                    continue;
                }

                order++;

                // 查询、保存封面
                StorageCover storageCover = new StorageCover();
                string       coverUrl     = media.Cover;
                BitmapImage  cover        = storageCover.GetCoverThumbnail(media.Id, media.Bvid, -1, coverUrl, 200, 125);

                // 当地时区
                DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

                // 创建时间
                DateTime dateCTime = startTime.AddSeconds(media.Ctime);
                string   ctime     = dateCTime.ToString("yyyy-MM-dd");

                // 收藏时间
                DateTime dateFavTime = startTime.AddSeconds(media.FavTime);
                string   favTime     = dateFavTime.ToString("yyyy-MM-dd");

                App.PropertyChangeAsync(new Action(() =>
                {
                    FavoritesMedia newMedia = new FavoritesMedia(eventAggregator)
                    {
                        Avid           = media.Id,
                        Bvid           = media.Bvid,
                        Order          = order,
                        Cover          = cover,
                        Title          = media.Title,
                        PlayNumber     = media.CntInfo != null ? Format.FormatNumber(media.CntInfo.Play) : "0",
                        DanmakuNumber  = media.CntInfo != null ? Format.FormatNumber(media.CntInfo.Danmaku) : "0",
                        FavoriteNumber = media.CntInfo != null ? Format.FormatNumber(media.CntInfo.Collect) : "0",
                        Duration       = Format.FormatDuration2(media.Duration),
                        UpName         = media.Upper != null ? media.Upper.Name : string.Empty,
                        UpMid          = media.Upper != null ? media.Upper.Mid : -1,
                        CreateTime     = ctime,
                        FavTime        = favTime
                    };

                    if (!result.ToList().Exists(t => t.Avid == newMedia.Avid))
                    {
                        result.Add(newMedia);
                        Thread.Sleep(10);
                    }
                }));

                // 判断是否该结束线程,若为true,跳出循环
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// 获取视频信息
        /// </summary>
        /// <returns></returns>
        public VideoInfoView GetVideoView()
        {
            if (videoView == null)
            {
                return(null);
            }

            // 查询、保存封面
            StorageCover storageCover = new StorageCover();
            string       coverUrl     = videoView.Pic;
            string       cover        = storageCover.GetCover(videoView.Aid, videoView.Bvid, videoView.Cid, coverUrl);

            // 分区
            string videoZone = string.Empty;
            var    zoneList  = Core.BiliApi.Zone.VideoZone.Instance().GetZones();
            var    zone      = zoneList.Find(it => it.Id == videoView.Tid);

            if (zone != null)
            {
                var zoneParent = zoneList.Find(it => it.Id == zone.ParentId);
                if (zoneParent != null)
                {
                    videoZone = zoneParent.Name + ">" + zone.Name;
                }
                else
                {
                    videoZone = zone.Name;
                }
            }
            else
            {
                videoZone = videoView.Tname;
            }

            // 获取用户头像
            string upName;
            string header;

            if (videoView.Owner != null)
            {
                upName = videoView.Owner.Name;
                StorageHeader storageHeader = new StorageHeader();
                header = storageHeader.GetHeader(videoView.Owner.Mid, videoView.Owner.Name, videoView.Owner.Face);
            }
            else
            {
                upName = "";
                header = null;
            }

            // 为videoInfoView赋值
            VideoInfoView videoInfoView = new VideoInfoView();

            App.PropertyChangeAsync(new Action(() =>
            {
                videoInfoView.CoverUrl = coverUrl;

                videoInfoView.Cover = cover == null ? null : new BitmapImage(new Uri(cover));
                videoInfoView.Title = videoView.Title;

                // 分区id
                videoInfoView.TypeId = videoView.Tid;

                videoInfoView.VideoZone = videoZone;

                DateTime startTime       = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
                DateTime dateTime        = startTime.AddSeconds(videoView.Pubdate);
                videoInfoView.CreateTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss");

                videoInfoView.PlayNumber     = Format.FormatNumber(videoView.Stat.View);
                videoInfoView.DanmakuNumber  = Format.FormatNumber(videoView.Stat.Danmaku);
                videoInfoView.LikeNumber     = Format.FormatNumber(videoView.Stat.Like);
                videoInfoView.CoinNumber     = Format.FormatNumber(videoView.Stat.Coin);
                videoInfoView.FavoriteNumber = Format.FormatNumber(videoView.Stat.Favorite);
                videoInfoView.ShareNumber    = Format.FormatNumber(videoView.Stat.Share);
                videoInfoView.ReplyNumber    = Format.FormatNumber(videoView.Stat.Reply);
                videoInfoView.Description    = videoView.Desc;

                videoInfoView.UpName = upName;
                if (header != null)
                {
                    StorageHeader storageHeader = new StorageHeader();
                    videoInfoView.UpHeader      = storageHeader.GetHeaderThumbnail(header, 48, 48);

                    videoInfoView.UpperMid = videoView.Owner.Mid;
                }
                else
                {
                    videoInfoView.UpHeader = null;
                }
            }));

            return(videoInfoView);
        }