From 1b7915e94f71e928cc270b881583aaeab1ccd651 Mon Sep 17 00:00:00 2001 From: AkiChase <1003019131@qq.com> Date: Tue, 28 May 2024 19:36:02 +0800 Subject: [PATCH] feat(Basic): add clipboardSync setting --- src/components/Mask.vue | 77 +------------------ src/components/setting/Basic.vue | 28 +++++++ src/store/global.ts | 6 ++ src/storeLoader.ts | 122 +++++++++++++++++++++++++++++++ 4 files changed, 159 insertions(+), 74 deletions(-) create mode 100644 src/storeLoader.ts diff --git a/src/components/Mask.vue b/src/components/Mask.vue index 047e6bd..fe81ff5 100644 --- a/src/components/Mask.vue +++ b/src/components/Mask.vue @@ -10,7 +10,7 @@ import { listenToEvent, unlistenToEvent, } from "../hotkey"; -import { KeyMappingConfig, KeySteeringWheel } from "../keyMappingConfig"; +import { KeySteeringWheel } from "../keyMappingConfig"; import ScreenStream from "./ScreenStream.vue"; import { getVersion } from "@tauri-apps/api/app"; import { fetch } from "@tauri-apps/plugin-http"; @@ -19,6 +19,7 @@ import { getCurrent, PhysicalSize } from "@tauri-apps/api/window"; import { Store } from "@tauri-apps/plugin-store"; import { useI18n } from "vue-i18n"; import { checkAdbAvailable } from "../invoke"; +import { loadLocalStorage } from "../storeLoader"; const { t } = useI18n(); const store = useGlobalStore(); @@ -103,79 +104,7 @@ function genClientId() { async function loadLocalStore() { const localStore = new Store("store.bin"); - // loading keyMappingConfigList from local store - let keyMappingConfigList = await localStore.get( - "keyMappingConfigList" - ); - if (keyMappingConfigList === null || keyMappingConfigList.length === 0) { - // add empty key mapping config - // unable to get mask element when app is not ready - // so we use the stored mask area to get relative size - const maskArea = await localStore.get<{ - posX: number; - posY: number; - sizeW: number; - sizeH: number; - }>("maskArea"); - let relativeSize = { w: 800, h: 600 }; - if (maskArea !== null) { - relativeSize = { - w: maskArea.sizeW, - h: maskArea.sizeH, - }; - } - keyMappingConfigList = [ - { - relativeSize, - title: t("pages.Mask.blankConfig"), - list: [], - }, - ]; - await localStore.set("keyMappingConfigList", keyMappingConfigList); - } - store.keyMappingConfigList = keyMappingConfigList; - - // loading curKeyMappingIndex from local store - let curKeyMappingIndex = await localStore.get("curKeyMappingIndex"); - if ( - curKeyMappingIndex === null || - curKeyMappingIndex >= keyMappingConfigList.length - ) { - curKeyMappingIndex = 0; - localStore.set("curKeyMappingIndex", curKeyMappingIndex); - } - store.curKeyMappingIndex = curKeyMappingIndex; - - // loading maskButton from local store - let maskButton = await localStore.get<{ - show: boolean; - transparency: number; - }>("maskButton"); - store.maskButton = maskButton ?? { - show: true, - transparency: 0.5, - }; - - // loading checkUpdateAtStart from local store - const checkUpdateAtStart = await localStore.get( - "checkUpdateAtStart" - ); - store.checkUpdateAtStart = checkUpdateAtStart ?? true; - - // loading rotation from local store - const rotation = await localStore.get<{ - enable: boolean; - verticalLength: number; - horizontalLength: number; - }>("rotation"); - if (rotation) store.rotation = rotation; - - // loading screenStream from local store - const screenStream = await localStore.get<{ - enable: boolean; - address: string; - }>("screenStream"); - if (screenStream) store.screenStream = screenStream; + await loadLocalStorage(localStore, store, t); } async function cleanAfterimage() { diff --git a/src/components/setting/Basic.vue b/src/components/setting/Basic.vue index 467b5c4..3769205 100644 --- a/src/components/setting/Basic.vue +++ b/src/components/setting/Basic.vue @@ -7,6 +7,9 @@ import { NSelect, NInputGroup, useMessage, + NFlex, + NCheckbox, + NTooltip, } from "naive-ui"; import { onMounted, ref } from "vue"; import i18n from "../../i18n"; @@ -48,6 +51,10 @@ async function adjustAdbPath() { adbPath.value = (await localStore.get("adbPath")) ?? ""; store.hideLoading(); } + +function changeClipboardSync() { + localStore.set("clipboardSync", store.clipboardSync); +} diff --git a/src/store/global.ts b/src/store/global.ts index 483f5bd..f93ea9c 100644 --- a/src/store/global.ts +++ b/src/store/global.ts @@ -100,6 +100,11 @@ export const useGlobalStore = defineStore("global", () => { horizontalLength: 800, }); + const clipboardSync = ref({ + syncFromDevice: true, + pasteFromPC: true, + }); + return { // persistent storage keyMappingConfigList, @@ -109,6 +114,7 @@ export const useGlobalStore = defineStore("global", () => { externalControlled, screenStream, rotation, + clipboardSync, // in-memory storage screenStreamClientId, maskSizeW, diff --git a/src/storeLoader.ts b/src/storeLoader.ts new file mode 100644 index 0000000..2713f72 --- /dev/null +++ b/src/storeLoader.ts @@ -0,0 +1,122 @@ +import { Store } from "@tauri-apps/plugin-store"; +import { KeyMappingConfig } from "./keyMappingConfig"; +import { useGlobalStore } from "./store/global"; +import { useI18n } from "vue-i18n"; + +let localStore: Store; +let store: ReturnType; +let t: ReturnType["t"]; + +async function loadKeyMappingConfigList() { + // loading keyMappingConfigList from local store + let keyMappingConfigList = await localStore.get( + "keyMappingConfigList" + ); + if (keyMappingConfigList === null || keyMappingConfigList.length === 0) { + // add empty key mapping config + // unable to get mask element when app is not ready + // so we use the stored mask area to get relative size + const maskArea = await localStore.get<{ + posX: number; + posY: number; + sizeW: number; + sizeH: number; + }>("maskArea"); + let relativeSize = { w: 800, h: 600 }; + if (maskArea !== null) { + relativeSize = { + w: maskArea.sizeW, + h: maskArea.sizeH, + }; + } + keyMappingConfigList = [ + { + relativeSize, + title: t("pages.Mask.blankConfig"), + list: [], + }, + ]; + await localStore.set("keyMappingConfigList", keyMappingConfigList); + } + store.keyMappingConfigList = keyMappingConfigList; +} + +async function loadCurKeyMappingIndex() { + // loading curKeyMappingIndex from local store + let curKeyMappingIndex = await localStore.get("curKeyMappingIndex"); + if ( + curKeyMappingIndex === null || + curKeyMappingIndex >= store.keyMappingConfigList.length + ) { + curKeyMappingIndex = 0; + localStore.set("curKeyMappingIndex", curKeyMappingIndex); + } + store.curKeyMappingIndex = curKeyMappingIndex; +} + +async function loadMaskButton() { + // loading maskButton from local store + let maskButton = await localStore.get<{ + show: boolean; + transparency: number; + }>("maskButton"); + store.maskButton = maskButton ?? { + show: true, + transparency: 0.5, + }; +} + +async function loadCheckUpdateAtStart() { + // loading checkUpdateAtStart from local store + const checkUpdateAtStart = await localStore.get( + "checkUpdateAtStart" + ); + store.checkUpdateAtStart = checkUpdateAtStart ?? true; +} + +async function loadRotation() { + // loading rotation from local store + const rotation = await localStore.get<{ + enable: boolean; + verticalLength: number; + horizontalLength: number; + }>("rotation"); + if (rotation) store.rotation = rotation; +} + +async function loadScreenStream() { + // loading screenStream from local store + const screenStream = await localStore.get<{ + enable: boolean; + address: string; + }>("screenStream"); + if (screenStream) store.screenStream = screenStream; +} + +async function loadClipboardSync() { + // loading clipboardSync from local store + const clipboardSync = await localStore.get<{ + syncFromDevice: boolean; + pasteFromPC: boolean; + }>("clipboardSync"); + if (clipboardSync) store.clipboardSync = clipboardSync; + console.log(store.clipboardSync); +} + +export async function loadLocalStorage( + theLocalStore: Store, + theStore: ReturnType, + theT: ReturnType["t"] +) { + localStore = theLocalStore; + store = theStore; + t = theT; + + await loadKeyMappingConfigList(); + await loadCurKeyMappingIndex(); + await loadMaskButton(); + await loadCheckUpdateAtStart(); + await loadRotation(); + await loadScreenStream(); + await loadClipboardSync(); +}