using DownKyi.Models;
using DownKyi.Services.Download;
using DownKyi.Utils;
using DownKyi.ViewModels;
using DownKyi.ViewModels.Dialogs;
using DownKyi.ViewModels.DownloadManager;
using DownKyi.ViewModels.Settings;
using DownKyi.ViewModels.Toolbox;
using DownKyi.Views;
using DownKyi.Views.Dialogs;
using DownKyi.Views.DownloadManager;
using DownKyi.Views.Settings;
using DownKyi.Views.Toolbox;
using Prism.Ioc;
using System;
using System.Collections.ObjectModel;
using System.Windows;
namespace DownKyi
{
///
/// Interaction logic for App.xaml
///
public partial class App
{
public static ObservableCollection DownloadingList { get; set; }
public static ObservableCollection DownloadedList { get; set; }
// 下载服务
private IDownloadService downloadService;
protected override Window CreateShell()
{
// 设置主题
DictionaryResource.LoadTheme("ThemeDefault");
//DictionaryResource.LoadTheme("ThemeDiy");
// 切换语言
DictionaryResource.LoadLanguage("Default");
//DictionaryResource.LoadLanguage("en_US");
// 初始化数据
DownloadingList = new ObservableCollection();
DownloadedList = new ObservableCollection();
// test DownloadingList data
DownloadingList.Add(new DownloadingItem
{
MainTitle = "Test1",
Name = "name1=name1=name1=name1=name1=name1=name1=name1=name1=name1=name1",
ZoneImage = (System.Windows.Media.DrawingImage)Current.Resources[Core.BiliApi.Zone.VideoZoneIcon.Instance().GetZoneImageKey(4)],
Resolution = new Resolution
{
Name = "1080P",
Id = 64
},
AudioCodecName = "194K",
});
DownloadingList.Add(new DownloadingItem
{
MainTitle = "Test2",
Name = "name2",
ZoneImage = (System.Windows.Media.DrawingImage)Current.Resources[Core.BiliApi.Zone.VideoZoneIcon.Instance().GetZoneImageKey(3)],
Resolution = new Resolution
{
Name = "1080P",
Id = 64
},
Duration = "1h23m50s",
VideoCodecName = "HEVC",
AudioCodecName = "194K",
});
DownloadingList.Add(new DownloadingItem
{
MainTitle = "Test3",
Name = "name3",
ZoneImage = (System.Windows.Media.DrawingImage)Current.Resources[Core.BiliApi.Zone.VideoZoneIcon.Instance().GetZoneImageKey(3)],
Resolution = new Resolution
{
Name = "720P",
Id = 64
},
Duration = "23m50s",
VideoCodecName = "AVC",
AudioCodecName = "194K",
});
DownloadingList.Add(new DownloadingItem
{
MainTitle = "Test4",
Name = "name4",
ZoneImage = (System.Windows.Media.DrawingImage)Current.Resources[Core.BiliApi.Zone.VideoZoneIcon.Instance().GetZoneImageKey(3)],
Resolution = new Resolution
{
Name = "720P",
Id = 64
},
Duration = "23m50s",
VideoCodecName = "AVC",
AudioCodecName = "194K",
});
DownloadingList.Add(new DownloadingItem
{
MainTitle = "Test5",
Name = "name5",
ZoneImage = (System.Windows.Media.DrawingImage)Current.Resources[Core.BiliApi.Zone.VideoZoneIcon.Instance().GetZoneImageKey(5)],
Resolution = new Resolution
{
Name = "720P",
Id = 64
},
Duration = "23m50s",
VideoCodecName = "AVC",
AudioCodecName = "194K",
});
// TODO 从数据库读取
// 启动下载服务
downloadService = new AriaDownloadService(DownloadingList, DownloadedList);
downloadService.Start();
return Container.Resolve();
}
protected override void OnExit(ExitEventArgs e)
{
// 关闭下载服务
downloadService.End();
base.OnExit(e);
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// pages
containerRegistry.RegisterForNavigation(ViewIndexViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewLoginViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewVideoDetailViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewSettingsViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewDownloadManagerViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewToolboxViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewUserSpaceViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewMySpaceViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewPublicFavoritesViewModel.Tag);
// downloadManager pages
containerRegistry.RegisterForNavigation(ViewDownloadingViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewDownloadFinishedViewModel.Tag);
// settings pages
containerRegistry.RegisterForNavigation(ViewBasicViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewNetworkViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewVideoViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewDanmakuViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewAboutViewModel.Tag);
// tools pages
containerRegistry.RegisterForNavigation(ViewBiliHelperViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewDelogoViewModel.Tag);
containerRegistry.RegisterForNavigation(ViewExtractMediaViewModel.Tag);
// dialogs
containerRegistry.RegisterDialog(ViewDownloadSetterViewModel.Tag);
containerRegistry.RegisterDialog(ViewParsingSelectorViewModel.Tag);
}
///
/// 异步修改绑定到UI的属性
///
///
public static void PropertyChangeAsync(Action callback)
{
Current.Dispatcher.Invoke(callback);
}
}
}