mirror of
https://github.com/EasyTier/EasytierGame.git
synced 2025-05-19 10:27:56 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e977c633d6 | ||
|
|
3cbfae072c | ||
|
|
9b856f31af | ||
|
|
7d6e93d796 | ||
|
|
0253d95597 | ||
|
|
5875b30c34 |
+23
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["prettier-plugin-tailwindcss"],
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"endOfLine": "lf",
|
||||||
|
"htmlWhitespaceSensitivity": "ignore",
|
||||||
|
"insertPragma": false,
|
||||||
|
"singleAttributePerLine": true,
|
||||||
|
"bracketSameLine": false,
|
||||||
|
"jsxBracketSameLine": false,
|
||||||
|
"jsxSingleQuote": true,
|
||||||
|
"printWidth": 150,
|
||||||
|
"proseWrap": "preserve",
|
||||||
|
"quoteProps": "as-needed",
|
||||||
|
"requirePragma": false,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": false,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"useTabs": true,
|
||||||
|
"embeddedLanguageFormatting": "auto",
|
||||||
|
"vueIndentScriptAndStyle": true
|
||||||
|
}
|
||||||
+7
-1
@@ -9,7 +9,9 @@
|
|||||||
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", STHeiti, "Microsoft YaHei";
|
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", STHeiti, "Microsoft YaHei";
|
||||||
}
|
}
|
||||||
} */
|
} */
|
||||||
|
html {
|
||||||
|
font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
|
||||||
|
}
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -46,4 +48,8 @@ html.dark body {
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
font-size: 12px!important;
|
||||||
}
|
}
|
||||||
@@ -24,6 +24,7 @@ export const updateConfigJson = async (configJsonSeverUrl: Array<string> | strin
|
|||||||
serverUrl,
|
serverUrl,
|
||||||
port,
|
port,
|
||||||
enableCustomListener,
|
enableCustomListener,
|
||||||
|
enablePreventSleep,
|
||||||
customListenerData,
|
customListenerData,
|
||||||
...otherConfig
|
...otherConfig
|
||||||
} = mainStore.config;
|
} = mainStore.config;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export const handleWinipBcStart = async () => {
|
|||||||
await getWinIpBroadcastPid();
|
await getWinIpBroadcastPid();
|
||||||
if (mainStore.winipBcPid <= 0) {
|
if (mainStore.winipBcPid <= 0) {
|
||||||
mainStore.$patch({
|
mainStore.$patch({
|
||||||
winIpBcAutoStart: true
|
winIpBcAutoStart: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import pkg from "@/package.json";
|
|||||||
import { setTheme } from "~/composables/theme";
|
import { setTheme } from "~/composables/theme";
|
||||||
import useMainStore from "@/stores/index";
|
import useMainStore from "@/stores/index";
|
||||||
import { resourceDir as getResourceDir, join } from "@tauri-apps/api/path";
|
import { resourceDir as getResourceDir, join } from "@tauri-apps/api/path";
|
||||||
|
import { invoke } from "@tauri-apps/api/core";
|
||||||
|
// import { ElConfirmPrimary } from "~/utils/element";
|
||||||
|
// import { open } from "@tauri-apps/plugin-shell";
|
||||||
|
|
||||||
const DEFAULT_TRAY_NAME = "main";
|
const DEFAULT_TRAY_NAME = "main";
|
||||||
|
|
||||||
@@ -13,6 +16,7 @@ async function toggleVisibility() {
|
|||||||
await getCurrentWindow().hide();
|
await getCurrentWindow().hide();
|
||||||
} else {
|
} else {
|
||||||
await getCurrentWindow().show();
|
await getCurrentWindow().show();
|
||||||
|
await getCurrentWindow().unminimize();
|
||||||
await getCurrentWindow().setFocus();
|
await getCurrentWindow().setFocus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,3 +144,19 @@ export async function setTrayTooltip(tray: TrayIcon | null, tooltip?: string | n
|
|||||||
await tray.setTooltip(`EasyTierGame\n${pkg.version}`);
|
await tray.setTooltip(`EasyTierGame\n${pkg.version}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const checkNewVersion = async () => {
|
||||||
|
let [tagName, downloadUrl] = await invoke<string[]>("fetch_game_releases");
|
||||||
|
if(tagName && pkg.version !== tagName) {
|
||||||
|
return true; //有新版
|
||||||
|
// const [err] = await ElConfirmPrimary("有新版本是否下载?", "发现新版本", {
|
||||||
|
// confirmButtonText: "下载",
|
||||||
|
// cancelButtonText: "取消",
|
||||||
|
// })
|
||||||
|
// if(!err) {
|
||||||
|
// open(downloadUrl);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
return false; //没有新版
|
||||||
|
}
|
||||||
+9
-8
@@ -3,7 +3,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"author": "leizi97",
|
"author": "leizi97",
|
||||||
"description": "A simple network initiator based on Easytier",
|
"description": "A simple network initiator based on Easytier",
|
||||||
"version": "1.2.9",
|
"version": "1.3.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
|
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
|
||||||
"build": "nuxt generate --dotenv env/.env.prod",
|
"build": "nuxt generate --dotenv env/.env.prod",
|
||||||
@@ -13,16 +13,15 @@
|
|||||||
"@element-plus/icons-vue": "^2.3.1",
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
"@element-plus/nuxt": "^1.1.0",
|
"@element-plus/nuxt": "^1.1.0",
|
||||||
"@nuxtjs/tailwindcss": "^6.12.0",
|
"@nuxtjs/tailwindcss": "^6.12.0",
|
||||||
"@pinia/nuxt": "0.8.0",
|
"@pinia/nuxt": "0.9.0",
|
||||||
"@tauri-apps/api": "^2.1.1",
|
"@tauri-apps/api": "^2.1.1",
|
||||||
"@tauri-apps/cli": "^2.1.0",
|
"@tauri-apps/cli": "^2.1.0",
|
||||||
"@tauri-apps/plugin-cli": "^2.0.0",
|
"@tauri-apps/plugin-cli": "^2.0.0",
|
||||||
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
|
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
|
||||||
"@tauri-apps/plugin-fs": "~2",
|
"@tauri-apps/plugin-fs": "^2.2.0",
|
||||||
"@tauri-apps/plugin-http": "^2.0.1",
|
"@tauri-apps/plugin-log": "^2.2.0",
|
||||||
"@tauri-apps/plugin-log": "^2.0.0",
|
"@tauri-apps/plugin-shell": "^2.2.0",
|
||||||
"@tauri-apps/plugin-shell": "~2",
|
"@tauri-apps/plugin-window-state": "^2.2.0",
|
||||||
"@tauri-apps/plugin-window-state": "~2",
|
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@vitejs/plugin-vue-jsx": "^4.1.0",
|
"@vitejs/plugin-vue-jsx": "^4.1.0",
|
||||||
"@vueuse/core": "12.0.0",
|
"@vueuse/core": "12.0.0",
|
||||||
@@ -31,9 +30,11 @@
|
|||||||
"less": "^4.2.0",
|
"less": "^4.2.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"nuxt": "^3.14.1592",
|
"nuxt": "^3.14.1592",
|
||||||
"pinia": "^2.2.6",
|
"pinia": "^2.3.0",
|
||||||
"pinia-plugin-persistedstate": "^4.1.3",
|
"pinia-plugin-persistedstate": "^4.1.3",
|
||||||
"postcss": "^8.4.38",
|
"postcss": "^8.4.38",
|
||||||
|
"prettier": "^3.4.1",
|
||||||
|
"prettier-plugin-tailwindcss": "^0.6.9",
|
||||||
"typescript": "^5.6.3",
|
"typescript": "^5.6.3",
|
||||||
"vue-clipboard3": "^2.0.0"
|
"vue-clipboard3": "^2.0.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,7 @@
|
|||||||
打开config.json目录
|
打开config.json目录
|
||||||
</ElButton>
|
</ElButton>
|
||||||
</div>
|
</div>
|
||||||
|
<div><ElCheckbox v-model="mainStore.config.enablePreventSleep">防止休眠</ElCheckbox></div>
|
||||||
<ElDivider />
|
<ElDivider />
|
||||||
<div class="flex items-center gap-[10px]">
|
<div class="flex items-center gap-[10px]">
|
||||||
<ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口,只连接到对等节点</ElCheckbox>
|
<ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口,只连接到对等节点</ElCheckbox>
|
||||||
|
|||||||
+35
-17
@@ -310,14 +310,17 @@
|
|||||||
增强工具
|
增强工具
|
||||||
</ElButton>
|
</ElButton>
|
||||||
</div>
|
</div>
|
||||||
<ElLink
|
|
||||||
class="ml-[8px] truncate pb-[2px] !text-[9px]"
|
<ElBadge badge-class="!text-[9px] cursor-pointer" :hidden="!data.hasNewVersion" :offset="[6, 7]" value="N">
|
||||||
type="info"
|
<!-- <ElTooltip :disabled="!data.hasNewVersion" content="有新版发布了!"> -->
|
||||||
:underline="false"
|
<ElLink
|
||||||
@click="open('https://github.com/EasyTier/EasytierGame')"
|
class="ml-[8px] truncate pb-[2px] !text-[9px]"
|
||||||
>
|
type="info"
|
||||||
EasytierGame主页
|
:underline="false"
|
||||||
</ElLink>
|
@click="open('https://github.com/EasyTier/EasytierGame')"
|
||||||
|
>EasytierGame主页</ElLink>
|
||||||
|
<!-- </ElTooltip> -->
|
||||||
|
</ElBadge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -343,7 +346,7 @@
|
|||||||
>
|
>
|
||||||
刷新
|
刷新
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<ElTooltip content="打开内核缓存目录">
|
<ElTooltip placement="top" content="打开内核缓存目录">
|
||||||
<ElButton
|
<ElButton
|
||||||
:icon="Folder"
|
:icon="Folder"
|
||||||
size="small"
|
size="small"
|
||||||
@@ -510,7 +513,7 @@
|
|||||||
Folder
|
Folder
|
||||||
} from "@element-plus/icons-vue";
|
} from "@element-plus/icons-vue";
|
||||||
import { reactive, onBeforeUnmount, onMounted, ref } from "vue";
|
import { reactive, onBeforeUnmount, onMounted, ref } from "vue";
|
||||||
import { useTray, setTrayRunState, setTrayTooltip } from "~/composables/tray";
|
import { useTray, setTrayRunState, setTrayTooltip, checkNewVersion } from "~/composables/tray";
|
||||||
import { getMatches } from "@tauri-apps/plugin-cli";
|
import { getMatches } from "@tauri-apps/plugin-cli";
|
||||||
import { initStartWinIpBroadcast } from "~/composables/netcard";
|
import { initStartWinIpBroadcast } from "~/composables/netcard";
|
||||||
import useMainStore from "@/stores/index";
|
import useMainStore from "@/stores/index";
|
||||||
@@ -523,7 +526,7 @@
|
|||||||
import { updateConfigJson } from "~/composables/configJson";
|
import { updateConfigJson } from "~/composables/configJson";
|
||||||
import { writeText, readText } from "@tauri-apps/plugin-clipboard-manager";
|
import { writeText, readText } from "@tauri-apps/plugin-clipboard-manager";
|
||||||
import { sortedUniq, uniq } from "lodash-es";
|
import { sortedUniq, uniq } from "lodash-es";
|
||||||
import { bounce, addQQGroup, supportProtocols } from "~/utils";
|
import { bounce, addQQGroup, supportProtocols, preventSleep, stopPreventSleep } from "~/utils";
|
||||||
import { ElConfirmDanger, ElConfirmPrimary } from "~/utils/element";
|
import { ElConfirmDanger, ElConfirmPrimary } from "~/utils/element";
|
||||||
import { getServerArgs } from "@/composables/server";
|
import { getServerArgs } from "@/composables/server";
|
||||||
|
|
||||||
@@ -548,6 +551,7 @@
|
|||||||
// console.error(config);
|
// console.error(config);
|
||||||
const protocols = supportProtocols();
|
const protocols = supportProtocols();
|
||||||
const data = reactive<{ [key: string]: any; releaseList: Array<Array<string>> }>({
|
const data = reactive<{ [key: string]: any; releaseList: Array<Array<string>> }>({
|
||||||
|
hasNewVersion: false, //easytierGame有没有新版
|
||||||
logVisible: false,
|
logVisible: false,
|
||||||
cidrVisible: false,
|
cidrVisible: false,
|
||||||
advanceVisible: false,
|
advanceVisible: false,
|
||||||
@@ -592,7 +596,7 @@
|
|||||||
appWindow.onCloseRequested(async event => {
|
appWindow.onCloseRequested(async event => {
|
||||||
// console.error(appWindow.label);
|
// console.error(appWindow.label);
|
||||||
if (!is_close) {
|
if (!is_close) {
|
||||||
// console.error(1);
|
// console.error(1);s
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
appWindow.hide();
|
appWindow.hide();
|
||||||
}
|
}
|
||||||
@@ -668,9 +672,9 @@
|
|||||||
mainStore.config.ipv4 = configIpv4;
|
mainStore.config.ipv4 = configIpv4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event.payload.includes("peer connection removed")) {
|
// if (event.payload.includes("peer connection removed")) {
|
||||||
data.isSuccessGetIp = false;
|
// data.isSuccessGetIp = false;
|
||||||
}
|
// }
|
||||||
if (event.payload.includes("new peer connection added") && !data.isSuccessGetIp) {
|
if (event.payload.includes("new peer connection added") && !data.isSuccessGetIp) {
|
||||||
await setTrayRunState(tray, true);
|
await setTrayRunState(tray, true);
|
||||||
data.isSuccessGetIp = true;
|
data.isSuccessGetIp = true;
|
||||||
@@ -737,10 +741,15 @@
|
|||||||
async listenConfigStart() {
|
async listenConfigStart() {
|
||||||
const appWindow = getCurrentWindow();
|
const appWindow = getCurrentWindow();
|
||||||
const unListen = await listen("config", event => {
|
const unListen = await listen("config", event => {
|
||||||
// console.error("config", event.payload);
|
|
||||||
const ipv4 = config.ipv4;
|
const ipv4 = config.ipv4;
|
||||||
|
console.log(event.payload)
|
||||||
mainStore.$patch(event.payload as any);
|
mainStore.$patch(event.payload as any);
|
||||||
config.ipv4 = ipv4;
|
config.ipv4 = ipv4;
|
||||||
|
if(mainStore.config.enablePreventSleep) {
|
||||||
|
preventSleep();
|
||||||
|
}else {
|
||||||
|
stopPreventSleep();
|
||||||
|
}
|
||||||
appWindow.emitTo({ kind: "Any" }, "global-main-store", { store: { ...mainStore.$state } });
|
appWindow.emitTo({ kind: "Any" }, "global-main-store", { store: { ...mainStore.$state } });
|
||||||
});
|
});
|
||||||
const unListen2 = mainStore.$subscribe(() => {
|
const unListen2 = mainStore.$subscribe(() => {
|
||||||
@@ -795,7 +804,7 @@
|
|||||||
const currentVersion = /(\d+\.\d+\.\d+)/g.exec(data.coreVersion || "")?.[1];
|
const currentVersion = /(\d+\.\d+\.\d+)/g.exec(data.coreVersion || "")?.[1];
|
||||||
if (version && currentVersion != version) {
|
if (version && currentVersion != version) {
|
||||||
// console.error({ currentVersion, latestVersion });
|
// console.error({ currentVersion, latestVersion });
|
||||||
ElMessage.success(`更新 -> ${version}`);
|
ElMessage.success(`变更为 -> ${version}`);
|
||||||
return [true, downloadUrl, versionFileName];
|
return [true, downloadUrl, versionFileName];
|
||||||
} else if (currentVersion === version) {
|
} else if (currentVersion === version) {
|
||||||
ElMessage.success(`当前版本无需安装`);
|
ElMessage.success(`当前版本无需安装`);
|
||||||
@@ -949,6 +958,12 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const initPreventSleep = async () => {
|
||||||
|
if (mainStore.config.enablePreventSleep) {
|
||||||
|
preventSleep();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const mountedShow = async () => {
|
const mountedShow = async () => {
|
||||||
const args = await getMatches();
|
const args = await getMatches();
|
||||||
if (!args.args?.["task-auto-start"]?.value) {
|
if (!args.args?.["task-auto-start"]?.value) {
|
||||||
@@ -974,8 +989,10 @@
|
|||||||
await initConfigDir();
|
await initConfigDir();
|
||||||
await initAutoStartServer();
|
await initAutoStartServer();
|
||||||
await initConnectAfterStart();
|
await initConnectAfterStart();
|
||||||
|
initPreventSleep();
|
||||||
mountedShow(); // 不需要await
|
mountedShow(); // 不需要await
|
||||||
closePrevent();
|
closePrevent();
|
||||||
|
data.hasNewVersion = await checkNewVersion();
|
||||||
});
|
});
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
@@ -986,6 +1003,7 @@
|
|||||||
listenObj.unListenStartStopServer && listenObj.unListenStartStopServer();
|
listenObj.unListenStartStopServer && listenObj.unListenStartStopServer();
|
||||||
logsTimer && clearInterval(logsTimer);
|
logsTimer && clearInterval(logsTimer);
|
||||||
serverLogsTimer && clearInterval(serverLogsTimer);
|
serverLogsTimer && clearInterval(serverLogsTimer);
|
||||||
|
stopPreventSleep();
|
||||||
});
|
});
|
||||||
|
|
||||||
const getArgs = async () => {
|
const getArgs = async () => {
|
||||||
|
|||||||
+9
-6
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="overflow-auto h-full">
|
<div class="overflow-auto h-full">
|
||||||
<div class="w-[1200px]">
|
<div class="w-[1200px]">
|
||||||
<span v-if="!data.member || data.member.length <= 0">{{ "等待成员信息中..." }}</span>
|
<ElText size="small" v-if="!data.member || data.member.length <= 0">{{ "等待成员信息中..." }}</ElText>
|
||||||
<ElTable
|
<ElTable
|
||||||
stripe
|
stripe
|
||||||
border
|
border
|
||||||
@@ -22,10 +22,11 @@
|
|||||||
sortable
|
sortable
|
||||||
width="90"
|
width="90"
|
||||||
prop="cost"
|
prop="cost"
|
||||||
label="路由"
|
label="方式"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<ElTag
|
<ElTag
|
||||||
|
size="small"
|
||||||
effect="dark"
|
effect="dark"
|
||||||
:type="row.cost == 'p2p' ? 'success' : 'info'"
|
:type="row.cost == 'p2p' ? 'success' : 'info'"
|
||||||
>
|
>
|
||||||
@@ -42,12 +43,12 @@
|
|||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
prop="lat_ms"
|
prop="lat_ms"
|
||||||
width="130"
|
width="100"
|
||||||
label="延迟/ms"
|
label="延迟/ms"
|
||||||
></ElTableColumn>
|
></ElTableColumn>
|
||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
width="120"
|
width="100"
|
||||||
prop="loss_rate"
|
prop="loss_rate"
|
||||||
label="丢包率"
|
label="丢包率"
|
||||||
>
|
>
|
||||||
@@ -57,7 +58,7 @@
|
|||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
width="120"
|
width="110"
|
||||||
label="NAT类型"
|
label="NAT类型"
|
||||||
prop="nat_type"
|
prop="nat_type"
|
||||||
>
|
>
|
||||||
@@ -67,17 +68,19 @@
|
|||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
width="120"
|
width="122"
|
||||||
prop="version"
|
prop="version"
|
||||||
label="版本"
|
label="版本"
|
||||||
></ElTableColumn>
|
></ElTableColumn>
|
||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
|
width="100"
|
||||||
prop="tunnel_proto"
|
prop="tunnel_proto"
|
||||||
label="隧道协议"
|
label="隧道协议"
|
||||||
></ElTableColumn>
|
></ElTableColumn>
|
||||||
<ElTableColumn
|
<ElTableColumn
|
||||||
sortable
|
sortable
|
||||||
|
width="90"
|
||||||
prop="rx_bytes"
|
prop="rx_bytes"
|
||||||
label="接收"
|
label="接收"
|
||||||
></ElTableColumn>
|
></ElTableColumn>
|
||||||
|
|||||||
Generated
+111
-50
@@ -18,8 +18,8 @@ importers:
|
|||||||
specifier: ^6.12.0
|
specifier: ^6.12.0
|
||||||
version: 6.12.2(magicast@0.3.5)(rollup@4.25.0)
|
version: 6.12.2(magicast@0.3.5)(rollup@4.25.0)
|
||||||
'@pinia/nuxt':
|
'@pinia/nuxt':
|
||||||
specifier: 0.8.0
|
specifier: 0.9.0
|
||||||
version: 0.8.0(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
||||||
'@tauri-apps/api':
|
'@tauri-apps/api':
|
||||||
specifier: ^2.1.1
|
specifier: ^2.1.1
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
@@ -33,20 +33,17 @@ importers:
|
|||||||
specifier: ^2.0.0
|
specifier: ^2.0.0
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
'@tauri-apps/plugin-fs':
|
'@tauri-apps/plugin-fs':
|
||||||
specifier: ~2
|
specifier: ^2.2.0
|
||||||
version: 2.0.2
|
version: 2.2.0
|
||||||
'@tauri-apps/plugin-http':
|
|
||||||
specifier: ^2.0.1
|
|
||||||
version: 2.0.1
|
|
||||||
'@tauri-apps/plugin-log':
|
'@tauri-apps/plugin-log':
|
||||||
specifier: ^2.0.0
|
specifier: ^2.2.0
|
||||||
version: 2.0.0
|
version: 2.2.0
|
||||||
'@tauri-apps/plugin-shell':
|
'@tauri-apps/plugin-shell':
|
||||||
specifier: ~2
|
specifier: ^2.2.0
|
||||||
version: 2.0.1
|
version: 2.2.0
|
||||||
'@tauri-apps/plugin-window-state':
|
'@tauri-apps/plugin-window-state':
|
||||||
specifier: ~2
|
specifier: ^2.2.0
|
||||||
version: 2.0.0
|
version: 2.2.0
|
||||||
'@types/lodash-es':
|
'@types/lodash-es':
|
||||||
specifier: ^4.17.12
|
specifier: ^4.17.12
|
||||||
version: 4.17.12
|
version: 4.17.12
|
||||||
@@ -72,14 +69,20 @@ importers:
|
|||||||
specifier: ^3.14.1592
|
specifier: ^3.14.1592
|
||||||
version: 3.14.1592(@parcel/watcher@2.5.0)(@types/node@22.9.0)(ioredis@5.4.1)(less@4.2.0)(magicast@0.3.5)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)(terser@5.36.0))
|
version: 3.14.1592(@parcel/watcher@2.5.0)(@types/node@22.9.0)(ioredis@5.4.1)(less@4.2.0)(magicast@0.3.5)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)(terser@5.36.0))
|
||||||
pinia:
|
pinia:
|
||||||
specifier: ^2.2.6
|
specifier: ^2.3.0
|
||||||
version: 2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
version: 2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
||||||
pinia-plugin-persistedstate:
|
pinia-plugin-persistedstate:
|
||||||
specifier: ^4.1.3
|
specifier: ^4.1.3
|
||||||
version: 4.1.3(@pinia/nuxt@0.8.0(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0))(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
version: 4.1.3(@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0))(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
||||||
postcss:
|
postcss:
|
||||||
specifier: ^8.4.38
|
specifier: ^8.4.38
|
||||||
version: 8.4.49
|
version: 8.4.49
|
||||||
|
prettier:
|
||||||
|
specifier: ^3.4.1
|
||||||
|
version: 3.4.1
|
||||||
|
prettier-plugin-tailwindcss:
|
||||||
|
specifier: ^0.6.9
|
||||||
|
version: 0.6.9(prettier@3.4.1)
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.6.3
|
specifier: ^5.6.3
|
||||||
version: 5.6.3
|
version: 5.6.3
|
||||||
@@ -769,10 +772,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==}
|
resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
|
|
||||||
'@pinia/nuxt@0.8.0':
|
'@pinia/nuxt@0.9.0':
|
||||||
resolution: {integrity: sha512-BWPUKOg3KGnRSgz54x9IUzCKTqUxZx4UJezPRbRwY5BVt18rfiP4Cqq8kxtR8WWDZa5PTRJpx0Jxz+qyUdLvjQ==}
|
resolution: {integrity: sha512-2yeRo7LeyCF68AbNeL3xu2h6uw0617RkcsYxmA8DJM0R0PMdz5wQHnc44KeENQxR/Mrq8T910XVT6buosqsjBQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
pinia: ^2.2.7
|
pinia: ^2.3.0
|
||||||
|
|
||||||
'@pkgjs/parseargs@0.11.0':
|
'@pkgjs/parseargs@0.11.0':
|
||||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||||
@@ -1150,20 +1153,17 @@ packages:
|
|||||||
'@tauri-apps/plugin-clipboard-manager@2.0.0':
|
'@tauri-apps/plugin-clipboard-manager@2.0.0':
|
||||||
resolution: {integrity: sha512-V1sXmbjnwfXt/r48RJMwfUmDMSaP/8/YbH4CLNxt+/sf1eHlIP8PRFdFDQwLN0cNQKu2rqQVbG/Wc/Ps6cDUhw==}
|
resolution: {integrity: sha512-V1sXmbjnwfXt/r48RJMwfUmDMSaP/8/YbH4CLNxt+/sf1eHlIP8PRFdFDQwLN0cNQKu2rqQVbG/Wc/Ps6cDUhw==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-fs@2.0.2':
|
'@tauri-apps/plugin-fs@2.2.0':
|
||||||
resolution: {integrity: sha512-4YZaX2j7ta81M5/DL8aN10kTnpUkEpkPo1FTYPT8Dd0ImHe3azM8i8MrtjrDGoyBYLPO3zFv7df/mSCYF8oA0Q==}
|
resolution: {integrity: sha512-+08mApuONKI8/sCNEZ6AR8vf5vI9DXD4YfrQ9NQmhRxYKMLVhRW164vdW5BSLmMpuevftpQ2FVoL9EFkfG9Z+g==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-http@2.0.1':
|
'@tauri-apps/plugin-log@2.2.0':
|
||||||
resolution: {integrity: sha512-j6IA3pVBybSCwPpsihpX4z8bs6PluuGtr06ahL/xy4D8HunNBTmRmadJrFOQi0gOAbaig4MkQ15nzNLBLy8R1A==}
|
resolution: {integrity: sha512-g6CsQAR1lsm5ABSZZxpM/iCn86GrMDTTlhj7GPkZkYBRSm3+WczfOAl7SV7HDn77tOKCzhZffwI5uHfRoHutrw==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-log@2.0.0':
|
'@tauri-apps/plugin-shell@2.2.0':
|
||||||
resolution: {integrity: sha512-C+NII9vzswqnOQE8k7oRtnaw0z5TZsMmnirRhXkCKDEhQQH9841Us/PC1WHtGiAaJ8za1A1JB2xXndEq/47X/w==}
|
resolution: {integrity: sha512-iC3Ic1hLmasoboG7BO+7p+AriSoqAwKrIk+Hpk+S/bjTQdXqbl2GbdclghI4gM32X0bls7xHzIFqhRdrlvJeaA==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-shell@2.0.1':
|
'@tauri-apps/plugin-window-state@2.2.0':
|
||||||
resolution: {integrity: sha512-akU1b77sw3qHiynrK0s930y8zKmcdrSD60htjH+mFZqv5WaakZA/XxHR3/sF1nNv9Mgmt/Shls37HwnOr00aSw==}
|
resolution: {integrity: sha512-PFZ/vkZ6UPaRyuggEn8jWc/xwpiEw3Id8i6bin54zUR3vHY0MOK+ovvpvp6SEHKryCJbZMigYJz0OUT2eZ4YmQ==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-window-state@2.0.0':
|
|
||||||
resolution: {integrity: sha512-O82iRlrh1BLgBI8CTc+NMTPxQhQo8II5admKq9mLvH45Us5i4Zcr74At6eM46nOflFd7R8bZsVNGy+PxOEqUmQ==}
|
|
||||||
|
|
||||||
'@trysound/sax@0.2.0':
|
'@trysound/sax@0.2.0':
|
||||||
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
||||||
@@ -2885,15 +2885,12 @@ packages:
|
|||||||
pinia:
|
pinia:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
pinia@2.2.6:
|
pinia@2.3.0:
|
||||||
resolution: {integrity: sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==}
|
resolution: {integrity: sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@vue/composition-api': ^1.4.0
|
|
||||||
typescript: '>=4.4.4'
|
typescript: '>=4.4.4'
|
||||||
vue: ^2.6.14 || ^3.5.11
|
vue: ^2.7.0 || ^3.5.11
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
'@vue/composition-api':
|
|
||||||
optional: true
|
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -3125,6 +3122,66 @@ packages:
|
|||||||
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
|
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
|
||||||
engines: {node: ^10 || ^12 || >=14}
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
|
|
||||||
|
prettier-plugin-tailwindcss@0.6.9:
|
||||||
|
resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==}
|
||||||
|
engines: {node: '>=14.21.3'}
|
||||||
|
peerDependencies:
|
||||||
|
'@ianvs/prettier-plugin-sort-imports': '*'
|
||||||
|
'@prettier/plugin-pug': '*'
|
||||||
|
'@shopify/prettier-plugin-liquid': '*'
|
||||||
|
'@trivago/prettier-plugin-sort-imports': '*'
|
||||||
|
'@zackad/prettier-plugin-twig-melody': '*'
|
||||||
|
prettier: ^3.0
|
||||||
|
prettier-plugin-astro: '*'
|
||||||
|
prettier-plugin-css-order: '*'
|
||||||
|
prettier-plugin-import-sort: '*'
|
||||||
|
prettier-plugin-jsdoc: '*'
|
||||||
|
prettier-plugin-marko: '*'
|
||||||
|
prettier-plugin-multiline-arrays: '*'
|
||||||
|
prettier-plugin-organize-attributes: '*'
|
||||||
|
prettier-plugin-organize-imports: '*'
|
||||||
|
prettier-plugin-sort-imports: '*'
|
||||||
|
prettier-plugin-style-order: '*'
|
||||||
|
prettier-plugin-svelte: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@ianvs/prettier-plugin-sort-imports':
|
||||||
|
optional: true
|
||||||
|
'@prettier/plugin-pug':
|
||||||
|
optional: true
|
||||||
|
'@shopify/prettier-plugin-liquid':
|
||||||
|
optional: true
|
||||||
|
'@trivago/prettier-plugin-sort-imports':
|
||||||
|
optional: true
|
||||||
|
'@zackad/prettier-plugin-twig-melody':
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-astro:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-css-order:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-import-sort:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-jsdoc:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-marko:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-multiline-arrays:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-organize-attributes:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-organize-imports:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-sort-imports:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-style-order:
|
||||||
|
optional: true
|
||||||
|
prettier-plugin-svelte:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
prettier@3.4.1:
|
||||||
|
resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
pretty-bytes@6.1.1:
|
pretty-bytes@6.1.1:
|
||||||
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
|
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
|
||||||
engines: {node: ^14.13.1 || >=16.0.0}
|
engines: {node: ^14.13.1 || >=16.0.0}
|
||||||
@@ -4720,10 +4777,10 @@ snapshots:
|
|||||||
'@parcel/watcher-win32-ia32': 2.5.0
|
'@parcel/watcher-win32-ia32': 2.5.0
|
||||||
'@parcel/watcher-win32-x64': 2.5.0
|
'@parcel/watcher-win32-x64': 2.5.0
|
||||||
|
|
||||||
'@pinia/nuxt@0.8.0(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)':
|
'@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.25.0)
|
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.25.0)
|
||||||
pinia: 2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
pinia: 2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- magicast
|
- magicast
|
||||||
- rollup
|
- rollup
|
||||||
@@ -4993,23 +5050,19 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.1.1
|
'@tauri-apps/api': 2.1.1
|
||||||
|
|
||||||
'@tauri-apps/plugin-fs@2.0.2':
|
'@tauri-apps/plugin-fs@2.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.1.1
|
'@tauri-apps/api': 2.1.1
|
||||||
|
|
||||||
'@tauri-apps/plugin-http@2.0.1':
|
'@tauri-apps/plugin-log@2.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.1.1
|
'@tauri-apps/api': 2.1.1
|
||||||
|
|
||||||
'@tauri-apps/plugin-log@2.0.0':
|
'@tauri-apps/plugin-shell@2.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.1.1
|
'@tauri-apps/api': 2.1.1
|
||||||
|
|
||||||
'@tauri-apps/plugin-shell@2.0.1':
|
'@tauri-apps/plugin-window-state@2.2.0':
|
||||||
dependencies:
|
|
||||||
'@tauri-apps/api': 2.1.1
|
|
||||||
|
|
||||||
'@tauri-apps/plugin-window-state@2.0.0':
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.1.1
|
'@tauri-apps/api': 2.1.1
|
||||||
|
|
||||||
@@ -7018,28 +7071,30 @@ snapshots:
|
|||||||
pify@4.0.1:
|
pify@4.0.1:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
pinia-plugin-persistedstate@4.1.3(@pinia/nuxt@0.8.0(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0))(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0):
|
pinia-plugin-persistedstate@4.1.3(@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0))(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)
|
'@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)
|
||||||
deep-pick-omit: 1.2.1
|
deep-pick-omit: 1.2.1
|
||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
destr: 2.0.3
|
destr: 2.0.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@pinia/nuxt': 0.8.0(magicast@0.3.5)(pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
'@pinia/nuxt': 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.25.0)
|
||||||
pinia: 2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
pinia: 2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- magicast
|
- magicast
|
||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
- webpack-sources
|
- webpack-sources
|
||||||
|
|
||||||
pinia@2.2.6(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)):
|
pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-api': 6.6.4
|
'@vue/devtools-api': 6.6.4
|
||||||
vue: 3.5.13(typescript@5.6.3)
|
vue: 3.5.13(typescript@5.6.3)
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.6.3))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.6.3))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.6.3
|
typescript: 5.6.3
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@vue/composition-api'
|
||||||
|
|
||||||
pirates@4.0.6: {}
|
pirates@4.0.6: {}
|
||||||
|
|
||||||
@@ -7257,6 +7312,12 @@ snapshots:
|
|||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
|
prettier-plugin-tailwindcss@0.6.9(prettier@3.4.1):
|
||||||
|
dependencies:
|
||||||
|
prettier: 3.4.1
|
||||||
|
|
||||||
|
prettier@3.4.1: {}
|
||||||
|
|
||||||
pretty-bytes@6.1.1: {}
|
pretty-bytes@6.1.1: {}
|
||||||
|
|
||||||
process-nextick-args@2.0.1: {}
|
process-nextick-args@2.0.1: {}
|
||||||
|
|||||||
Generated
+1
-1
@@ -1227,7 +1227,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "easytier-game"
|
name = "easytier-game"
|
||||||
version = "1.2.9"
|
version = "1.3.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"planif",
|
"planif",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "easytier-game"
|
name = "easytier-game"
|
||||||
version = "1.2.9"
|
version = "1.3.1"
|
||||||
homepage = "https://github.com/EasyTier/EasyTier"
|
homepage = "https://github.com/EasyTier/EasyTier"
|
||||||
repository = "https://github.com/EasyTier/EasytierGame"
|
repository = "https://github.com/EasyTier/EasytierGame"
|
||||||
description = "A simple network initiator based on Easytier"
|
description = "A simple network initiator based on Easytier"
|
||||||
@@ -34,7 +34,7 @@ tauri = { version = "2.1.1", features = [
|
|||||||
tauri-plugin-log = "2.0.2"
|
tauri-plugin-log = "2.0.2"
|
||||||
tauri-plugin-shell = "2.0.2"
|
tauri-plugin-shell = "2.0.2"
|
||||||
reqwest = { version = "0.12", features = ["json"] }
|
reqwest = { version = "0.12", features = ["json"] }
|
||||||
zip = "2.2.0"
|
zip = "2.2"
|
||||||
sysinfo = '0.32.0'
|
sysinfo = '0.32.0'
|
||||||
planif = { git = "https://github.com/mattrobineau/planif", tag = "1.0.1" }
|
planif = { git = "https://github.com/mattrobineau/planif", tag = "1.0.1" }
|
||||||
whoami = "1.5.2"
|
whoami = "1.5.2"
|
||||||
@@ -47,7 +47,7 @@ tokio = { version = "1.41.1", features = ["process"] }
|
|||||||
|
|
||||||
[dependencies.windows]
|
[dependencies.windows]
|
||||||
version = "0.58.0"
|
version = "0.58.0"
|
||||||
features = ["Win32_System_TaskScheduler"]
|
features = ["Win32_System_TaskScheduler", "Win32_System_Power"]
|
||||||
|
|
||||||
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
|
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
|
||||||
tauri-plugin-cli = "2"
|
tauri-plugin-cli = "2"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"permissions": [
|
"permissions": [
|
||||||
"core:default",
|
"core:default",
|
||||||
"core:window:allow-minimize",
|
"core:window:allow-minimize",
|
||||||
|
"core:window:allow-unminimize",
|
||||||
"core:window:allow-hide",
|
"core:window:allow-hide",
|
||||||
"core:window:allow-close",
|
"core:window:allow-close",
|
||||||
"core:window:allow-set-focus",
|
"core:window:allow-set-focus",
|
||||||
|
|||||||
+83
-19
@@ -20,8 +20,30 @@ use windows::Win32::Foundation::VARIANT_BOOL;
|
|||||||
use windows::Win32::System::Com::*;
|
use windows::Win32::System::Com::*;
|
||||||
use windows::Win32::System::TaskScheduler::*;
|
use windows::Win32::System::TaskScheduler::*;
|
||||||
|
|
||||||
|
use windows::Win32::System::Power::SetThreadExecutionState;
|
||||||
|
use windows::Win32::System::Power::{
|
||||||
|
ES_CONTINUOUS, ES_DISPLAY_REQUIRED, ES_SYSTEM_REQUIRED, EXECUTION_STATE,
|
||||||
|
};
|
||||||
|
|
||||||
use tokio::process::Command as tokioCommand;
|
use tokio::process::Command as tokioCommand;
|
||||||
|
|
||||||
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
|
fn prevent_sleep() -> bool {
|
||||||
|
unsafe {
|
||||||
|
let result =
|
||||||
|
SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_CONTINUOUS);
|
||||||
|
result != EXECUTION_STATE(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
|
fn allow_sleep() -> bool {
|
||||||
|
unsafe {
|
||||||
|
let result = SetThreadExecutionState(ES_CONTINUOUS);
|
||||||
|
result != EXECUTION_STATE(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 定义GitHub Release的结构体
|
// 定义GitHub Release的结构体
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
pub struct Release {
|
pub struct Release {
|
||||||
@@ -56,9 +78,50 @@ pub async fn fetch_releases() -> Result<Vec<Release>, Error> {
|
|||||||
response.json::<Vec<Release>>().await
|
response.json::<Vec<Release>>().await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
|
async fn fetch_game_releases() -> [String; 2] {
|
||||||
|
// 创建HTTP客户端
|
||||||
|
let client = Client::new();
|
||||||
|
// 构建请求的URL
|
||||||
|
let url = format!("https://api.github.com/repos/Easytier/EasytierGame/releases",);
|
||||||
|
|
||||||
|
// 发送HTTP GET请求
|
||||||
|
if let Ok(response) = client
|
||||||
|
.get(&url)
|
||||||
|
.header("User-Agent", "Tauri-fetch")
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
// 反序列化响应体为Release列表
|
||||||
|
match response.json::<Vec<Release>>().await {
|
||||||
|
Ok(releases) => {
|
||||||
|
if releases.len() <= 0 {
|
||||||
|
return [String::from(""), String::from("")];
|
||||||
|
}
|
||||||
|
let release = releases.first().unwrap();
|
||||||
|
let tag_name = release.tag_name.as_str();
|
||||||
|
let browser_download_url = release
|
||||||
|
.assets
|
||||||
|
.first()
|
||||||
|
.unwrap()
|
||||||
|
.browser_download_url
|
||||||
|
.as_str();
|
||||||
|
[String::from(tag_name), String::from(browser_download_url)]
|
||||||
|
}
|
||||||
|
Err(_e) => {
|
||||||
|
log::error!("game release {}", _e.to_string());
|
||||||
|
[String::from(""), String::from("")]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log::error!("failed to get game release");
|
||||||
|
[String::from(""), String::from("")]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[tauri::command(rename_all = "snake_case")]
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
fn get_core_version() -> String {
|
fn get_core_version() -> String {
|
||||||
let core_path = get_tool_exe_path(String::from("\\easytier\\easytier-core.exe"));
|
let core_path = get_tool_exe_path("\\easytier\\easytier-core.exe");
|
||||||
match Command::new(&core_path)
|
match Command::new(&core_path)
|
||||||
.arg("--version")
|
.arg("--version")
|
||||||
.creation_flags(0x08000000)
|
.creation_flags(0x08000000)
|
||||||
@@ -78,7 +141,7 @@ fn get_core_version() -> String {
|
|||||||
// #[tauri::command(rename_all = "snake_case")]
|
// #[tauri::command(rename_all = "snake_case")]
|
||||||
// #[warn(dead_code)]
|
// #[warn(dead_code)]
|
||||||
// fn get_cli_version() -> String {
|
// fn get_cli_version() -> String {
|
||||||
// let cli_path = get_tool_exe_path(String::from("\\easytier\\easytier-cli.exe"));
|
// let cli_path = get_tool_exe_path("\\easytier\\easytier-cli.exe");
|
||||||
// match Command::new(&cli_path)
|
// match Command::new(&cli_path)
|
||||||
// .arg("--version")
|
// .arg("--version")
|
||||||
// .creation_flags(0x08000000)
|
// .creation_flags(0x08000000)
|
||||||
@@ -92,9 +155,10 @@ fn get_core_version() -> String {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
fn get_tool_exe_path(path: String) -> String {
|
fn get_tool_exe_path(path: &str) -> String {
|
||||||
let cur_vec = get_exe_directory();
|
let cur_vec = get_exe_directory();
|
||||||
let tool_path = cur_vec[1].to_string() + &path.to_string();
|
let tool_path = format!("{}{}", cur_vec[1].as_str(), path);
|
||||||
|
// log::error!("tool path: {}", tool_path);
|
||||||
return tool_path;
|
return tool_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +196,7 @@ struct MyResponse {
|
|||||||
|
|
||||||
#[tauri::command(rename_all = "snake_case")]
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
async fn get_members_by_cli() -> String {
|
async fn get_members_by_cli() -> String {
|
||||||
let cli_path = get_tool_exe_path(String::from("\\easytier\\easytier-cli.exe"));
|
let cli_path = get_tool_exe_path("\\easytier\\easytier-cli.exe");
|
||||||
match tokioCommand::new(&cli_path)
|
match tokioCommand::new(&cli_path)
|
||||||
.arg("peer")
|
.arg("peer")
|
||||||
.arg("list")
|
.arg("list")
|
||||||
@@ -159,7 +223,7 @@ async fn get_members_by_cli() -> String {
|
|||||||
|
|
||||||
#[tauri::command(rename_all = "snake_case")]
|
#[tauri::command(rename_all = "snake_case")]
|
||||||
async fn download_easytier_zip(download_url: String, file_name: String) {
|
async fn download_easytier_zip(download_url: String, file_name: String) {
|
||||||
let cache_dir_path = get_tool_exe_path(String::from("\\easytier\\cache"));
|
let cache_dir_path = get_tool_exe_path("\\easytier\\cache");
|
||||||
let cache_file_name = format!("{}\\{}", cache_dir_path, file_name);
|
let cache_file_name = format!("{}\\{}", cache_dir_path, file_name);
|
||||||
let cache_file_name_path = path::Path::new(&cache_file_name);
|
let cache_file_name_path = path::Path::new(&cache_file_name);
|
||||||
if cache_file_name_path.exists() {
|
if cache_file_name_path.exists() {
|
||||||
@@ -171,7 +235,7 @@ async fn download_easytier_zip(download_url: String, file_name: String) {
|
|||||||
let response = reqwest::get(target)
|
let response = reqwest::get(target)
|
||||||
.await
|
.await
|
||||||
.expect("error to download easytier url");
|
.expect("error to download easytier url");
|
||||||
let easytier_path = get_tool_exe_path(String::from("\\easytier"));
|
let easytier_path = get_tool_exe_path("\\easytier");
|
||||||
let file_path = format!("{}\\{}", easytier_path, file_name);
|
let file_path = format!("{}\\{}", easytier_path, file_name);
|
||||||
println!("download easytier to {}", file_path);
|
println!("download easytier to {}", file_path);
|
||||||
|
|
||||||
@@ -238,7 +302,7 @@ fn unzip(fname: &path::Path) {
|
|||||||
// fs::create_dir_all(p).unwrap();
|
// fs::create_dir_all(p).unwrap();
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
let easytier_path = get_tool_exe_path(String::from("\\easytier"));
|
let easytier_path = get_tool_exe_path("\\easytier");
|
||||||
let easytier_dir = path::Path::new(&easytier_path);
|
let easytier_dir = path::Path::new(&easytier_path);
|
||||||
// if !easytier_dir.exists() {
|
// if !easytier_dir.exists() {
|
||||||
// fs::create_dir_all(&easytier_dir).unwrap();
|
// fs::create_dir_all(&easytier_dir).unwrap();
|
||||||
@@ -270,7 +334,7 @@ fn run_command(app_handle: tauri::AppHandle, args: Vec<String>, is_server: Optio
|
|||||||
command_output_str = "server-command-output";
|
command_output_str = "server-command-output";
|
||||||
}
|
}
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let core_path = get_tool_exe_path(String::from("\\easytier\\easytier-core.exe"));
|
let core_path = get_tool_exe_path("\\easytier\\easytier-core.exe");
|
||||||
// trace, debug, info, warn, error, off
|
// trace, debug, info, warn, error, off
|
||||||
let mut child = Command::new(&core_path)
|
let mut child = Command::new(&core_path)
|
||||||
.args(args)
|
.args(args)
|
||||||
@@ -356,20 +420,17 @@ async fn fetch_easytier_list() -> Vec<Vec<[String; 3]>> {
|
|||||||
}
|
}
|
||||||
release_list.push(assets_list);
|
release_list.push(assets_list);
|
||||||
}
|
}
|
||||||
return release_list;
|
release_list
|
||||||
} else {
|
} else {
|
||||||
return Vec::new();
|
Vec::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toggle_window_visibility<R: tauri::Runtime>(app: &tauri::AppHandle<R>) {
|
fn toggle_window_visibility<R: tauri::Runtime>(app: &tauri::AppHandle<R>) {
|
||||||
if let Some(window) = app.get_webview_window("main") {
|
if let Some(window) = app.get_webview_window("main") {
|
||||||
if window.is_visible().unwrap_or_default() {
|
let _ = window.show();
|
||||||
let _ = window.hide();
|
let _ = window.unminimize();
|
||||||
} else {
|
let _ = window.set_focus();
|
||||||
let _ = window.show();
|
|
||||||
let _ = window.set_focus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -573,7 +634,7 @@ pub fn run() {
|
|||||||
.setup(move |app| {
|
.setup(move |app| {
|
||||||
// let args = args.clone();
|
// let args = args.clone();
|
||||||
// if cfg!(debug_assertions) {
|
// if cfg!(debug_assertions) {
|
||||||
let log_path = get_tool_exe_path(String::from("\\easytier\\guiLogs"));
|
let log_path = get_tool_exe_path("\\easytier\\guiLogs");
|
||||||
app.handle().plugin(
|
app.handle().plugin(
|
||||||
tauri_plugin_log::Builder::default()
|
tauri_plugin_log::Builder::default()
|
||||||
.target(tauri_plugin_log::Target::new(
|
.target(tauri_plugin_log::Target::new(
|
||||||
@@ -621,12 +682,15 @@ pub fn run() {
|
|||||||
stop_command,
|
stop_command,
|
||||||
get_core_version,
|
get_core_version,
|
||||||
fetch_easytier_list,
|
fetch_easytier_list,
|
||||||
|
fetch_game_releases,
|
||||||
download_easytier_zip,
|
download_easytier_zip,
|
||||||
get_members_by_cli,
|
get_members_by_cli,
|
||||||
search_pid_by_pname,
|
search_pid_by_pname,
|
||||||
get_exe_directory,
|
get_exe_directory,
|
||||||
spawn_autostart,
|
spawn_autostart,
|
||||||
autostart_is_enabled
|
autostart_is_enabled,
|
||||||
|
prevent_sleep,
|
||||||
|
allow_sleep
|
||||||
])
|
])
|
||||||
.run(context)
|
.run(context)
|
||||||
.expect("error while running tauri application");
|
.expect("error while running tauri application");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
||||||
"productName": "easytier-game",
|
"productName": "easytier-game",
|
||||||
"version": "1.2.9",
|
"version": "1.3.1",
|
||||||
"identifier": "com.tauri.easytier-game",
|
"identifier": "com.tauri.easytier-game",
|
||||||
|
|
||||||
"build": {
|
"build": {
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"app": {
|
"app": {
|
||||||
"windows": [
|
"windows": [
|
||||||
{
|
{
|
||||||
"title": "easytier-game 1.2.9",
|
"title": "easytier-game 1.3.1",
|
||||||
"label": "main",
|
"label": "main",
|
||||||
"minWidth": 340,
|
"minWidth": 340,
|
||||||
"width": 340,
|
"width": 340,
|
||||||
|
|||||||
+3
-1
@@ -34,7 +34,8 @@ export default defineStore("main", {
|
|||||||
enableCustonProtocol: false, //自定义默认协议
|
enableCustonProtocol: false, //自定义默认协议
|
||||||
customProtocol: "tcp", //自定义默认协议
|
customProtocol: "tcp", //自定义默认协议
|
||||||
enableNetCardMetric: false, //启用网卡自定义跃点
|
enableNetCardMetric: false, //启用网卡自定义跃点
|
||||||
netCardMetricValue: 1 //自定义网卡跃点值
|
netCardMetricValue: 1, //自定义网卡跃点值
|
||||||
|
enablePreventSleep: false, //组织系统休眠
|
||||||
},
|
},
|
||||||
serverConfig: {
|
serverConfig: {
|
||||||
enableWhiteList: true, // 是否启用白名单
|
enableWhiteList: true, // 是否启用白名单
|
||||||
@@ -92,6 +93,7 @@ export default defineStore("main", {
|
|||||||
"config.customListenerData",
|
"config.customListenerData",
|
||||||
"config.enableCustonProtocol",
|
"config.enableCustonProtocol",
|
||||||
"config.customProtocol",
|
"config.customProtocol",
|
||||||
|
"config.enablePreventSleep",
|
||||||
|
|
||||||
"serverConfig.autoStart",
|
"serverConfig.autoStart",
|
||||||
// 'serverConfig.enableListener',
|
// 'serverConfig.enableListener',
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { invoke } from "@tauri-apps/api/core";
|
||||||
import { open } from "@tauri-apps/plugin-shell";
|
import { open } from "@tauri-apps/plugin-shell";
|
||||||
export const ENV = import.meta.env;
|
export const ENV = import.meta.env;
|
||||||
|
|
||||||
@@ -70,6 +71,21 @@ export const supportProtocols = () => {
|
|||||||
return _supportProtocols.slice();
|
return _supportProtocols.slice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _prevent_timer: NodeJS.Timeout| null = null;
|
||||||
|
let _prevent_timer_count = 15; // 秒
|
||||||
|
export const preventSleep = () => {
|
||||||
|
_prevent_timer && clearInterval(_prevent_timer);
|
||||||
|
_prevent_timer = setInterval(async () => {
|
||||||
|
const result = await invoke('prevent_sleep');
|
||||||
|
// console.log(`trigger prevent sleep ${result}`);
|
||||||
|
}, _prevent_timer_count * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
export const stopPreventSleep = () => {
|
||||||
|
_prevent_timer && clearInterval(_prevent_timer);
|
||||||
|
_prevent_timer = null;
|
||||||
|
}
|
||||||
|
|
||||||
export const parsePeerInfo = (content: string) => {
|
export const parsePeerInfo = (content: string) => {
|
||||||
if(!content) return [];
|
if(!content) return [];
|
||||||
// 将表格字符串分割成行
|
// 将表格字符串分割成行
|
||||||
|
|||||||
Reference in New Issue
Block a user