mirror of
https://github.com/yaobiao131/downkyicore.git
synced 2025-08-10 00:52:31 +00:00
211 lines
6.2 KiB
C#
211 lines
6.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Media.Imaging;
|
|
using DownKyi.Core.BiliApi.Users.Models;
|
|
using DownKyi.Core.Storage;
|
|
using DownKyi.Events;
|
|
using DownKyi.Images;
|
|
using DownKyi.Utils;
|
|
using Prism.Commands;
|
|
using Prism.Events;
|
|
using Prism.Regions;
|
|
|
|
namespace DownKyi.ViewModels.UserSpace;
|
|
|
|
/// <summary>
|
|
/// 合集和列表
|
|
/// </summary>
|
|
public class ViewSeasonsSeriesViewModel : ViewModelBase
|
|
{
|
|
public const string Tag = "PageUserSpaceSeasonsSeries";
|
|
|
|
private long mid = -1;
|
|
|
|
#region 页面属性申明
|
|
|
|
private ObservableCollection<SeasonsSeries> seasonsSeries;
|
|
|
|
public ObservableCollection<SeasonsSeries> SeasonsSeries
|
|
{
|
|
get => seasonsSeries;
|
|
set => SetProperty(ref seasonsSeries, value);
|
|
}
|
|
|
|
private int selectedItem;
|
|
|
|
public int SelectedItem
|
|
{
|
|
get => selectedItem;
|
|
set => SetProperty(ref selectedItem, value);
|
|
}
|
|
|
|
#endregion
|
|
|
|
public ViewSeasonsSeriesViewModel(IEventAggregator eventAggregator) : base(eventAggregator)
|
|
{
|
|
#region 属性初始化
|
|
|
|
SeasonsSeries = new ObservableCollection<SeasonsSeries>();
|
|
|
|
#endregion
|
|
}
|
|
|
|
#region 命令申明
|
|
|
|
// 视频选择事件
|
|
private DelegateCommand<object> seasonsSeriesCommand;
|
|
|
|
public DelegateCommand<object> SeasonsSeriesCommand => seasonsSeriesCommand ??
|
|
(seasonsSeriesCommand =
|
|
new DelegateCommand<object>(
|
|
ExecuteSeasonsSeriesCommand));
|
|
|
|
/// <summary>
|
|
/// 视频选择事件
|
|
/// </summary>
|
|
/// <param name="parameter"></param>
|
|
private void ExecuteSeasonsSeriesCommand(object parameter)
|
|
{
|
|
if (!(parameter is SeasonsSeries seasonsSeries))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 应该用枚举的,偷懒直接用数字
|
|
int type = 0;
|
|
if (seasonsSeries.TypeImage == NormalIcon.Instance().SeasonsSeries)
|
|
{
|
|
type = 1;
|
|
}
|
|
else if (seasonsSeries.TypeImage == NormalIcon.Instance().Channel1)
|
|
{
|
|
type = 2;
|
|
}
|
|
|
|
Dictionary<string, object> data = new Dictionary<string, object>
|
|
{
|
|
{ "mid", mid },
|
|
{ "id", seasonsSeries.Id },
|
|
{ "name", seasonsSeries.Name },
|
|
{ "count", seasonsSeries.Count },
|
|
{ "type", type }
|
|
};
|
|
|
|
// 进入视频页面
|
|
NavigationParam param = new NavigationParam
|
|
{
|
|
ViewName = ViewModels.ViewSeasonsSeriesViewModel.Tag,
|
|
ParentViewName = ViewUserSpaceViewModel.Tag,
|
|
Parameter = data
|
|
};
|
|
EventAggregator.GetEvent<NavigationEvent>().Publish(param);
|
|
|
|
SelectedItem = -1;
|
|
}
|
|
|
|
#endregion
|
|
|
|
public override void OnNavigatedFrom(NavigationContext navigationContext)
|
|
{
|
|
base.OnNavigatedFrom(navigationContext);
|
|
|
|
SeasonsSeries.Clear();
|
|
SelectedItem = -1;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 接收mid参数
|
|
/// </summary>
|
|
/// <param name="navigationContext"></param>
|
|
public async override void OnNavigatedTo(NavigationContext navigationContext)
|
|
{
|
|
base.OnNavigatedTo(navigationContext);
|
|
|
|
SeasonsSeries.Clear();
|
|
SelectedItem = -1;
|
|
|
|
// 根据传入参数不同执行不同任务
|
|
var parameter = navigationContext.Parameters.GetValue<SpaceSeasonsSeries>("object");
|
|
if (parameter == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 传入mid
|
|
mid = navigationContext.Parameters.GetValue<long>("mid");
|
|
|
|
foreach (var item in parameter.SeasonsList)
|
|
{
|
|
if (item.Meta.Total <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
Bitmap image = null;
|
|
if (item.Meta.Cover == null || item.Meta.Cover == "")
|
|
{
|
|
image = ImageHelper.LoadFromResource(new Uri("avares://DownKyi/Resources/video-placeholder.png"));
|
|
}
|
|
else
|
|
{
|
|
StorageCover storageCover = new StorageCover();
|
|
string cover = null;
|
|
await Task.Run(() => { cover = storageCover.GetCover(item.Meta.Cover); });
|
|
image = storageCover.GetCoverThumbnail(cover, 190, 190);
|
|
}
|
|
|
|
// 当地时区
|
|
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
|
|
DateTime dateCTime = startTime.AddSeconds(item.Meta.Ptime);
|
|
string mtime = dateCTime.ToString("yyyy-MM-dd");
|
|
|
|
SeasonsSeries.Add(new SeasonsSeries
|
|
{
|
|
Id = item.Meta.SeasonId,
|
|
Cover = image,
|
|
TypeImage = NormalIcon.Instance().SeasonsSeries,
|
|
Name = item.Meta.Name,
|
|
Count = item.Meta.Total,
|
|
Ctime = mtime
|
|
});
|
|
}
|
|
|
|
foreach (var item in parameter.SeriesList)
|
|
{
|
|
if (item.Meta.Total <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
Bitmap image = null;
|
|
if (item.Meta.Cover == null || item.Meta.Cover == "")
|
|
{
|
|
image = ImageHelper.LoadFromResource(new Uri($"avares://DownKyi/Resources/video-placeholder.png"));
|
|
}
|
|
else
|
|
{
|
|
StorageCover storageCover = new StorageCover();
|
|
string cover = null;
|
|
await Task.Run(() => { cover = storageCover.GetCover(item.Meta.Cover); });
|
|
image = storageCover.GetCoverThumbnail(cover, 190, 190);
|
|
}
|
|
|
|
// 当地时区
|
|
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
|
|
DateTime dateCTime = startTime.AddSeconds(item.Meta.Mtime);
|
|
string mtime = dateCTime.ToString("yyyy-MM-dd");
|
|
|
|
SeasonsSeries.Add(new SeasonsSeries
|
|
{
|
|
Id = item.Meta.SeriesId,
|
|
Cover = image,
|
|
TypeImage = NormalIcon.Instance().Channel1,
|
|
Name = item.Meta.Name,
|
|
Count = item.Meta.Total,
|
|
Ctime = mtime
|
|
});
|
|
}
|
|
}
|
|
} |