From a73e5d8d59744f7e4eb9a3de3955331cbc88b291 Mon Sep 17 00:00:00 2001 From: TPAXcc <91980905+TPAXcc@users.noreply.github.com> Date: Thu, 19 Sep 2024 19:58:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=A2=9E=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E6=A1=A3=E4=BD=8D=E5=BF=AB=E8=BF=9B=20(#810)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PositionForwardPressShortcutFunction.cs | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/BiliLite.UWP/Models/Functions/PositionForwardPressShortcutFunction.cs b/src/BiliLite.UWP/Models/Functions/PositionForwardPressShortcutFunction.cs index 35b1d99d9..68fc4818f 100644 --- a/src/BiliLite.UWP/Models/Functions/PositionForwardPressShortcutFunction.cs +++ b/src/BiliLite.UWP/Models/Functions/PositionForwardPressShortcutFunction.cs @@ -1,4 +1,5 @@ -using BiliLite.Extensions; +using System; +using BiliLite.Extensions; using BiliLite.Pages; using System.Threading.Tasks; using System.Timers; @@ -8,37 +9,64 @@ namespace BiliLite.Models.Functions { public class PositionForwardPressShortcutFunction : BaseShortcutFunction { + private const int DEFAULT_STEP_TIME_SECOND = 3; // 默认步进时间为1秒 + private int m_currentStepTimeSecond = DEFAULT_STEP_TIME_SECOND; + private const int INTERVAL_TIME = 500; + private int m_stepPosition = 1; // 当前档位 + private const int STEP_POSITION_UP_TIMES = 5; // 每5次步进,挡位提升1档 + private static readonly int[] _stepTimesForPositions = { 3, 5, 10, 15, 30, 60, 600, 1800, 3600 }; + public override string Name { get; } = "持续快进"; public override async Task Action(object param) { if (!(param is PlayPage page)) return; if (ControlsExtensions.CheckFocusTextBoxNow()) return; - var timer = new Timer(100); + + var timer = new Timer(INTERVAL_TIME); + var elapsedTimes = 0; timer.Elapsed += (sender, e) => { page.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { - page.PositionForward(); + // 根据档位设置步进时间 + SetStepTimeBasedOnPosition(); + page.PositionForward(m_currentStepTimeSecond); }); + elapsedTimes++; + if ((1f * elapsedTimes) % STEP_POSITION_UP_TIMES == 0) + { + m_stepPosition += 1; + } }; timer.AutoReset = true; - (ReleaseFunction as PositionForwardReleaseShortcutFunction).Timer = timer; + (ReleaseFunction as PositionForwardReleaseShortcutFunction).Excute = ()=> + { + timer.Stop(); + m_stepPosition = 1; + }; timer.Start(); } + private void SetStepTimeBasedOnPosition() + { + m_currentStepTimeSecond = m_stepPosition > 0 && m_stepPosition <= _stepTimesForPositions.Length + ? _stepTimesForPositions[m_stepPosition - 1] + : _stepTimesForPositions[_stepTimesForPositions.Length - 1]; + } + public override IShortcutFunction ReleaseFunction { get; } = new PositionForwardReleaseShortcutFunction(); } public class PositionForwardReleaseShortcutFunction : BaseShortcutFunction { - public Timer Timer { get; set; } + public Action Excute { get; set; } public override string Name { get; } = "停止持续快进"; public override async Task Action(object param) { - Timer?.Stop(); + Excute?.Invoke(); } } }