Ejemplo n.º 1
0
        public static XElement CreateSingleDownloadXElement(BiliDashDownload viewModel)//单个视频创建XElement
        {
            var model = new DownloadXmlModel()
            {
                DownloadName    = viewModel.DownloadName,
                Title           = viewModel.Title,
                Bv              = viewModel.Bv,
                Cid             = viewModel.Cid,
                Quality         = viewModel.Quality,
                CacheFolderPath = viewModel.CacheFolder.Path,
                PartList        = new DownloadPartXmlModel[]
                {
                    new DownloadPartXmlModel()
                    {
                        TaskGuid         = viewModel.PartList[0].TaskGuid,
                        RestoreModelJson = viewModel.PartList[0].TaskRestoreModelJson
                    },
                    new DownloadPartXmlModel()
                    {
                        TaskGuid         = viewModel.PartList[1].TaskGuid,
                        RestoreModelJson = viewModel.PartList[1].TaskRestoreModelJson
                    }
                }
            };//建立xml模型,用于储存

            return(DownloadXmlModelToXElement(model));
        }
Ejemplo n.º 2
0
        private async Task RecreateDownloadAsync()//有未完成的任务,重新创建
        {
            var xmlList = DownloadXmlHelper.GetCurrentDownloads();

            if (xmlList.Count < 1)
            {
                return;
            }

            foreach (var xml in xmlList)
            {
                try
                {
                    var download = await BiliDashDownload
                                   .RecreateAsync(xml, ApplicationData.Current.LocalSettings.Values["biliUserSESSDATA"] as string);

                    this.activeDownloadList.Add(download);
                }
                catch (Exception ex)
                {
                    var dialog = new ExceptionDialog(ex.Message, XamlRoot);
                    await dialog.ShowAsync();
                }
            }
        }
Ejemplo n.º 3
0
        public static async Task CreateDashDownloadAsync(BiliVideo video, DashVideoInfo videoInfo, DashAudioInfo audioInfo)
        {
            try
            {
                var download = await BiliDashDownload.CreateAsync(video, videoInfo, audioInfo, Settings.SESSDATA);

                DownloadPage.Current.CreateDownload(download);
                download.Completed += async(s, e) =>
                {
                    await LogCompleteAsync(s as BiliDashDownload);

                    _logger.Info($"下载完成 {video.Title}-{video.Name}({video.Bv},P{video.Order})");
                };
                var task = download.StartAsync();
                _logger.Info($"开始下载 {video.Title}-{video.Name}({video.Bv},P{video.Order})");
                await task;
            }
            catch (WebException e)
            {
                _logger.Info(e, e.Message);
                //var dialog = new ExceptionDialog(e);
                //await dialog.ShowAsync();
                return;
            }
            catch (Exception e)
            {
                _logger.Error(e, e.Message);
                //var dialog = new ExceptionDialog(e);
                //await dialog.ShowAsync();
                return;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 创建下载后自动navigate
        /// </summary>
        /// <param name="bv"></param>
        /// <param name="cid"></param>
        /// <param name="quality"></param>
        /// <param name="sESSDATA"></param>
        /// <returns></returns>
        public static async Task CreateDownloadAsync(string bv, long cid, int quality, string sESSDATA, XamlRoot xamlRoot) //创建下载
        {
            if (string.IsNullOrWhiteSpace(Settings.DownloadPath))                                                          //检查下载目录是否为空
            {
                var dialog = new ErrorDialog("未设置下载储存文件夹,请前往设置以更改", xamlRoot)
                {
                    PrimaryButtonText = "前往设置"
                };
                var result = await dialog.ShowAsync();

                if (result == ContentDialogResult.Secondary)
                {
                    return;
                }
                else
                {
                    MainPage.ContentFrame.Navigate(typeof(SettingPage));
                    MainPage.NavView.SelectedItem = MainPage.NavView.SettingsItem;
                    return;
                }
            }
            try
            {
                await StorageFolder.GetFolderFromPathAsync(Settings.DownloadPath);
            }
            catch (FileNotFoundException)
            {
                throw new DirectoryNotFoundException("找不到指定下载目录:" + Settings.DownloadPath);
            }

            if (Settings.AutoDownloadDanmaku)
            {
                var video = await BiliVideoHelper.GetSingleVideoAsync(bv, cid, quality, sESSDATA);

                _ = BiliDanmakuHelper.DownloadDanmakuAsync(video.Title, video.Name, cid);
            }

            try
            {
                var download = await BiliDashDownload.CreateAsync(bv, cid, quality, sESSDATA);

                DownloadPage.Current.activeDownloadList.Add(download);
                var task = download.StartAsync();
                MainPage.NavView.SelectedItem = MainPage.NavViewItems[0];
                MainPage.ContentFrame.Navigate(typeof(DownloadPage));
                DownloadPage.Current.pivot.SelectedIndex = 0;
                await task;
            }
            catch (Exception ex)
            {
                var dialog = new ExceptionDialog(ex.Message, xamlRoot);
                await dialog.ShowAsync();
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 创建下载后自动navigate
        /// </summary>
        /// <param name="videos"></param>
        /// <param name="quality"></param>
        /// <param name="sESSDATA"></param>
        /// <returns></returns>
        public static async Task CreateDownloadsAsync(List <BiliVideoInfo> videos, int quality, string sESSDATA, XamlRoot xamlRoot)
        {
            if (ApplicationData.Current.LocalSettings.Values["downloadPath"] as string == null)//检查下载目录是否为空
            {
                var dialog = new ErrorDialog("未设置下载储存文件夹,请前往设置以更改", xamlRoot)
                {
                    PrimaryButtonText = "前往设置"
                };
                var result = await dialog.ShowAsync();

                if (result == ContentDialogResult.Secondary)
                {
                    return;
                }
                else
                {
                    MainPage.ContentFrame.Navigate(typeof(SettingPage));
                    MainPage.NavView.SelectedItem = MainPage.NavView.SettingsItem;
                    return;
                }
            }

            try
            {
                await StorageFolder.GetFolderFromPathAsync(Settings.DownloadPath);
            }
            catch (FileNotFoundException)
            {
                throw new DirectoryNotFoundException("找不到指定下载目录:" + Settings.DownloadPath);
            }

            var videoList = new List <BiliVideo>();

            foreach (var video in videos)
            {
                videoList.Add(await BiliVideoHelper.GetSingleVideoAsync(video.Bv, video.Cid, quality, sESSDATA));
            }

            if (Settings.AutoDownloadDanmaku)
            {
                _ = BiliDanmakuHelper.DownloadMultiDanmakuAsync(videoList);
            }

            var downloadList = new List <IBiliDownload>();

            foreach (var video in videoList)
            {
                var download = await BiliDashDownload.CreateAsync(video.Bv, video.Cid, quality, sESSDATA);

                downloadList.Add(download);
                DownloadPage.Current.activeDownloadList.Add(download);
            }

            MainPage.NavView.SelectedItem = MainPage.NavViewItems[0];
            MainPage.ContentFrame.Navigate(typeof(DownloadPage));
            DownloadPage.Current.pivot.SelectedIndex = 0;

            var tasks = new List <Task>();

            foreach (var download in downloadList)
            {
                tasks.Add(download.StartAsync());
            }

            try
            {
                await Task.WhenAll(tasks);
            }
            catch (Exception ex)
            {
                var dialog = new ExceptionDialog(ex.Message, xamlRoot);
                await dialog.ShowAsync();
            }
        }