mirror of
https://github.com/AkiChase/scrcpy-mask
synced 2025-05-10 17:28:10 +08:00
feat(KeySetting): add config import, export, etc. basic function
This commit is contained in:
parent
6089bb020d
commit
de89425d73
@ -11,6 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tauri-apps/api": ">=2.0.0-beta.8",
|
"@tauri-apps/api": ">=2.0.0-beta.8",
|
||||||
|
"@tauri-apps/plugin-clipboard-manager": "2.1.0-beta.0",
|
||||||
"@tauri-apps/plugin-store": "2.0.0-beta.2",
|
"@tauri-apps/plugin-store": "2.0.0-beta.2",
|
||||||
"pinia": "^2.1.7",
|
"pinia": "^2.1.7",
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
|
@ -17,3 +17,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
tokio = { version = "1.36.0", features = ["rt-multi-thread", "net", "macros", "io-util", "time", "sync"] }
|
tokio = { version = "1.36.0", features = ["rt-multi-thread", "net", "macros", "io-util", "time", "sync"] }
|
||||||
|
tauri-plugin-clipboard-manager = "2.1.0-beta.1"
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
"$schema": "../gen/schemas/desktop-schema.json",
|
"$schema": "../gen/schemas/desktop-schema.json",
|
||||||
"identifier": "default",
|
"identifier": "default",
|
||||||
"description": "Capability for the main window",
|
"description": "Capability for the main window",
|
||||||
"windows": [
|
"windows": ["main"],
|
||||||
"main"
|
|
||||||
],
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"event:default",
|
"event:default",
|
||||||
"window:default",
|
"window:default",
|
||||||
@ -20,6 +18,8 @@
|
|||||||
"store:allow-get",
|
"store:allow-get",
|
||||||
"store:allow-set",
|
"store:allow-set",
|
||||||
"store:allow-save",
|
"store:allow-save",
|
||||||
"store:allow-load"
|
"store:allow-load",
|
||||||
|
"clipboard-manager:default",
|
||||||
|
"clipboard-manager:allow-write-text"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -121,6 +121,7 @@ fn load_default_keyconfig(app: tauri::AppHandle) -> Result<String, String> {
|
|||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
|
.plugin(tauri_plugin_clipboard_manager::init())
|
||||||
.plugin(tauri_plugin_store::Builder::new().build())
|
.plugin(tauri_plugin_store::Builder::new().build())
|
||||||
.setup(|app| {
|
.setup(|app| {
|
||||||
let stores = app
|
let stores = app
|
||||||
|
@ -4,7 +4,7 @@ use std::path::PathBuf;
|
|||||||
pub enum ResourceName {
|
pub enum ResourceName {
|
||||||
Adb,
|
Adb,
|
||||||
ScrcpyServer,
|
ScrcpyServer,
|
||||||
DefaultKeyConfig
|
DefaultKeyConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ResHelper {
|
pub struct ResHelper {
|
||||||
|
@ -15,6 +15,7 @@ import {
|
|||||||
import { computed, onMounted, ref } from "vue";
|
import { computed, onMounted, ref } from "vue";
|
||||||
import { useGlobalStore } from "../../store/global";
|
import { useGlobalStore } from "../../store/global";
|
||||||
import { Store } from "@tauri-apps/plugin-store";
|
import { Store } from "@tauri-apps/plugin-store";
|
||||||
|
import { writeText } from "@tauri-apps/plugin-clipboard-manager";
|
||||||
import { loadDefaultKeyconfig } from "../../invoke";
|
import { loadDefaultKeyconfig } from "../../invoke";
|
||||||
import { KeyMappingConfig } from "../../keyMappingConfig";
|
import { KeyMappingConfig } from "../../keyMappingConfig";
|
||||||
|
|
||||||
@ -26,7 +27,9 @@ const showKeyInfoFlag = defineModel({ required: true });
|
|||||||
|
|
||||||
const showSetting = ref(false);
|
const showSetting = ref(false);
|
||||||
const showImportModal = ref(false);
|
const showImportModal = ref(false);
|
||||||
|
const showRenameModal = ref(false);
|
||||||
const importModalInputValue = ref("");
|
const importModalInputValue = ref("");
|
||||||
|
const renameModalInputValue = ref("");
|
||||||
|
|
||||||
const keyMappingNameOptions = computed(() => {
|
const keyMappingNameOptions = computed(() => {
|
||||||
return store.keyMappingConfigList.map((item, index) => {
|
return store.keyMappingConfigList.map((item, index) => {
|
||||||
@ -163,6 +166,78 @@ async function importDefaultKeyMappingConfig() {
|
|||||||
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
||||||
message.success(`已导入${count}个默认方案`);
|
message.success(`已导入${count}个默认方案`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createKeyMappingConfig() {
|
||||||
|
const keyboardElement = document.getElementById(
|
||||||
|
"keyboardElement"
|
||||||
|
) as HTMLElement;
|
||||||
|
const newConfig: KeyMappingConfig = {
|
||||||
|
title: "新方案",
|
||||||
|
relativeSize: {
|
||||||
|
w: keyboardElement.clientWidth,
|
||||||
|
h: keyboardElement.clientHeight,
|
||||||
|
},
|
||||||
|
list: [],
|
||||||
|
};
|
||||||
|
store.keyMappingConfigList.push(newConfig);
|
||||||
|
store.curKeyMappingIndex = store.keyMappingConfigList.length - 1;
|
||||||
|
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
||||||
|
localStore.set("curKeyMappingIndex", store.curKeyMappingIndex);
|
||||||
|
message.success("新方案已创建");
|
||||||
|
}
|
||||||
|
|
||||||
|
function copyCurKeyMappingConfig() {
|
||||||
|
const curConfig = store.keyMappingConfigList[store.curKeyMappingIndex];
|
||||||
|
const newConfig: KeyMappingConfig = {
|
||||||
|
title: curConfig.title + "-副本",
|
||||||
|
relativeSize: curConfig.relativeSize,
|
||||||
|
list: curConfig.list,
|
||||||
|
};
|
||||||
|
store.keyMappingConfigList.push(newConfig);
|
||||||
|
store.curKeyMappingIndex = store.keyMappingConfigList.length - 1;
|
||||||
|
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
||||||
|
localStore.set("curKeyMappingIndex", store.curKeyMappingIndex);
|
||||||
|
message.success("方案已复制为:" + curConfig.title + "-副本");
|
||||||
|
}
|
||||||
|
|
||||||
|
function delCurKeyMappingConfig() {
|
||||||
|
if (store.keyMappingConfigList.length <= 1) {
|
||||||
|
message.error("至少保留一个方案");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const title = store.keyMappingConfigList[store.curKeyMappingIndex].title;
|
||||||
|
store.keyMappingConfigList.splice(store.curKeyMappingIndex, 1);
|
||||||
|
store.curKeyMappingIndex =
|
||||||
|
store.curKeyMappingIndex > 0 ? store.curKeyMappingIndex - 1 : 0;
|
||||||
|
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
||||||
|
localStore.set("curKeyMappingIndex", store.curKeyMappingIndex);
|
||||||
|
message.success("方案已删除:" + title);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renameKeyMappingConfig() {
|
||||||
|
const newTitle = renameModalInputValue.value;
|
||||||
|
showRenameModal.value = false;
|
||||||
|
if (newTitle !== "") {
|
||||||
|
store.keyMappingConfigList[store.curKeyMappingIndex].title = newTitle;
|
||||||
|
localStore.set("keyMappingConfigList", store.keyMappingConfigList);
|
||||||
|
message.success("方案已重命名为:" + newTitle);
|
||||||
|
} else {
|
||||||
|
message.error("方案名不能为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function exportKeyMappingConfig() {
|
||||||
|
const config = store.keyMappingConfigList[store.curKeyMappingIndex];
|
||||||
|
const data = JSON.stringify(config, null, 2);
|
||||||
|
writeText(data)
|
||||||
|
.then(() => {
|
||||||
|
message.success("当前按键方案已导出到剪切板");
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.error(e);
|
||||||
|
message.error("按键方案导出失败");
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -193,15 +268,28 @@ async function importDefaultKeyMappingConfig() {
|
|||||||
{{ curKeyMappingrelativeSize.h }}
|
{{ curKeyMappingrelativeSize.h }}
|
||||||
</NP>
|
</NP>
|
||||||
<NFlex style="margin-top: 20px">
|
<NFlex style="margin-top: 20px">
|
||||||
<NButton>新建方案</NButton>
|
<NButton @click="createKeyMappingConfig">新建方案</NButton>
|
||||||
<NButton>复制方案</NButton>
|
<NButton @click="copyCurKeyMappingConfig">复制方案</NButton>
|
||||||
<NButton>删除方案</NButton>
|
<NButton @click="delCurKeyMappingConfig">删除方案</NButton>
|
||||||
<NButton>重命名</NButton>
|
<NButton
|
||||||
|
@click="
|
||||||
|
showRenameModal = true;
|
||||||
|
renameModalInputValue =
|
||||||
|
store.keyMappingConfigList[store.curKeyMappingIndex].title;
|
||||||
|
"
|
||||||
|
>重命名</NButton
|
||||||
|
>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
<NH4 prefix="bar">其他</NH4>
|
<NH4 prefix="bar">其他</NH4>
|
||||||
<NFlex>
|
<NFlex>
|
||||||
<NButton @click="showImportModal = true">导入</NButton>
|
<NButton
|
||||||
<NButton>导出</NButton>
|
@click="
|
||||||
|
showImportModal = true;
|
||||||
|
importModalInputValue = '';
|
||||||
|
"
|
||||||
|
>导入方案</NButton
|
||||||
|
>
|
||||||
|
<NButton @click="exportKeyMappingConfig">导出方案</NButton>
|
||||||
<NButton @click="importDefaultKeyMappingConfig">导入默认</NButton>
|
<NButton @click="importDefaultKeyMappingConfig">导入默认</NButton>
|
||||||
<NButton @click="showKeyInfoFlag = !showKeyInfoFlag">按键信息</NButton>
|
<NButton @click="showKeyInfoFlag = !showKeyInfoFlag">按键信息</NButton>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
@ -221,6 +309,14 @@ async function importDefaultKeyMappingConfig() {
|
|||||||
</NFlex>
|
</NFlex>
|
||||||
</NCard>
|
</NCard>
|
||||||
</NModal>
|
</NModal>
|
||||||
|
<NModal v-model:show="showRenameModal">
|
||||||
|
<NCard style="width: 40%" title="重命名按键方案">
|
||||||
|
<NFlex vertical>
|
||||||
|
<NInput v-model:value="renameModalInputValue" clearable />
|
||||||
|
<NButton round @click="renameKeyMappingConfig">重命名</NButton>
|
||||||
|
</NFlex>
|
||||||
|
</NCard>
|
||||||
|
</NModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
Loading…
Reference in New Issue
Block a user