/// <summary> /// 屏蔽滚动弹幕事件 /// </summary> private void ExecuteScrollFilterCommand() { AllowStatus isScrollFilter = ScrollFilter ? AllowStatus.YES : AllowStatus.NO; bool isSucceed = SettingsManager.GetInstance().SetDanmakuScrollFilter(isScrollFilter); PublishTip(isSucceed); }
/// <summary> /// 是否接收测试版更新事件 /// </summary> private void ExecuteReceiveBetaVersionCommand() { AllowStatus isReceiveBetaVersion = IsReceiveBetaVersion ? AllowStatus.YES : AllowStatus.NO; bool isSucceed = SettingsManager.GetInstance().IsReceiveBetaVersion(isReceiveBetaVersion); PublishTip(isSucceed); }
/// <summary> /// 是否在启动时自动检查更新事件 /// </summary> private void ExecuteAutoUpdateWhenLaunchCommand() { AllowStatus isAutoUpdateWhenLaunch = AutoUpdateWhenLaunch ? AllowStatus.YES : AllowStatus.NO; bool isSucceed = SettingsManager.GetInstance().SetAutoUpdateWhenLaunch(isAutoUpdateWhenLaunch); PublishTip(isSucceed); }
/// <summary> /// 是否开启Aria http代理事件 /// </summary> private void ExecuteIsAriaHttpProxyCommand() { AllowStatus isAriaHttpProxy = IsAriaHttpProxy ? AllowStatus.YES : AllowStatus.NO; bool isSucceed = SettingsManager.GetInstance().IsAriaHttpProxy(isAriaHttpProxy); PublishTip(isSucceed); }
/// <summary> /// 导航到VideoDetail页面时执行 /// </summary> /// <param name="navigationContext"></param> public override void OnNavigatedTo(NavigationContext navigationContext) { base.OnNavigatedTo(navigationContext); isOnNavigatedTo = true; // 屏蔽顶部弹幕 AllowStatus danmakuTopFilter = SettingsManager.GetInstance().GetDanmakuTopFilter(); TopFilter = danmakuTopFilter == AllowStatus.YES; // 屏蔽底部弹幕 AllowStatus danmakuBottomFilter = SettingsManager.GetInstance().GetDanmakuBottomFilter(); BottomFilter = danmakuBottomFilter == AllowStatus.YES; // 屏蔽滚动弹幕 AllowStatus danmakuScrollFilter = SettingsManager.GetInstance().GetDanmakuScrollFilter(); ScrollFilter = danmakuScrollFilter == AllowStatus.YES; // 分辨率-宽 ScreenWidth = SettingsManager.GetInstance().GetDanmakuScreenWidth(); // 分辨率-高 ScreenHeight = SettingsManager.GetInstance().GetDanmakuScreenHeight(); // 弹幕字体 string danmakuFont = SettingsManager.GetInstance().GetDanmakuFontName(); if (danmakuFont != null && Fonts.Contains(danmakuFont)) { // 只有系统中存在当前设置的字体,才能显示 SelectedFont = danmakuFont; } // 弹幕字体大小 FontSize = SettingsManager.GetInstance().GetDanmakuFontSize(); // 弹幕限制行数 LineCount = SettingsManager.GetInstance().GetDanmakuLineCount(); // 弹幕布局算法 DanmakuLayoutAlgorithm layoutAlgorithm = SettingsManager.GetInstance().GetDanmakuLayoutAlgorithm(); SetLayoutAlgorithm(layoutAlgorithm); isOnNavigatedTo = false; }
/// <summary> /// 导航到VideoDetail页面时执行 /// </summary> /// <param name="navigationContext"></param> public override void OnNavigatedTo(NavigationContext navigationContext) { base.OnNavigatedTo(navigationContext); isOnNavigatedTo = true; // Aria服务器端口 AriaListenPort = SettingsManager.GetInstance().GetAriaListenPort(); // Aria的日志等级 AriaConfigLogLevel ariaLogLevel = SettingsManager.GetInstance().GetAriaLogLevel(); SelectedAriaLogLevel = ariaLogLevel.ToString("G"); // Aria同时下载数 SelectedAriaMaxConcurrentDownload = SettingsManager.GetInstance().GetAriaMaxConcurrentDownloads(); // Aria最大线程数 SelectedAriaSplit = SettingsManager.GetInstance().GetAriaSplit(); // Aria下载速度限制 AriaMaxOverallDownloadLimit = SettingsManager.GetInstance().GetAriaMaxOverallDownloadLimit(); // Aria下载单文件速度限制 AriaMaxDownloadLimit = SettingsManager.GetInstance().GetAriaMaxDownloadLimit(); // 是否开启Aria http代理 AllowStatus isAriaHttpProxy = SettingsManager.GetInstance().IsAriaHttpProxy(); IsAriaHttpProxy = isAriaHttpProxy == AllowStatus.YES; // Aria的http代理的地址 AriaHttpProxy = SettingsManager.GetInstance().GetAriaHttpProxy(); // Aria的http代理的端口 AriaHttpProxyPort = SettingsManager.GetInstance().GetAriaHttpProxyListenPort(); // Aria文件预分配 AriaConfigFileAllocation ariaFileAllocation = SettingsManager.GetInstance().GetAriaFileAllocation(); SelectedAriaFileAllocation = ariaFileAllocation.ToString("G"); isOnNavigatedTo = false; }
/// <summary> /// 监听剪贴板更新事件,会执行两遍以上 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnClipboardUpdated(object sender, EventArgs e) { #region 执行第二遍时跳过 times += 1; DispatcherTimer timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 300) }; timer.Tick += (s, ex) => { timer.IsEnabled = false; times = 0; }; timer.IsEnabled = true; if (times % 2 == 0) { timer.IsEnabled = false; times = 0; return; } #endregion AllowStatus isListenClipboard = SettingsManager.GetInstance().IsListenClipboard(); if (isListenClipboard != AllowStatus.YES) { return; } string input; try { IDataObject data = Clipboard.GetDataObject(); string[] fs = data.GetFormats(); input = data.GetData(fs[0]).ToString(); } catch (Exception exc) { Console.WriteLine("OnClipboardUpdated()发生异常: {0}", exc); LogManager.Error("OnClipboardUpdated", exc); return; } SearchService searchService = new SearchService(); searchService.BiliInput(input + AppConstant.ClipboardId, ViewIndexViewModel.Tag, eventAggregator); }
/// <summary> /// 设置是否允许启动时检查更新 /// </summary> /// <param name="autoUpdateWhenLaunch"></param> /// <returns></returns> public bool SetAutoUpdateWhenLaunch(AllowStatus autoUpdateWhenLaunch) { appSettings.About.AutoUpdateWhenLaunch = autoUpdateWhenLaunch; return(SetSettings()); }
/// <summary> /// 设置是否接收测试版更新 /// </summary> /// <param name="isReceiveBetaVersion"></param> /// <returns></returns> public bool IsReceiveBetaVersion(AllowStatus isReceiveBetaVersion) { appSettings.About.IsReceiveBetaVersion = isReceiveBetaVersion; return(SetSettings()); }
/// <summary> /// 设置是否解除地区限制 /// </summary> /// <param name="isLiftingOfRegion"></param> /// <returns></returns> public bool IsLiftingOfRegion(AllowStatus isLiftingOfRegion) { appSettings.Network.IsLiftingOfRegion = isLiftingOfRegion; return(SetSettings()); }
/// <summary> /// 设置是否屏蔽底部弹幕 /// </summary> /// <param name="danmakuFilter"></param> /// <returns></returns> public bool SetDanmakuBottomFilter(AllowStatus danmakuFilter) { appSettings.Danmaku.DanmakuBottomFilter = danmakuFilter; return(SetSettings()); }
/// <summary> /// 是否监听剪贴板 /// </summary> /// <param name="isListen"></param> /// <returns></returns> public bool IsListenClipboard(AllowStatus isListen) { appSettings.Basic.IsListenClipboard = isListen; return(SetSettings()); }
/// <summary> /// 设置是否使用默认下载目录 /// </summary> /// <param name="isUseSaveVideoRootPath"></param> /// <returns></returns> public bool IsUseSaveVideoRootPath(AllowStatus isUseSaveVideoRootPath) { appSettings.Video.IsUseSaveVideoRootPath = isUseSaveVideoRootPath; return(SetSettings()); }
/// <summary> /// 设置是否下载flv视频后转码为mp4 /// </summary> /// <param name="isTranscodingFlvToMp4"></param> /// <returns></returns> public bool IsTranscodingFlvToMp4(AllowStatus isTranscodingFlvToMp4) { appSettings.Video.IsTranscodingFlvToMp4 = isTranscodingFlvToMp4; return(SetSettings()); }
/// <summary> /// 设置是否启用https /// </summary> /// <param name="useSSL"></param> /// <returns></returns> public bool UseSSL(AllowStatus useSSL) { appSettings.Network.UseSSL = useSSL; return(SetSettings()); }
/// <summary> /// 将下载音频和视频的函数中相同代码抽象出来 /// </summary> /// <param name="downloading"></param> /// <param name="downloadVideo"></param> /// <returns></returns> private string DownloadVideo(DownloadingItem downloading, PlayUrlDashVideo downloadVideo) { // 如果为空,说明没有匹配到可下载的音频视频 if (downloadVideo == null) { return(null); } // 下载链接 List <string> urls = new List <string>(); if (downloadVideo.BaseUrl != null) { urls.Add(downloadVideo.BaseUrl); } if (downloadVideo.BackupUrl != null) { urls.AddRange(downloadVideo.BackupUrl); } // 路径 downloading.DownloadBase.FilePath = downloading.DownloadBase.FilePath.Replace("\\", "/"); string[] temp = downloading.DownloadBase.FilePath.Split('/'); //string path = downloading.DownloadBase.FilePath.Replace(temp[temp.Length - 1], ""); string path = downloading.DownloadBase.FilePath.TrimEnd(temp[temp.Length - 1].ToCharArray()); // 下载文件名 string fileName = Guid.NewGuid().ToString("N"); string key = $"{downloadVideo.Id}_{downloadVideo.Codecs}"; // 老版本数据库没有这一项,会变成null if (downloading.Downloading.DownloadedFiles == null) { downloading.Downloading.DownloadedFiles = new List <string>(); } if (downloading.Downloading.DownloadFiles.ContainsKey(key)) { // 如果存在,表示下载过, // 则继续使用上次下载的文件名 fileName = downloading.Downloading.DownloadFiles[key]; // 还要检查一下文件有没有被人删掉,删掉的话重新下载 // 如果下载视频之后音频文件被人删了。此时gid还是视频的,会下错文件 if (downloading.Downloading.DownloadedFiles.Contains(key) && File.Exists(Path.Combine(path, fileName))) { return(Path.Combine(path, fileName)); } } else { // 记录本次下载的文件 try { downloading.Downloading.DownloadFiles.Add(key, fileName); } catch (ArgumentException) { } // Gid最好能是每个文件单独存储,现在复用有可能会混 // 不过好消息是下载是按固定顺序的,而且下载了两个音频会混流不过 downloading.Downloading.Gid = null; } // 启用https AllowStatus useSSL = SettingsManager.GetInstance().UseSSL(); if (useSSL == AllowStatus.YES) { for (int i = 0; i < urls.Count; i++) { string url = urls[i]; if (url.StartsWith("http://")) { urls[i] = url.Replace("http://", "https://"); } } } else { for (int i = 0; i < urls.Count; i++) { string url = urls[i]; if (url.StartsWith("https://")) { urls[i] = url.Replace("https://", "http://"); } } } // 开始下载 DownloadResult downloadStatus = DownloadByAria(downloading, urls, path, fileName); switch (downloadStatus) { case DownloadResult.SUCCESS: downloading.Downloading.DownloadedFiles.Add(key); downloading.Downloading.Gid = null; return(Path.Combine(path, fileName)); case DownloadResult.FAILED: case DownloadResult.ABORT: default: return(nullMark); } }
/// <summary> /// 解析后是否自动下载解析视频 /// </summary> /// <param name="isAutoDownloadAll"></param> /// <returns></returns> public bool IsAutoDownloadAll(AllowStatus isAutoDownloadAll) { appSettings.Basic.IsAutoDownloadAll = isAutoDownloadAll; return(SetSettings()); }
/// <summary> /// 设置是否开启Aria http代理 /// </summary> /// <param name="isAriaHttpProxy"></param> /// <returns></returns> public bool IsAriaHttpProxy(AllowStatus isAriaHttpProxy) { appSettings.Network.IsAriaHttpProxy = isAriaHttpProxy; return(SetSettings()); }
/// <summary> /// 视频详情页面是否自动解析 /// </summary> /// <param name="IsAuto"></param> /// <returns></returns> public bool IsAutoParseVideo(AllowStatus IsAuto) { appSettings.Basic.IsAutoParseVideo = IsAuto; return(SetSettings()); }
/// <summary> /// 设置是否自定义分辨率 /// </summary> /// <param name="isCustomResolution"></param> /// <returns></returns> public bool IsCustomDanmakuResolution(AllowStatus isCustomResolution) { appSettings.Danmaku.IsCustomDanmakuResolution = isCustomResolution; return(SetSettings()); }