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