diff --git a/electron/resources/extra/win/scrcpy/SDL2.dll b/electron/resources/extra/win/scrcpy/SDL2.dll
index 4078bab4..641c874a 100755
Binary files a/electron/resources/extra/win/scrcpy/SDL2.dll and b/electron/resources/extra/win/scrcpy/SDL2.dll differ
diff --git a/electron/resources/extra/win/scrcpy/avcodec-61.dll b/electron/resources/extra/win/scrcpy/avcodec-61.dll
index a2cf7744..076088ba 100755
Binary files a/electron/resources/extra/win/scrcpy/avcodec-61.dll and b/electron/resources/extra/win/scrcpy/avcodec-61.dll differ
diff --git a/electron/resources/extra/win/scrcpy/avformat-61.dll b/electron/resources/extra/win/scrcpy/avformat-61.dll
index ff28ea82..8b64c92a 100755
Binary files a/electron/resources/extra/win/scrcpy/avformat-61.dll and b/electron/resources/extra/win/scrcpy/avformat-61.dll differ
diff --git a/electron/resources/extra/win/scrcpy/avutil-59.dll b/electron/resources/extra/win/scrcpy/avutil-59.dll
index a4dce37b..0062970e 100755
Binary files a/electron/resources/extra/win/scrcpy/avutil-59.dll and b/electron/resources/extra/win/scrcpy/avutil-59.dll differ
diff --git a/electron/resources/extra/win/scrcpy/libusb-1.0.dll b/electron/resources/extra/win/scrcpy/libusb-1.0.dll
index 0d3c4f22..215f4858 100755
Binary files a/electron/resources/extra/win/scrcpy/libusb-1.0.dll and b/electron/resources/extra/win/scrcpy/libusb-1.0.dll differ
diff --git a/electron/resources/extra/win/scrcpy/scrcpy-server b/electron/resources/extra/win/scrcpy/scrcpy-server
index 121e372f..b3c63d4a 100755
Binary files a/electron/resources/extra/win/scrcpy/scrcpy-server and b/electron/resources/extra/win/scrcpy/scrcpy-server differ
diff --git a/electron/resources/extra/win/scrcpy/scrcpy.exe b/electron/resources/extra/win/scrcpy/scrcpy.exe
index c063c474..4217170f 100755
Binary files a/electron/resources/extra/win/scrcpy/scrcpy.exe and b/electron/resources/extra/win/scrcpy/scrcpy.exe differ
diff --git a/electron/resources/extra/win/scrcpy/swresample-5.dll b/electron/resources/extra/win/scrcpy/swresample-5.dll
index a533dfd9..4a080257 100755
Binary files a/electron/resources/extra/win/scrcpy/swresample-5.dll and b/electron/resources/extra/win/scrcpy/swresample-5.dll differ
diff --git a/src/components/Quick/components/Task/components/TaskListDialog/index.vue b/src/components/Quick/components/Task/components/TaskListDialog/index.vue
index e62a3548..3b0b3a1c 100644
--- a/src/components/Quick/components/Task/components/TaskListDialog/index.vue
+++ b/src/components/Quick/components/Task/components/TaskListDialog/index.vue
@@ -109,7 +109,7 @@
import { ElMessage } from 'element-plus'
+import dayjs from 'dayjs'
import {
timeUnit as intervalModel,
@@ -214,6 +216,14 @@ function handleRemove(row) {
taskStore.remove(row)
}
+function checkExpired(row) {
+ if (!row?.formatTimeout || ['interval'].includes(row.timerType)) {
+ return true
+ }
+
+ return dayjs(row.formatTimeout).unix() > dayjs().unix()
+}
+
defineExpose({
open,
close,
diff --git a/src/locales/languages/en-US.json b/src/locales/languages/en-US.json
index 8e4ce71c..46783320 100644
--- a/src/locales/languages/en-US.json
+++ b/src/locales/languages/en-US.json
@@ -60,6 +60,7 @@
"device.task.frequency.interval": "Periodic repetition",
"device.task.timeout": "Execution Time",
"device.task.timeout.tips": "Cannot be earlier than the current time",
+ "device.task.timeout.expired": "The task has expired",
"device.task.interval": "Repeat Interval",
"device.task.devices": "Involved Devices",
"device.task.noRepeat": "No Repeat",
@@ -311,6 +312,9 @@
"preferences.audio.disable-audio.name": "Disable Audio Forwarding",
"preferences.audio.disable-audio.placeholder": "Audio forwarding will be disabled when enabled",
"preferences.audio.disable-audio.tips": "If your device audio capture is abnormal, you can open this option to ensure that you can open the mirror normally",
+ "preferences.audio.audioDup.name": "Keep device audio",
+ "preferences.audio.audioDup.placeholder": "When enabled, audio will continue to play on the device during mirroring",
+ "preferences.audio.audioDup.tips": "Note: This option requires Android 13+ and apps can opt out (in which case they won't be captured)",
"preferences.audio.audio-source.name": "Audio Source",
"preferences.audio.audio-source.placeholder": "Device Audio Output",
"preferences.audio.audio-source.tips": "Tip: Selecting 'Microphone' as the source will allow you to record audio.",
@@ -335,8 +339,8 @@
"preferences.input.mouse.options[2].placeholder": "Simulates a physical HID mouse using the AOAv2 protocol",
"preferences.input.mouse.options[3].placeholder": "Disable mouse input",
"preferences.input.mouse-bind.name": "Mouse Bind",
- "preferences.input.mouse-bind.tips": "Mouse button bindings can be configured using the \"xxxx\" parameter, where each \"x\" represents a button (right click, middle click, 4th click, 5th click), and can be set to forward (+), ignore (-), back (b), home (h), app switch (s), or expand notification panel (n).",
- "preferences.input.mouse-bind.placeholder": "bhsn",
+ "preferences.input.mouse-bind.tips": "This option allows customization of mouse button functions. It uses two sets of 4-character sequences to define primary and secondary (Shift key) bindings. Each character represents a mouse button (right, middle, 4th, 5th) and can be set to: '+' forward to device, '-' ignore, 'b' back, 'h' home, 's' app switch, 'n' expand notification panel. For example, --mouse-bind=bhsn:++++ means primary bindings are back/home/app switch/notification, while secondary bindings all forward to the device.",
+ "preferences.input.mouse-bind.placeholder": "bhsn:++++",
"preferences.input.keyboard.name": "Keyboard Mode",
"preferences.input.keyboard.placeholder": "sdk",
"preferences.input.keyboard.tips": "Set keyboard input mode",
diff --git a/src/locales/languages/zh-CN.json b/src/locales/languages/zh-CN.json
index 20e038c7..74490270 100644
--- a/src/locales/languages/zh-CN.json
+++ b/src/locales/languages/zh-CN.json
@@ -60,6 +60,7 @@
"device.task.frequency.interval": "周期重复",
"device.task.timeout": "执行时间",
"device.task.timeout.tips": "不能小于当前时间",
+ "device.task.timeout.expired": "该任务已过期",
"device.task.interval": "重复间隔",
"device.task.devices": "涉及设备",
"device.task.noRepeat": "不重复",
@@ -311,6 +312,9 @@
"preferences.audio.disable-audio.name": "禁用音频转发",
"preferences.audio.disable-audio.placeholder": "开启后将禁用音频转发",
"preferences.audio.disable-audio.tips": "如果您的设备音频捕获异常,则可以打开此选项,以确保可以正常打开镜像",
+ "preferences.audio.audioDup.name": "保持设备音频",
+ "preferences.audio.audioDup.placeholder": "开启后镜像时将保持音频在设备上播放",
+ "preferences.audio.audioDup.tips": "注意:该选项需要 Android 13+,并且应用程序可以选择退出(这种情况下它们将不会被捕获)",
"preferences.audio.audio-source.name": "音频源",
"preferences.audio.audio-source.placeholder": "设备音频输出",
"preferences.audio.audio-source.tips": "技巧:如果将来源设为麦克风将可以在录制时将声音录制下来",
@@ -335,8 +339,8 @@
"preferences.input.mouse.options[2].placeholder": "使用 AOAv2 协议模拟物理 HID 鼠标",
"preferences.input.mouse.options[3].placeholder": "禁用鼠标输入",
"preferences.input.mouse-bind.name": "鼠标绑定",
- "preferences.input.mouse-bind.tips": "鼠标按键绑定可通过 “xxxx” 参数配置,其中每个 “x” 代表一个按键(右键、中键、第4键、第5键),可设置为转发(+)、忽略(-)、返回(b)、主页(h)、切换应用(s)、展开通知栏(n)。",
- "preferences.input.mouse-bind.placeholder": "bhsn",
+ "preferences.input.mouse-bind.tips": "该选项允许自定义鼠标按键功能。它使用两组4字符序列来定义主要和次要(Shift键)绑定。每个字符代表一个鼠标按键(右键、中键、第4键、第5键),可以设置为:'+' 转发到设备, '-' 忽略, 'b' 返回, 'h' 主页, 's' 切换应用, 'n' 展开通知面板。例如, --mouse-bind=bhsn:++++ 表示主要绑定为 返回/主页/切换应用/通知,次要绑定全部转发到设备。",
+ "preferences.input.mouse-bind.placeholder": "bhsn:++++",
"preferences.input.keyboard.name": "键盘模式",
"preferences.input.keyboard.tips": "设置键盘输入模式",
"preferences.input.keyboard.placeholder": "sdk",
diff --git a/src/locales/languages/zh-TW.json b/src/locales/languages/zh-TW.json
index 511aaec4..554c64e1 100644
--- a/src/locales/languages/zh-TW.json
+++ b/src/locales/languages/zh-TW.json
@@ -60,6 +60,7 @@
"device.task.frequency.interval": "週期重複",
"device.task.timeout": "執行時間",
"device.task.timeout.tips": "不能小於當前時間",
+ "device.task.timeout.expired": "該任務已過期",
"device.task.interval": "重複間隔",
"device.task.devices": "涉及設備",
"device.task.noRepeat": "不重複",
@@ -311,6 +312,9 @@
"preferences.audio.disable-audio.name": "停用音訊轉發",
"preferences.audio.disable-audio.placeholder": "開啟後將停用音訊轉發",
"preferences.audio.disable-audio.tips": "如果您的裝置音訊捕獲異常,則可以開啟此選項,以確保可以正常開啟映像",
+ "preferences.audio.audioDup.name": "保持裝置音訊",
+ "preferences.audio.audioDup.placeholder": "開啟後鏡像時將保持音訊在裝置上播放",
+ "preferences.audio.audioDup.tips": "注意:此選項需要 Android 13+,且應用程式可選擇退出(這種情況下它們將不會被捕獲)",
"preferences.audio.audio-source.name": "音訊來源",
"preferences.audio.audio-source.placeholder": "裝置音訊輸出",
"preferences.audio.audio-source.tips": "技巧:如果將來源設為麥克風將可以在錄製時將聲音錄製下來",
@@ -335,8 +339,8 @@
"preferences.input.mouse.options[2].placeholder": "使用 AOAv2 協議模擬物理 HID 滑鼠",
"preferences.input.mouse.options[3].placeholder": "停用滑鼠輸入",
"preferences.input.mouse-bind.name": "滑鼠綁定",
- "preferences.input.mouse-bind.tips": "滑鼠按鍵綁定可透過「xxxx」 參數配置,其中每個「x」 代表一個按鍵(右鍵、中鍵、第4鍵、第5鍵),可設定為轉送(+)、忽略(-)、返回(b)、主頁(h)、切換應用程式(s)、展開通知欄(n)。",
- "preferences.input.mouse-bind.placeholder": "bhsn",
+ "preferences.input.mouse-bind.tips": "該選項允許自定義滑鼠按鍵功能。它使用兩組4字符序列來定義主要和次要(Shift鍵)綁定。每個字符代表一個滑鼠按鍵(右鍵、中鍵、第4鍵、第5鍵),可以設置為:'+' 轉發到設備, '-' 忽略, 'b' 返回, 'h' 主頁, 's' 切換應用, 'n' 展開通知面板。例如, --mouse-bind=bhsn:++++ 表示主要綁定為 返回/主頁/切換應用/通知,次要綁定全部轉發到設備。",
+ "preferences.input.mouse-bind.placeholder": "bhsn:++++",
"preferences.input.keyboard.name": "鍵盤模式",
"preferences.input.keyboard.tips": "設定鍵盤輸入模式",
"preferences.input.keyboard.placeholder": "sdk",
diff --git a/src/store/preference/model/audio/index.js b/src/store/preference/model/audio/index.js
index 8ea85c19..37de9851 100644
--- a/src/store/preference/model/audio/index.js
+++ b/src/store/preference/model/audio/index.js
@@ -11,6 +11,14 @@ export default {
placeholder: 'preferences.audio.disable-audio.placeholder',
tips: 'preferences.audio.disable-audio.tips',
},
+ audioDup: {
+ label: 'preferences.audio.audioDup.name',
+ field: '--audio-dup',
+ type: 'Switch',
+ value: undefined,
+ placeholder: 'preferences.audio.audioDup.placeholder',
+ tips: 'preferences.audio.audioDup.tips',
+ },
audioSource: {
label: 'preferences.audio.audio-source.name',
field: '--audio-source',
diff --git a/src/store/task/index.js b/src/store/task/index.js
index c0814e6d..d72bfffe 100644
--- a/src/store/task/index.js
+++ b/src/store/task/index.js
@@ -7,6 +7,7 @@ import { nanoid } from 'nanoid'
import { useEventBus } from '@vueuse/core'
+import { ElMessage } from 'element-plus'
import { clearTimer, isIPWithPort, replaceIP, setTimer } from '$/utils/index.js'
dayjs.extend(duration)
@@ -71,6 +72,11 @@ export const useTaskStore = defineStore(
const timeout = getTimeout(task)
+ if (timeout < 0) {
+ ElMessage.warning(window.t('device.task.timeout.expired'))
+ return false
+ }
+
task.timerId = setTimer(
timerType,
() => {