コード例 #1
0
        /// <summary>
        /// 屏蔽滚动弹幕事件
        /// </summary>
        private void ExecuteScrollFilterCommand()
        {
            AllowStatus isScrollFilter = ScrollFilter ? AllowStatus.YES : AllowStatus.NO;

            bool isSucceed = SettingsManager.GetInstance().SetDanmakuScrollFilter(isScrollFilter);

            PublishTip(isSucceed);
        }
コード例 #2
0
        /// <summary>
        /// 是否接收测试版更新事件
        /// </summary>
        private void ExecuteReceiveBetaVersionCommand()
        {
            AllowStatus isReceiveBetaVersion = IsReceiveBetaVersion ? AllowStatus.YES : AllowStatus.NO;

            bool isSucceed = SettingsManager.GetInstance().IsReceiveBetaVersion(isReceiveBetaVersion);

            PublishTip(isSucceed);
        }
コード例 #3
0
        /// <summary>
        /// 是否在启动时自动检查更新事件
        /// </summary>
        private void ExecuteAutoUpdateWhenLaunchCommand()
        {
            AllowStatus isAutoUpdateWhenLaunch = AutoUpdateWhenLaunch ? AllowStatus.YES : AllowStatus.NO;

            bool isSucceed = SettingsManager.GetInstance().SetAutoUpdateWhenLaunch(isAutoUpdateWhenLaunch);

            PublishTip(isSucceed);
        }
コード例 #4
0
        /// <summary>
        /// 是否开启Aria http代理事件
        /// </summary>
        private void ExecuteIsAriaHttpProxyCommand()
        {
            AllowStatus isAriaHttpProxy = IsAriaHttpProxy ? AllowStatus.YES : AllowStatus.NO;

            bool isSucceed = SettingsManager.GetInstance().IsAriaHttpProxy(isAriaHttpProxy);

            PublishTip(isSucceed);
        }
コード例 #5
0
        /// <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;
        }
コード例 #6
0
        /// <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;
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
 /// <summary>
 /// 设置是否允许启动时检查更新
 /// </summary>
 /// <param name="autoUpdateWhenLaunch"></param>
 /// <returns></returns>
 public bool SetAutoUpdateWhenLaunch(AllowStatus autoUpdateWhenLaunch)
 {
     appSettings.About.AutoUpdateWhenLaunch = autoUpdateWhenLaunch;
     return(SetSettings());
 }
コード例 #9
0
 /// <summary>
 /// 设置是否接收测试版更新
 /// </summary>
 /// <param name="isReceiveBetaVersion"></param>
 /// <returns></returns>
 public bool IsReceiveBetaVersion(AllowStatus isReceiveBetaVersion)
 {
     appSettings.About.IsReceiveBetaVersion = isReceiveBetaVersion;
     return(SetSettings());
 }
コード例 #10
0
 /// <summary>
 /// 设置是否解除地区限制
 /// </summary>
 /// <param name="isLiftingOfRegion"></param>
 /// <returns></returns>
 public bool IsLiftingOfRegion(AllowStatus isLiftingOfRegion)
 {
     appSettings.Network.IsLiftingOfRegion = isLiftingOfRegion;
     return(SetSettings());
 }
コード例 #11
0
 /// <summary>
 /// 设置是否屏蔽底部弹幕
 /// </summary>
 /// <param name="danmakuFilter"></param>
 /// <returns></returns>
 public bool SetDanmakuBottomFilter(AllowStatus danmakuFilter)
 {
     appSettings.Danmaku.DanmakuBottomFilter = danmakuFilter;
     return(SetSettings());
 }
コード例 #12
0
 /// <summary>
 /// 是否监听剪贴板
 /// </summary>
 /// <param name="isListen"></param>
 /// <returns></returns>
 public bool IsListenClipboard(AllowStatus isListen)
 {
     appSettings.Basic.IsListenClipboard = isListen;
     return(SetSettings());
 }
コード例 #13
0
 /// <summary>
 /// 设置是否使用默认下载目录
 /// </summary>
 /// <param name="isUseSaveVideoRootPath"></param>
 /// <returns></returns>
 public bool IsUseSaveVideoRootPath(AllowStatus isUseSaveVideoRootPath)
 {
     appSettings.Video.IsUseSaveVideoRootPath = isUseSaveVideoRootPath;
     return(SetSettings());
 }
コード例 #14
0
 /// <summary>
 /// 设置是否下载flv视频后转码为mp4
 /// </summary>
 /// <param name="isTranscodingFlvToMp4"></param>
 /// <returns></returns>
 public bool IsTranscodingFlvToMp4(AllowStatus isTranscodingFlvToMp4)
 {
     appSettings.Video.IsTranscodingFlvToMp4 = isTranscodingFlvToMp4;
     return(SetSettings());
 }
コード例 #15
0
 /// <summary>
 /// 设置是否启用https
 /// </summary>
 /// <param name="useSSL"></param>
 /// <returns></returns>
 public bool UseSSL(AllowStatus useSSL)
 {
     appSettings.Network.UseSSL = useSSL;
     return(SetSettings());
 }
コード例 #16
0
        /// <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);
            }
        }
コード例 #17
0
 /// <summary>
 /// 解析后是否自动下载解析视频
 /// </summary>
 /// <param name="isAutoDownloadAll"></param>
 /// <returns></returns>
 public bool IsAutoDownloadAll(AllowStatus isAutoDownloadAll)
 {
     appSettings.Basic.IsAutoDownloadAll = isAutoDownloadAll;
     return(SetSettings());
 }
コード例 #18
0
 /// <summary>
 /// 设置是否开启Aria http代理
 /// </summary>
 /// <param name="isAriaHttpProxy"></param>
 /// <returns></returns>
 public bool IsAriaHttpProxy(AllowStatus isAriaHttpProxy)
 {
     appSettings.Network.IsAriaHttpProxy = isAriaHttpProxy;
     return(SetSettings());
 }
コード例 #19
0
 /// <summary>
 /// 视频详情页面是否自动解析
 /// </summary>
 /// <param name="IsAuto"></param>
 /// <returns></returns>
 public bool IsAutoParseVideo(AllowStatus IsAuto)
 {
     appSettings.Basic.IsAutoParseVideo = IsAuto;
     return(SetSettings());
 }
コード例 #20
0
 /// <summary>
 /// 设置是否自定义分辨率
 /// </summary>
 /// <param name="isCustomResolution"></param>
 /// <returns></returns>
 public bool IsCustomDanmakuResolution(AllowStatus isCustomResolution)
 {
     appSettings.Danmaku.IsCustomDanmakuResolution = isCustomResolution;
     return(SetSettings());
 }