+
- {currentMessageLogs.data.map(message_data => (
+ {currentMessageLogs.data.map((message_data) => (
))}
diff --git a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
index 53bce2e5..e5725637 100644
--- a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
+++ b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
@@ -3,8 +3,7 @@ import styles from "./MessageInputBox.module.scss";
import SendMessageSvg from "@images/send_message.svg?react";
import { useMessage } from "@logics_common";
import { useSendMessageButtonType, useEnableAutoClearMessageInputBox } from "@logics_configs";
-import { store } from "@store";
-import { scrollToBottom } from "@utils";
+import { useMessageLogScroll } from "@logics_main";
export const MessageInputBox = () => {
const [message_history, setMessageHistory] = useState([]);
@@ -21,6 +20,8 @@ export const MessageInputBox = () => {
const { currentEnableAutoClearMessageInputBox } = useEnableAutoClearMessageInputBox();
const { currentSendMessageButtonType } = useSendMessageButtonType();
+ const { scrollToBottom } = useMessageLogScroll();
+
useEffect(() => {
if (currentMessageLogs.data) {
const sentMessages = currentMessageLogs.data
@@ -40,7 +41,7 @@ export const MessageInputBox = () => {
if (currentEnableAutoClearMessageInputBox.data) updateMessageInputValue("");
setTimeout(() => {
- scrollToBottom(store.log_box_ref);
+ scrollToBottom();
}, 10);
setHistoryIndex(-1);
diff --git a/src-ui/logics/main/index.js b/src-ui/logics/main/index.js
index 9d142003..7cd492d6 100644
--- a/src-ui/logics/main/index.js
+++ b/src-ui/logics/main/index.js
@@ -2,5 +2,6 @@ export { useIsVisibleResendButton } from "./useIsVisibleResendButton";
export { useIsMainPageCompactMode } from "./useIsMainPageCompactMode";
export { useLanguageSettings } from "./useLanguageSettings";
export { useMainFunction } from "./useMainFunction";
+export { useMessageLogScroll } from "./useMessageLogScroll";
export { useMessageInputBoxRatio } from "./useMessageInputBoxRatio";
export { useSelectableLanguageList } from "./useSelectableLanguageList";
\ No newline at end of file
diff --git a/src-ui/logics/main/useMessageLogScroll.js b/src-ui/logics/main/useMessageLogScroll.js
new file mode 100644
index 00000000..425adcb0
--- /dev/null
+++ b/src-ui/logics/main/useMessageLogScroll.js
@@ -0,0 +1,85 @@
+import { useRef, useEffect, useCallback, useState } from "react";
+import { store } from "@store";
+
+export const useMessageLogScroll = () => {
+ const [isScrolling, setIsScrolling] = useState(false);
+ const isSmoothScrollingRef = useRef(false);
+ const animationFrameRef = useRef(null);
+
+ const cancelSmoothScroll = () => {
+ if (animationFrameRef.current) {
+ cancelAnimationFrame(animationFrameRef.current);
+ animationFrameRef.current = null;
+ }
+ isSmoothScrollingRef.current = false;
+ };
+
+ const scrollToBottom = useCallback((smooth = false) => {
+ const element = store.log_box_ref.current;
+ if (!element) return;
+
+ const scrollHeight = element.scrollHeight - element.clientHeight;
+
+ if (smooth) {
+ cancelSmoothScroll();
+ isSmoothScrollingRef.current = true;
+
+ const duration = 100;
+ const startTime = performance.now();
+ const initialScrollTop = element.scrollTop;
+
+ const scroll = (currentTime) => {
+ const elapsed = currentTime - startTime;
+ const progress = Math.min(elapsed / duration, 1);
+ const easeInOutQuad = (t) =>
+ t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
+
+ element.scrollTop =
+ initialScrollTop + (scrollHeight - initialScrollTop) * easeInOutQuad(progress);
+
+ if (progress < 1) {
+ animationFrameRef.current = requestAnimationFrame(scroll);
+ } else {
+ isSmoothScrollingRef.current = false;
+ }
+ };
+
+ animationFrameRef.current = requestAnimationFrame(scroll);
+ } else {
+ cancelSmoothScroll();
+ element.scrollTop = scrollHeight;
+
+ }
+ }, []);
+
+ useEffect(() => {
+ const handleScroll = () => {
+ if (isSmoothScrollingRef.current) return;
+
+ const element = store.log_box_ref.current;
+ if (!element) return;
+
+ const atBottom =
+ Math.abs(element.scrollHeight - element.scrollTop - element.clientHeight) < 5;
+
+ setIsScrolling(!atBottom);
+ };
+
+ const element = store.log_box_ref.current;
+ if (element) {
+ element.addEventListener("scroll", handleScroll);
+ }
+
+ return () => {
+ if (element) {
+ element.removeEventListener("scroll", handleScroll);
+ }
+ cancelSmoothScroll();
+ };
+ }, []);
+
+ return {
+ scrollToBottom,
+ isScrolling,
+ };
+};
diff --git a/src-ui/utils.js b/src-ui/utils.js
index a2d38fc9..b7296f49 100644
--- a/src-ui/utils.js
+++ b/src-ui/utils.js
@@ -31,34 +31,6 @@ export const randomIntMinMax = (min, max) => {
return int;
};
-export const scrollToBottom = (ref, smooth = false) => {
- const element = ref.current;
- const scroll_height = element.scrollHeight - element.clientHeight;
-
- if (smooth) {
- const duration = 300; // スクロールにかける時間(ミリ秒)
- const start_time = performance.now();
- const scroll_top = element.scrollTop;
-
- const scroll = (current_time) => {
- const elapsed = current_time - start_time;
- const progress = Math.min(elapsed / duration, 1);
- const ease_in_out_quad = (t) => t < 0.5
- ? 2 * t * t
- : -1 + (4 - 2 * t) * t;
- element.scrollTop = scroll_top + (scroll_height - scroll_top) * ease_in_out_quad(progress);
-
- if (progress < 1) {
- requestAnimationFrame(scroll);
- }
- };
-
- requestAnimationFrame(scroll);
- } else {
- element.scrollTop = scroll_height;
- }
-};
-
export const updateLabelsById = (data_array, updates) => {
return data_array.map(item => {
const update = updates.find(update_item => update_item.id === item.id);
From 4502f30b29d843516a8e8169a9907363c23e7a08 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 3 Jan 2025 20:12:07 +0900
Subject: [PATCH 06/54] [bugfix] Main Page: Message Logs: Sent Message: Fix
text wrap that was not wrap and over flowed.
---
.../log_box/message_container/MessageContainer.module.scss | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
index 2335042e..92254052 100644
--- a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
+++ b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
@@ -71,6 +71,7 @@
.message_box {
display: flex;
flex-direction: column;
+ width: 100%;
&.sent_message {
align-items: end;
text-align: end;
@@ -83,6 +84,8 @@
.message_main {
user-select: text;
font-size: 1.4em;
+ overflow-wrap: break-word;
+ max-width: 100%;
}
.message_second {
From b6b73b2d014fd7d3d314453649e18818e7a150e3 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 3 Jan 2025 20:30:09 +0900
Subject: [PATCH 07/54] [Chore] Update Modal: Deny button. to be a little bit
darker.
---
.../modal_controller/update_modal/UpdateModal.module.scss | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src-ui/app/modal_controller/update_modal/UpdateModal.module.scss b/src-ui/app/modal_controller/update_modal/UpdateModal.module.scss
index a125bdca..57881896 100644
--- a/src-ui/app/modal_controller/update_modal/UpdateModal.module.scss
+++ b/src-ui/app/modal_controller/update_modal/UpdateModal.module.scss
@@ -90,19 +90,19 @@
border-radius: 0.4rem;
}
&.is_latest_version_already {
- background-color: var(--dark_800_color);
+ background-color: var(--dark_825_color);
pointer-events: none;
}
}
}
.deny_button {
- background-color: var(--dark_800_color);
+ background-color: var(--dark_825_color);
&:hover {
- background-color: var(--dark_700_color);
+ background-color: var(--dark_800_color);
}
&:active {
- background-color: var(--dark_800_color);
+ background-color: var(--dark_850_color);
}
}
From 31fb57baad5f436c7c9187a2d0f6c65faecd5a21 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 3 Jan 2025 20:59:06 +0900
Subject: [PATCH 08/54] [bugfix] Message Page: Message Logs: System Message:
Fix width and set to text center.
---
.../log_box/message_container/MessageContainer.module.scss | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
index 92254052..ea82b297 100644
--- a/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
+++ b/src-ui/app/main_page/main_section/message_container/log_box/message_container/MessageContainer.module.scss
@@ -71,12 +71,13 @@
.message_box {
display: flex;
flex-direction: column;
- width: 100%;
&.sent_message {
+ width: 100%;
align-items: end;
text-align: end;
}
&.received_message {
+ width: 100%;
align-items: start;
}
}
From abeeb69afb48bd5ff3fe2ee785ee7748f25aebf3 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 3 Jan 2025 21:12:14 +0900
Subject: [PATCH 09/54] [Chore] About VRCT: Set the position to center.
---
.../setting_section/setting_box/about_vrct/AboutVrct.module.scss | 1 +
1 file changed, 1 insertion(+)
diff --git a/src-ui/app/config_page/setting_section/setting_box/about_vrct/AboutVrct.module.scss b/src-ui/app/config_page/setting_section/setting_box/about_vrct/AboutVrct.module.scss
index 741b2934..9c8dced1 100644
--- a/src-ui/app/config_page/setting_section/setting_box/about_vrct/AboutVrct.module.scss
+++ b/src-ui/app/config_page/setting_section/setting_box/about_vrct/AboutVrct.module.scss
@@ -3,6 +3,7 @@
gap: 2.2rem;
flex-direction: column;
width: 72rem;
+ margin: auto;
// background-color: gray;
}
From 47126bf5c8c4e3162ba9138a39f2552c6e83888a Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Sun, 5 Jan 2025 14:10:48 +0900
Subject: [PATCH 10/54] [Update/TMP] Hotkey Alt+Y will active VRCT when VRChat
is the active window.
---
src-tauri/Cargo.lock | 1114 +++++++++++------
src-tauri/Cargo.toml | 4 +-
src-tauri/src/main.rs | 37 +-
src-tauri/tauri.conf.json | 7 +-
src-ui/app/App.jsx | 4 +-
.../GlobalHotKeyController.jsx | 43 +
.../_app_controllers/KeyEventController.jsx | 33 +-
src-ui/app/_app_controllers/index.js | 1 +
.../message_input_box/MessageInputBox.jsx | 12 +-
src-ui/store.js | 1 +
10 files changed, 830 insertions(+), 426 deletions(-)
create mode 100644 src-ui/app/_app_controllers/GlobalHotKeyController.jsx
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 6291f841..c2c43e71 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -12,22 +12,23 @@ dependencies = [
"tauri",
"tauri-build",
"window-shadows",
+ "windows 0.38.0",
]
[[package]]
name = "addr2line"
-version = "0.21.0"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
"gimli",
]
[[package]]
-name = "adler"
-version = "1.0.2"
+name = "adler2"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
[[package]]
name = "aho-corasick"
@@ -70,9 +71,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.86"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
[[package]]
name = "atk"
@@ -100,23 +101,23 @@ dependencies = [
[[package]]
name = "autocfg"
-version = "1.3.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "backtrace"
-version = "0.3.71"
+version = "0.3.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
dependencies = [
"addr2line",
- "cc",
"cfg-if",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -145,9 +146,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.5.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]]
name = "block"
@@ -166,9 +167,9 @@ dependencies = [
[[package]]
name = "brotli"
-version = "3.5.0"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391"
+checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -177,9 +178,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "2.5.1"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -187,9 +188,9 @@ dependencies = [
[[package]]
name = "bstr"
-version = "1.9.1"
+version = "1.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
+checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
dependencies = [
"memchr",
"serde",
@@ -203,9 +204,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytemuck"
-version = "1.16.0"
+version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5"
+checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
[[package]]
name = "byteorder"
@@ -215,9 +216,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.6.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
+checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
[[package]]
name = "cairo-rs"
@@ -255,9 +256,12 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.0.98"
+version = "1.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f"
+checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
+dependencies = [
+ "shlex",
+]
[[package]]
name = "cesu8"
@@ -303,15 +307,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.38"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
dependencies = [
"android-tzdata",
"iana-time-zone",
"num-traits",
"serde",
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -394,9 +398,9 @@ dependencies = [
[[package]]
name = "core-foundation-sys"
-version = "0.8.6"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "core-graphics"
@@ -449,9 +453,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.12"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
dependencies = [
"libc",
]
@@ -467,18 +471,18 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.13"
+version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
+checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
@@ -495,9 +499,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crypto-common"
@@ -533,24 +537,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "ctor"
-version = "0.2.8"
+version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
+checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
dependencies = [
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "darling"
-version = "0.20.9"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
+checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
dependencies = [
"darling_core",
"darling_macro",
@@ -558,27 +562,27 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.9"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
+checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "darling_macro"
-version = "0.20.9"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
+checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
@@ -593,15 +597,15 @@ dependencies = [
[[package]]
name = "derive_more"
-version = "0.99.17"
+version = "0.99.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"rustc_version",
- "syn 1.0.109",
+ "syn 2.0.94",
]
[[package]]
@@ -662,6 +666,17 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+]
+
[[package]]
name = "dlib"
version = "0.5.2"
@@ -679,24 +694,24 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
[[package]]
name = "dtoa-short"
-version = "0.3.4"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
dependencies = [
"dtoa",
]
[[package]]
name = "dunce"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]]
name = "dwrote"
-version = "0.11.1"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2da3498378ed373237bdef1eddcc64e7be2d3ba4841f4c22a998e81cadeea83c"
+checksum = "70182709525a3632b2ba96b6569225467b18ecb4a77f46d255f713a6bebf05fd"
dependencies = [
"lazy_static",
"libc",
@@ -706,14 +721,14 @@ dependencies = [
[[package]]
name = "embed-resource"
-version = "2.4.2"
+version = "2.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6985554d0688b687c5cb73898a34fbe3ad6c24c58c238a4d91d5e840670ee9d"
+checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379"
dependencies = [
"cc",
"memchr",
"rustc_version",
- "toml 0.8.2",
+ "toml 0.8.19",
"vswhom",
"winreg",
]
@@ -726,9 +741,9 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
[[package]]
name = "encoding_rs"
-version = "0.8.34"
+version = "0.8.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
"cfg-if",
]
@@ -741,25 +756,25 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.9"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "fastrand"
-version = "2.1.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "fdeflate"
-version = "0.3.4"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
"simd-adler32",
]
@@ -776,21 +791,21 @@ dependencies = [
[[package]]
name = "filetime"
-version = "0.2.23"
+version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.4.1",
- "windows-sys 0.52.0",
+ "libredox",
+ "windows-sys 0.59.0",
]
[[package]]
name = "flate2"
-version = "1.0.30"
+version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
+checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -802,6 +817,15 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d"
+[[package]]
+name = "fluent-uri"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -814,7 +838,7 @@ version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b64b34f4efd515f905952d91bc185039863705592c0c53ae6d979805dd154520"
dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
"byteorder",
"core-foundation",
"core-graphics 0.23.2",
@@ -860,7 +884,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
@@ -907,24 +931,24 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
@@ -933,32 +957,32 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-macro"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "futures-task"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-core",
"futures-macro",
@@ -1110,9 +1134,9 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.28.1"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "gio"
@@ -1191,21 +1215,21 @@ dependencies = [
[[package]]
name = "glob"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
[[package]]
name = "globset"
-version = "0.4.14"
+version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19"
dependencies = [
"aho-corasick",
"bstr",
"log",
- "regex-automata 0.4.6",
- "regex-syntax 0.8.3",
+ "regex-automata 0.4.9",
+ "regex-syntax 0.8.5",
]
[[package]]
@@ -1282,9 +1306,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.5"
+version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]]
name = "heck"
@@ -1307,12 +1331,6 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-[[package]]
-name = "hermit-abi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
-
[[package]]
name = "hex"
version = "0.4.3"
@@ -1341,7 +1359,7 @@ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.11",
+ "itoa 1.0.14",
]
[[package]]
@@ -1352,9 +1370,9 @@ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
[[package]]
name = "iana-time-zone"
-version = "0.1.60"
+version = "0.1.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
dependencies = [
"android_system_properties",
"core-foundation-sys",
@@ -1383,6 +1401,124 @@ dependencies = [
"png",
]
+[[package]]
+name = "icu_collections"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
+
+[[package]]
+name = "icu_normalizer"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+
+[[package]]
+name = "icu_properties"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+
+[[package]]
+name = "icu_provider"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+]
+
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -1391,25 +1527,36 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
-version = "0.5.0"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
- "unicode-bidi",
- "unicode-normalization",
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
]
[[package]]
name = "ignore"
-version = "0.4.22"
+version = "0.4.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1"
+checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
dependencies = [
"crossbeam-deque",
"globset",
"log",
"memchr",
- "regex-automata 0.4.6",
+ "regex-automata 0.4.9",
"same-file",
"walkdir",
"winapi-util",
@@ -1440,12 +1587,12 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.2.6"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
dependencies = [
"equivalent",
- "hashbrown 0.14.5",
+ "hashbrown 0.15.2",
"serde",
]
@@ -1475,9 +1622,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
-version = "1.0.11"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
[[package]]
name = "javascriptcore-rs"
@@ -1524,24 +1671,37 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "js-sys"
-version = "0.3.69"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
+checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
+ "once_cell",
"wasm-bindgen",
]
[[package]]
name = "json-patch"
-version = "1.4.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b"
+checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc"
dependencies = [
+ "jsonptr",
"serde",
"serde_json",
"thiserror",
]
+[[package]]
+name = "jsonptr"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627"
+dependencies = [
+ "fluent-uri",
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "kuchikiki"
version = "0.8.2"
@@ -1557,24 +1717,24 @@ dependencies = [
[[package]]
name = "lazy_static"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
-version = "0.2.155"
+version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
+checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
[[package]]
name = "libloading"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
+checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
"cfg-if",
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -1583,22 +1743,23 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
"libc",
+ "redox_syscall",
]
-[[package]]
-name = "line-wrap"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e"
-
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+[[package]]
+name = "litemap"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
+
[[package]]
name = "lock_api"
version = "0.4.12"
@@ -1611,9 +1772,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.21"
+version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "loom"
@@ -1676,9 +1837,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
[[package]]
name = "memchr"
-version = "2.7.2"
+version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memoffset"
@@ -1691,11 +1852,11 @@ dependencies = [
[[package]]
name = "miniz_oxide"
-version = "0.7.3"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae"
+checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394"
dependencies = [
- "adler",
+ "adler2",
"simd-adler32",
]
@@ -1764,16 +1925,6 @@ dependencies = [
"autocfg",
]
-[[package]]
-name = "num_cpus"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
-dependencies = [
- "hermit-abi",
- "libc",
-]
-
[[package]]
name = "num_enum"
version = "0.5.11"
@@ -1825,18 +1976,18 @@ dependencies = [
[[package]]
name = "object"
-version = "0.32.2"
+version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
-version = "1.19.0"
+version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "open"
@@ -1856,12 +2007,12 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "os_pipe"
-version = "1.1.5"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9"
+checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1897,9 +2048,9 @@ dependencies = [
[[package]]
name = "parking_lot"
-version = "0.12.2"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -1913,16 +2064,16 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.5.1",
+ "redox_syscall",
"smallvec",
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
]
[[package]]
name = "pathdiff"
-version = "0.2.1"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]]
name = "pathfinder_geometry"
@@ -2053,7 +2204,7 @@ dependencies = [
"phf_shared 0.11.2",
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
@@ -2085,9 +2236,9 @@ dependencies = [
[[package]]
name = "pin-project-lite"
-version = "0.2.14"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
[[package]]
name = "pin-utils"
@@ -2097,19 +2248,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "plist"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9"
+checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
dependencies = [
- "base64 0.21.7",
- "indexmap 2.2.6",
- "line-wrap",
+ "base64 0.22.1",
+ "indexmap 2.7.0",
"quick-xml",
"serde",
"time",
@@ -2117,9 +2267,9 @@ dependencies = [
[[package]]
name = "png"
-version = "0.17.13"
+version = "0.17.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1"
+checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
@@ -2136,9 +2286,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
[[package]]
name = "precomputed-hash"
@@ -2188,27 +2341,27 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.83"
+version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43"
+checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quick-xml"
-version = "0.31.0"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
-version = "1.0.36"
+version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
dependencies = [
"proc-macro2",
]
@@ -2302,27 +2455,18 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "redox_syscall"
-version = "0.4.1"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
-dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
]
[[package]]
name = "redox_users"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
+checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
"getrandom 0.2.15",
"libredox",
@@ -2331,14 +2475,14 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.10.4"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata 0.4.6",
- "regex-syntax 0.8.3",
+ "regex-automata 0.4.9",
+ "regex-syntax 0.8.5",
]
[[package]]
@@ -2352,13 +2496,13 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.6"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.8.3",
+ "regex-syntax 0.8.5",
]
[[package]]
@@ -2369,9 +2513,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.8.3"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "rustc-demangle"
@@ -2381,31 +2525,31 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc_version"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
"semver",
]
[[package]]
name = "rustix"
-version = "0.38.34"
+version = "0.38.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
+checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85"
dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "rustversion"
-version = "1.0.17"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
[[package]]
name = "ryu"
@@ -2456,41 +2600,42 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
dependencies = [
"serde",
]
[[package]]
name = "serde"
-version = "1.0.202"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395"
+checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.202"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838"
+checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "serde_json"
-version = "1.0.117"
+version = "1.0.134"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
+checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d"
dependencies = [
- "indexmap 2.2.6",
- "itoa 1.0.11",
+ "indexmap 2.7.0",
+ "itoa 1.0.14",
+ "memchr",
"ryu",
"serde",
]
@@ -2503,29 +2648,29 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "serde_spanned"
-version = "0.6.6"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
+checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
"serde",
]
[[package]]
name = "serde_with"
-version = "3.8.1"
+version = "3.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20"
+checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa"
dependencies = [
"base64 0.22.1",
"chrono",
"hex",
"indexmap 1.9.3",
- "indexmap 2.2.6",
+ "indexmap 2.7.0",
"serde",
"serde_derive",
"serde_json",
@@ -2535,21 +2680,21 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.8.1"
+version = "3.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
+checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "serialize-to-javascript"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
+checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
dependencies = [
"serde",
"serde_json",
@@ -2558,13 +2703,13 @@ dependencies = [
[[package]]
name = "serialize-to-javascript-impl"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
+checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.94",
]
[[package]]
@@ -2599,14 +2744,20 @@ dependencies = [
[[package]]
name = "shared_child"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c"
dependencies = [
"libc",
- "winapi",
+ "windows-sys 0.59.0",
]
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
[[package]]
name = "simd-adler32"
version = "0.3.7"
@@ -2722,15 +2873,26 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.65"
+version = "2.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106"
+checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
+[[package]]
+name = "synstructure"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+]
+
[[package]]
name = "system-deps"
version = "5.0.0"
@@ -2753,15 +2915,15 @@ dependencies = [
"cfg-expr 0.15.8",
"heck 0.5.0",
"pkg-config",
- "toml 0.8.2",
+ "toml 0.8.19",
"version-compare 0.2.0",
]
[[package]]
name = "tao"
-version = "0.16.9"
+version = "0.16.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "575c856fc21e551074869dcfaad8f706412bd5b803dfa0fbf6881c4ff4bfafab"
+checksum = "48d298c441a1da46e28e8ad8ec205aab7fd8cd71b9d10e05454224eef422e1ae"
dependencies = [
"bitflags 1.3.2",
"cairo-rs",
@@ -2806,20 +2968,20 @@ dependencies = [
[[package]]
name = "tao-macros"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2"
+checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.94",
]
[[package]]
name = "tar"
-version = "0.4.41"
+version = "0.4.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909"
+checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6"
dependencies = [
"filetime",
"libc",
@@ -2828,15 +2990,15 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.12.14"
+version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
-version = "1.6.8"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516"
+checksum = "1bf327e247698d3f39af8aa99401c9708384290d1f5c544bf5d251d44c2fea22"
dependencies = [
"anyhow",
"cocoa 0.24.1",
@@ -2853,11 +3015,13 @@ dependencies = [
"heck 0.5.0",
"http",
"ignore",
+ "log",
"objc",
"once_cell",
"open",
"os_pipe",
"percent-encoding",
+ "plist",
"rand 0.8.5",
"raw-window-handle",
"regex",
@@ -2885,9 +3049,9 @@ dependencies = [
[[package]]
name = "tauri-build"
-version = "1.5.2"
+version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab30cba12974d0f9b09794f61e72cad6da2142d3ceb81e519321bab86ce53312"
+checksum = "586f3e677f940c8bb4f70c52eda05dc59b79e61543f1182de83516810bb8e35d"
dependencies = [
"anyhow",
"cargo_toml",
@@ -2904,9 +3068,9 @@ dependencies = [
[[package]]
name = "tauri-codegen"
-version = "1.4.3"
+version = "1.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3a1d90db526a8cdfd54444ad3f34d8d4d58fa5c536463915942393743bd06f8"
+checksum = "93a9e3f5cebf779a63bf24903e714ec91196c307d8249a0008b882424328bcda"
dependencies = [
"base64 0.21.7",
"brotli",
@@ -2930,9 +3094,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
-version = "1.4.4"
+version = "1.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a582d75414250122e4a597b9dd7d3c910a2c77906648fc2ac9353845ff0feec"
+checksum = "d1d0e989f54fe06c5ef0875c5e19cf96453d099a0a774d5192ab47e80471cdab"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@@ -2944,9 +3108,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
-version = "0.14.3"
+version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd7ffddf36d450791018e63a3ddf54979b9581d9644c584a5fb5611e6b5f20b4"
+checksum = "f33fda7d213e239077fad52e96c6b734cecedb30c2382118b64f94cb5103ff3a"
dependencies = [
"gtk",
"http",
@@ -2965,9 +3129,9 @@ dependencies = [
[[package]]
name = "tauri-runtime-wry"
-version = "0.14.8"
+version = "0.14.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1989b3b4d611f5428b3414a4abae6fa6df30c7eb8ed33250ca90a5f7e5bb3655"
+checksum = "18c447dcd9b0f09c7dc4b752cc33e72788805bfd761fbda5692d30c48289efec"
dependencies = [
"cocoa 0.24.1",
"gtk",
@@ -2985,9 +3149,9 @@ dependencies = [
[[package]]
name = "tauri-utils"
-version = "1.5.4"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "450b17a7102e5d46d4bdabae0d1590fd27953e704e691fc081f06c06d2253b35"
+checksum = "83a0c939e88d82903a0a7dfb28388b12a3c03504d6bd6086550edaa3b6d8beaa"
dependencies = [
"brotli",
"ctor",
@@ -3025,14 +3189,16 @@ dependencies = [
[[package]]
name = "tempfile"
-version = "3.10.1"
+version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
+checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704"
dependencies = [
"cfg-if",
"fastrand",
+ "getrandom 0.2.15",
+ "once_cell",
"rustix",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -3054,22 +3220,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
[[package]]
name = "thiserror"
-version = "1.0.61"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.61"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
@@ -3084,12 +3250,12 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
dependencies = [
"deranged",
- "itoa 1.0.11",
+ "itoa 1.0.14",
"num-conv",
"powerfmt",
"serde",
@@ -3105,38 +3271,32 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
dependencies = [
"num-conv",
"time-core",
]
[[package]]
-name = "tinyvec"
-version = "1.6.0"
+name = "tinystr"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
- "tinyvec_macros",
+ "displaydoc",
+ "zerovec",
]
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
[[package]]
name = "tokio"
-version = "1.37.0"
+version = "1.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787"
+checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
dependencies = [
"backtrace",
"bytes",
- "num_cpus",
"pin-project-lite",
]
@@ -3163,21 +3323,21 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.8.2"
+version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit 0.20.2",
+ "toml_edit 0.22.22",
]
[[package]]
name = "toml_datetime"
-version = "0.6.3"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [
"serde",
]
@@ -3188,31 +3348,31 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.2.6",
+ "indexmap 2.7.0",
"serde",
"serde_spanned",
"toml_datetime",
- "winnow",
+ "winnow 0.5.40",
]
[[package]]
name = "toml_edit"
-version = "0.20.2"
+version = "0.22.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
dependencies = [
- "indexmap 2.2.6",
+ "indexmap 2.7.0",
"serde",
"serde_spanned",
"toml_datetime",
- "winnow",
+ "winnow 0.6.22",
]
[[package]]
name = "tracing"
-version = "0.1.40"
+version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
"pin-project-lite",
"tracing-attributes",
@@ -3221,20 +3381,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.27"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
]
[[package]]
name = "tracing-core"
-version = "0.1.32"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
dependencies = [
"once_cell",
"valuable",
@@ -3253,9 +3413,9 @@ dependencies = [
[[package]]
name = "tracing-subscriber"
-version = "0.3.18"
+version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
"matchers",
"nu-ansi-term",
@@ -3275,38 +3435,23 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
-[[package]]
-name = "unicode-bidi"
-version = "0.3.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
-
[[package]]
name = "unicode-ident"
-version = "1.0.12"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
-dependencies = [
- "tinyvec",
-]
+checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
[[package]]
name = "unicode-segmentation"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "url"
-version = "2.5.0"
+version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
@@ -3321,10 +3466,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
-name = "uuid"
-version = "1.8.0"
+name = "utf16_iter"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
+checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "uuid"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a"
dependencies = [
"getrandom 0.2.15",
]
@@ -3349,9 +3506,9 @@ checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
[[package]]
name = "version_check"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "vswhom"
@@ -3397,34 +3554,34 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.92"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
+ "once_cell",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.92"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.92"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3432,22 +3589,22 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.92"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.65",
+ "syn 2.0.94",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.92"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "webkit2gtk"
@@ -3552,11 +3709,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -3576,6 +3733,19 @@ dependencies = [
"windows-sys 0.52.0",
]
+[[package]]
+name = "windows"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c47017195a790490df51a3e27f669a7d4f285920d90d03ef970c5d886ef0af1"
+dependencies = [
+ "windows_aarch64_msvc 0.38.0",
+ "windows_i686_gnu 0.38.0",
+ "windows_i686_msvc 0.38.0",
+ "windows_x86_64_gnu 0.38.0",
+ "windows_x86_64_msvc 0.38.0",
+]
+
[[package]]
name = "windows"
version = "0.39.0"
@@ -3615,7 +3785,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -3664,7 +3834,16 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
]
[[package]]
@@ -3684,18 +3863,18 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
- "windows_aarch64_gnullvm 0.52.5",
- "windows_aarch64_msvc 0.52.5",
- "windows_i686_gnu 0.52.5",
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
- "windows_i686_msvc 0.52.5",
- "windows_x86_64_gnu 0.52.5",
- "windows_x86_64_gnullvm 0.52.5",
- "windows_x86_64_msvc 0.52.5",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
]
[[package]]
@@ -3710,7 +3889,7 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515"
dependencies = [
- "windows-targets 0.52.5",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -3727,9 +3906,15 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b12add87e2fb192fff3f4f7e4342b3694785d79f3a64e2c20d5ceb5ccbcfc3cd"
[[package]]
name = "windows_aarch64_msvc"
@@ -3751,9 +3936,15 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c98f2db372c23965c5e0f43896a8f0316dc0fbe48d1aa65bea9bdd295d43c15"
[[package]]
name = "windows_i686_gnu"
@@ -3775,15 +3966,21 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf0569be0f2863ab6a12a6ba841fcfa7d107cbc7545a3ebd57685330db0a3ff"
[[package]]
name = "windows_i686_msvc"
@@ -3805,9 +4002,15 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "905858262c8380a36f32cb8c1990d7e7c3b7a8170e58ed9a98ca6d940b7ea9f1"
[[package]]
name = "windows_x86_64_gnu"
@@ -3829,9 +4032,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -3847,9 +4050,15 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "890c3c6341d441ffb38f705f47196e3665dc6dd79f6d72fa185d937326730561"
[[package]]
name = "windows_x86_64_msvc"
@@ -3871,9 +4080,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.52.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
@@ -3884,6 +4093,15 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "winnow"
+version = "0.6.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "winreg"
version = "0.52.0"
@@ -3904,10 +4122,22 @@ dependencies = [
]
[[package]]
-name = "wry"
-version = "0.24.10"
+name = "write16"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45"
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+
+[[package]]
+name = "writeable"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
+
+[[package]]
+name = "wry"
+version = "0.24.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55c80b12287eb1ff7c365fc2f7a5037cb6181bd44c9fce81c8d1cf7605ffad6"
dependencies = [
"base64 0.13.1",
"block",
@@ -3983,3 +4213,91 @@ dependencies = [
"once_cell",
"pkg-config",
]
+
+[[package]]
+name = "yoke"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+ "synstructure",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.94",
+]
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 46da9fa7..9fcce956 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -11,11 +11,13 @@ edition = "2021"
tauri-build = { version = "1", features = [] }
[dependencies]
-tauri = { version = "1", features = [ "window-set-size", "window-set-position", "window-unmaximize", "window-close", "window-maximize", "window-minimize", "window-unminimize", "window-start-dragging", "window-set-decorations", "window-set-always-on-top", "shell-sidecar", "shell-open", "devtools"] }
+tauri = { version = "1", features = [ "window-hide", "window-set-focus", "global-shortcut-all", "window-set-size", "window-set-position", "window-unmaximize", "window-close", "window-maximize", "window-minimize", "window-unminimize", "window-start-dragging", "window-set-decorations", "window-set-always-on-top", "shell-sidecar", "shell-open", "devtools"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
font-kit = "0.14.2"
window-shadows = { git = "https://github.com/tauri-apps/window-shadows.git" }
+windows = { version = "0.38", features = ["Win32_Foundation", "Win32_UI_WindowsAndMessaging", "Win32_System_Threading"] }
+
[features]
# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!!
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 66464eff..b4950509 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -1,9 +1,8 @@
-// Prevents additional console window on Windows in release, DO NOT REMOVE!!
-#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
-
-// use tauri::command;
use tauri::Manager;
use window_shadows::set_shadow;
+use windows::Win32::UI::WindowsAndMessaging::{GetForegroundWindow, GetWindowTextW};
+use std::collections::HashSet;
+
fn main() {
tauri::Builder::default()
.setup(|app| {
@@ -13,18 +12,16 @@ fn main() {
{ main_window.open_devtools(); }
#[cfg(any(windows, target_os = "macos"))]
- set_shadow(main_window, true).unwrap();
+ set_shadow(main_window, true).unwrap()
Ok(())
})
- .invoke_handler(tauri::generate_handler![get_font_list])
+ .invoke_handler(tauri::generate_handler![get_font_list, get_active_window_title])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
-
use font_kit::{source::SystemSource};
-use std::collections::HashSet;
#[tauri::command]
async fn get_font_list() -> Vec
{
@@ -41,3 +38,27 @@ async fn get_font_list() -> Vec {
font_families.into_iter().collect()
}
+
+use windows::Win32::Foundation::HWND;
+#[tauri::command]
+fn get_active_window_title() -> String {
+ unsafe {
+ // Get the handle of the foreground (active) window
+ let hwnd = GetForegroundWindow();
+ if hwnd == HWND(0) { // `HWND(0)` は null ハンドルを表します
+ return "No active window".to_string();
+ }
+
+ // Create a buffer to hold the window title
+ let mut buffer: [u16; 512] = [0; 512];
+
+ // Get the window title
+ let length = GetWindowTextW(hwnd, &mut buffer);
+
+ if length > 0 {
+ // Convert the result to a Rust string
+ return String::from_utf16_lossy(&buffer[..length as usize]);
+ }
+ }
+ "Failed to retrieve window title".to_string()
+}
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 040bce33..9b869f1a 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -15,8 +15,10 @@
"window": {
"all": false,
"setAlwaysOnTop": true,
+ "setFocus": true,
"setDecorations": true,
"close": true,
+ "hide": true,
"setPosition": true,
"setSize": true,
"maximize": true,
@@ -24,7 +26,10 @@
"unmaximize": true,
"unminimize": true,
"startDragging": true
- },
+ },
+ "globalShortcut": {
+ "all": true
+ },
"shell": {
"all": false,
"open": true,
diff --git a/src-ui/app/App.jsx b/src-ui/app/App.jsx
index 051855e2..60a3effe 100644
--- a/src-ui/app/App.jsx
+++ b/src-ui/app/App.jsx
@@ -4,10 +4,9 @@ import {
useWindow,
} from "@logics_common";
-// import React from "react";
-
import {
KeyEventController,
+ GlobalHotKeyController,
StartPythonController,
UiLanguageController,
ConfigPageCloseTriggerController,
@@ -34,6 +33,7 @@ export const App = () => {
return (
+
diff --git a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
new file mode 100644
index 00000000..ae69f041
--- /dev/null
+++ b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
@@ -0,0 +1,43 @@
+ import { appWindow } from "@tauri-apps/api/window";
+ import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut";
+ import { invoke } from "@tauri-apps/api/tauri";
+ import { useEffect, useRef } from "react";
+ import { store } from "@store";
+
+ export const GlobalHotKeyController = () => {
+ const is_initialized = useRef(false);
+
+ useEffect(() => {
+ if (is_initialized.current) return;
+
+ const registerShortcuts = async () => {
+ const shortcut = "Alt+Y";
+ const is_already_registered = await isRegistered(shortcut);
+
+ if (is_already_registered) return;
+ await register(shortcut, async () => {
+ const activeWindowTitle = await invoke("get_active_window_title");
+
+ if (activeWindowTitle.includes("VRChat")) {
+ console.log("Shortcut triggered, setFocus");
+ appWindow.unminimize();
+ await appWindow.setFocus();
+ store.text_area_ref.current?.focus();
+ } else {
+ console.log("Active window is not VRChat.");
+ }
+ });
+ };
+
+ registerShortcuts();
+ is_initialized.current = true;
+
+ return () => {
+ unregisterAll().catch((error) => {
+ console.error("Failed to unregister shortcuts:", error);
+ });
+ };
+ }, []);
+
+ return null;
+ };
diff --git a/src-ui/app/_app_controllers/KeyEventController.jsx b/src-ui/app/_app_controllers/KeyEventController.jsx
index 9e8c43a6..654f8499 100644
--- a/src-ui/app/_app_controllers/KeyEventController.jsx
+++ b/src-ui/app/_app_controllers/KeyEventController.jsx
@@ -2,24 +2,27 @@ import { useEffect } from "react";
export const KeyEventController = () => {
useEffect(() => {
- const handleKeydown = (event) => {
- if (event.key === "F5" || (event.ctrlKey && event.key === "r") ||
- (event.metaKey && event.key === "r")) {
+ const handleKeydown = (event) => {
+ if (
+ event.key === "F5" ||
+ (event.ctrlKey && event.key === "r") ||
+ (event.metaKey && event.key === "r")
+ ) {
+ event.preventDefault();
+ }
+ };
+
+ const handleContextmenu = (event) => {
event.preventDefault();
- }
- };
+ };
- const handleContextmenu = (event) => {
- event.preventDefault();
- };
+ document.addEventListener("keydown", handleKeydown);
+ document.addEventListener("contextmenu", handleContextmenu);
- document.addEventListener("keydown", handleKeydown);
- document.addEventListener("contextmenu", handleContextmenu);
-
- return () => {
- document.removeEventListener("keydown", handleKeydown);
- document.removeEventListener("contextmenu", handleContextmenu);
- };
+ return () => {
+ document.removeEventListener("keydown", handleKeydown);
+ document.removeEventListener("contextmenu", handleContextmenu);
+ };
}, []);
return null;
diff --git a/src-ui/app/_app_controllers/index.js b/src-ui/app/_app_controllers/index.js
index abe6f018..29576a84 100644
--- a/src-ui/app/_app_controllers/index.js
+++ b/src-ui/app/_app_controllers/index.js
@@ -1,4 +1,5 @@
export { KeyEventController } from "./KeyEventController";
+export { GlobalHotKeyController } from "./GlobalHotKeyController";
export { StartPythonController } from "./StartPythonController";
export { UiLanguageController } from "./UiLanguageController";
export { ConfigPageCloseTriggerController } from "./ConfigPageCloseTriggerController";
diff --git a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
index e5725637..50a86fd7 100644
--- a/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
+++ b/src-ui/app/main_page/main_section/message_container/message_input_box/MessageInputBox.jsx
@@ -1,9 +1,11 @@
-import { useState, useEffect } from "react";
+import { useState, useEffect, useLayoutEffect, useRef } from "react";
import styles from "./MessageInputBox.module.scss";
import SendMessageSvg from "@images/send_message.svg?react";
import { useMessage } from "@logics_common";
import { useSendMessageButtonType, useEnableAutoClearMessageInputBox } from "@logics_configs";
import { useMessageLogScroll } from "@logics_main";
+import { store } from "@store";
+import { appWindow } from "@tauri-apps/api/window";
export const MessageInputBox = () => {
const [message_history, setMessageHistory] = useState([]);
@@ -22,6 +24,12 @@ export const MessageInputBox = () => {
const { scrollToBottom } = useMessageLogScroll();
+ const log_box_ref = useRef(null);
+
+ useLayoutEffect(() => {
+ store.text_area_ref = log_box_ref;
+ }, []);
+
useEffect(() => {
if (currentMessageLogs.data) {
const sentMessages = currentMessageLogs.data
@@ -33,6 +41,7 @@ export const MessageInputBox = () => {
const onSubmitFunction = (e) => {
e.preventDefault();
+ appWindow.minimize();
if (!currentMessageInputValue.data.trim()) return updateMessageInputValue("");
@@ -90,6 +99,7 @@ export const MessageInputBox = () => {
diff --git a/src-ui/logics/configs/hotkeys/useHotkeys.js b/src-ui/logics/configs/hotkeys/useHotkeys.js
new file mode 100644
index 00000000..5349b33b
--- /dev/null
+++ b/src-ui/logics/configs/hotkeys/useHotkeys.js
@@ -0,0 +1,25 @@
+import { useStore_Hotkeys } from "@store";
+// import { useStdoutToPython } from "@logics/useStdoutToPython";
+
+export const useHotkeys = () => {
+ // const { asyncStdoutToPython } = useStdoutToPython();
+ const { currentHotkeys, updateHotkeys, pendingHotkeys } = useStore_Hotkeys();
+
+ const getHotkeys = () => {
+ // pendingHotkeys();
+ // asyncStdoutToPython("/get/data/osc_ip_address");
+ };
+
+ const setHotkeys = (hotkeys) => {
+ updateHotkeys(hotkeys);
+ // pendingHotkeys();
+ // asyncStdoutToPython("/set/data/osc_ip_address", osc_ip_address);
+ };
+
+ return {
+ currentHotkeys,
+ // getHotkeys,
+ updateHotkeys,
+ setHotkeys,
+ };
+};
\ No newline at end of file
diff --git a/src-ui/logics/configs/index.js b/src-ui/logics/configs/index.js
index b8426255..8bcf2a7c 100644
--- a/src-ui/logics/configs/index.js
+++ b/src-ui/logics/configs/index.js
@@ -51,6 +51,8 @@ export { useOverlayShowOnlyTranslatedMessages } from "./vr/useOverlayShowOnlyTra
export { useOverlayLargeLogSettings } from "./vr/useOverlayLargeLogSettings";
export { useSendTextToOverlay } from "./vr/useSendTextToOverlay";
+export { useHotkeys } from "./hotkeys/useHotkeys";
+
export { useOscIpAddress } from "./advanced_settings/useOscIpAddress";
export { useOscPort } from "./advanced_settings/useOscPort";
diff --git a/src-ui/store.js b/src-ui/store.js
index 7a94f8f4..53d30ed5 100644
--- a/src-ui/store.js
+++ b/src-ui/store.js
@@ -264,6 +264,11 @@ export const { atomInstance: Atom_EnableVrcMicMuteSync, useHook: useStore_Enable
export const { atomInstance: Atom_EnableSendMessageToVrc, useHook: useStore_EnableSendMessageToVrc } = createAtomWithHook(true, "EnableSendMessageToVrc");
export const { atomInstance: Atom_EnableSendReceivedMessageToVrc, useHook: useStore_EnableSendReceivedMessageToVrc } = createAtomWithHook(false, "EnableSendReceivedMessageToVrc");
+// Hotkeys
+export const { atomInstance: Atom_Hotkeys, useHook: useStore_Hotkeys } = createAtomWithHook({
+ toggle_active_vrct: null,
+}, "Hotkeys");
+
// Advanced Settings
export const { atomInstance: Atom_OscIpAddress, useHook: useStore_OscIpAddress } = createAtomWithHook("127.0.0.1", "OscIpAddress");
export const { atomInstance: Atom_OscPort, useHook: useStore_OscPort } = createAtomWithHook("9000", "OscPort");
From a76ea77d5dbfedb99eaaffbc78fa8e631549c7af Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Sun, 12 Jan 2025 22:56:00 +0900
Subject: [PATCH 13/54] [Refactor] Refactor.
---
.../GlobalHotKeyController.jsx | 19 ++-
.../hotkeys_entry/HotkeysEntry.jsx | 114 +++++++-----------
2 files changed, 52 insertions(+), 81 deletions(-)
diff --git a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
index 0387f3be..e3b8474a 100644
--- a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
+++ b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
@@ -27,15 +27,12 @@ export const GlobalHotKeyController = () => {
const shortcut_raw = currentHotkeys.data.toggle_active_vrct;
console.log(shortcut_raw);
-
if (!shortcut_raw) {
console.warn("No hotkey defined.");
return;
}
- // 入力文字列をTauriで使える形式に変換
const shortcut = parseHotkey(shortcut_raw);
- // const shortcut = "F9";
try {
// 既存のショートカットをすべて解除
@@ -46,14 +43,14 @@ export const GlobalHotKeyController = () => {
if (!isAlreadyRegistered) {
await register(shortcut, async () => {
console.log(`Shortcut "${shortcut}" triggered, setting focus.`);
- // const minimized = await appWindow.isMinimized();
- // if (minimized === true) {
- // appWindow.unminimize();
- // await appWindow.setFocus();
- // store.text_area_ref.current?.focus();
- // } else {
- // appWindow.minimize();
- // }
+ const minimized = await appWindow.isMinimized();
+ if (minimized === true) {
+ appWindow.unminimize();
+ await appWindow.setFocus();
+ store.text_area_ref.current?.focus();
+ } else {
+ appWindow.minimize();
+ }
});
console.log(`Registered global shortcut: ${shortcut}`);
}
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
index 48ebeb11..ae5bc2a8 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
@@ -3,130 +3,104 @@ import { _Entry } from "../_atoms/_entry/_Entry";
import { useState, useRef } from "react";
export const HotkeysEntry = (props) => {
- const [is_accepting_input, setIsAcceptingInput] = useState(false); // キー入力受付中かどうか
- const lastKeyRef = useRef(null); // 直前のキーを保持
- const [displayValue, setDisplayValue] = useState(props.value[props.hotkey_id]); // 表示用の値
- const isModifierOnlyRef = useRef(false); // 修飾キー単体かどうかのフラグ
+ const [isAcceptingInput, setIsAcceptingInput] = useState(false);
+ const [displayValue, setDisplayValue] = useState(props.value[props.hotkey_id]);
+ const lastKeyRef = useRef(null);
+ const isModifierOnlyRef = useRef(false);
const entryRef = useRef(null);
+ const pressedKeys = useRef(new Set());
+ const keysRef = useRef([]);
- const pressedKeys = useRef(new Set()); // 押されているキーを追跡
- const keysRef = useRef([]); // 最新のkeysを保存
-
- const setHotkeys = (keys) => {
+ const updateHotkeys = (keys) => {
entryRef.current.blur();
props.setHotkeys({ [props.hotkey_id]: keys });
};
+ const processKey = (key) => {
+ if (/^[a-zA-Z]$/.test(key)) return key.toUpperCase();
+ if (key === "Meta") return "Super";
+ return key;
+ };
+
const handleKeyInput = (event) => {
const keys = [];
- const nonModifierKeys = []; // 修飾キー以外を追跡する配列
+ const nonModifierKeys = [];
- // 修飾キーを判定して追加(重複防止)
- if (event.ctrlKey && !keys.includes("Ctrl")) keys.push("Ctrl");
- if (event.shiftKey && !keys.includes("Shift")) keys.push("Shift");
- if (event.altKey && !keys.includes("Alt")) keys.push("Alt");
- if (event.metaKey && !keys.includes("Super")) keys.push("Super");
+ ["Ctrl", "Shift", "Alt", "Super"].forEach((modKey) => {
+ if (event[`${modKey.toLowerCase()}Key`] && !keys.includes(modKey)) {
+ keys.push(modKey);
+ }
+ });
- let register_key = event.key === "Meta" ? "Super" : event.key;
- // アルファベットの場合は大文字に変換
- if (/^[a-zA-Z]$/.test(register_key)) {
- register_key = register_key.toUpperCase();
- }
-
- // 修飾キー以外を追加
+ const key = processKey(event.key);
if (!["Control", "Shift", "Alt", "Meta"].includes(event.key)) {
- keys.push(register_key);
- nonModifierKeys.push(register_key); // 修飾キー以外のキーを追跡
+ keys.push(key);
+ nonModifierKeys.push(key);
}
- // キーが既に追跡されていない場合のみ追加
- if (!pressedKeys.current.has(register_key)) {
- pressedKeys.current.add(register_key);
+ if (!pressedKeys.current.has(key)) {
+ pressedKeys.current.add(key);
}
- // 最新のキー構成を保存
- keysRef.current = [...keys];
-
- // 表示用の値を更新
+ keysRef.current = keys;
setDisplayValue(keys.join(" + "));
-
- // 修飾キー単体かどうかを更新
isModifierOnlyRef.current = nonModifierKeys.length === 0;
-
- // 修飾キーのみの場合は登録処理をスキップ
- if (isModifierOnlyRef.current) return;
};
const handleKeyDown = (event) => {
- event.preventDefault(); // デフォルト動作を防ぐ
+ event.preventDefault();
+ if (lastKeyRef.current === event.key) return;
- // 直前のキーと同じならスキップ
- const currentKey = event.key;
- if (lastKeyRef.current === currentKey) {
- return;
- }
-
- lastKeyRef.current = currentKey; // 今回のキーを記録
+ lastKeyRef.current = event.key;
handleKeyInput(event);
};
const handleKeyUp = (event) => {
- lastKeyRef.current = null; // キーが離されたらリセット
+ lastKeyRef.current = null;
+
+ const key = processKey(event.key);
+ pressedKeys.current.delete(key);
- // 修飾キーのみの場合でも表示は維持
if (isModifierOnlyRef.current) {
- setDisplayValue(""); // 非修飾キーが含まれていた場合リセット
+ setDisplayValue("");
}
- let register_key = event.key === "Meta" ? "Super" : event.key;
- // アルファベットの場合は大文字に変換
- if (/^[a-zA-Z]$/.test(register_key)) {
- register_key = register_key.toUpperCase();
- }
- // 押されているキーから削除
- pressedKeys.current.delete(register_key);
-
- // 全てのキーが放された場合
if (pressedKeys.current.size === 0) {
-
- // 修飾キーのみの場合はスキップ
const hasNonModifierKeys = keysRef.current.some(
(key) => !["Ctrl", "Shift", "Alt", "Super"].includes(key)
);
- if (!hasNonModifierKeys) {
- return;
+ if (hasNonModifierKeys) {
+ updateHotkeys(keysRef.current);
}
-
- // 保存されたキー構成を使用して登録
- setHotkeys(keysRef.current);
}
};
-
const handleBlur = () => {
setIsAcceptingInput(false);
pressedKeys.current.clear();
};
+ const handleDelete = () => {
+ updateHotkeys(null);
+ setDisplayValue("");
+ };
+
return (
<_Entry
ref={entryRef}
type="text"
placeholder="Press hotkeys keys"
- onFocus={() => [setIsAcceptingInput(true)]}
+ onFocus={() => setIsAcceptingInput(true)}
onBlur={handleBlur}
onKeyDown={handleKeyDown}
onKeyUp={handleKeyUp}
- value={displayValue} // 表示用の値を設定
+ value={displayValue}
width="20rem"
- is_activated={is_accepting_input}
+ is_activated={isAcceptingInput}
readOnly
/>
-
From 34d221c437e40edcbabcd31541299378b7038d65 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Mon, 13 Jan 2025 05:39:25 +0900
Subject: [PATCH 14/54] [Update] Save and register -able.
---
src-python/config.py | 16 ++++++++++
src-python/controller.py | 9 ++++++
src-python/mainloop.py | 3 ++
.../_components/_atoms/_entry/_Entry.jsx | 10 ++++--
.../hotkeys_entry/HotkeysEntry.jsx | 23 +++++++++----
.../hotkeys_entry/HotkeysEntry.module.scss | 32 +++++++++++++++++--
.../setting_box/hotkeys/Hotkeys.jsx | 1 +
src-ui/logics/configs/hotkeys/useHotkeys.js | 15 ++++-----
src-ui/logics/useReceiveRoutes.js | 7 ++++
9 files changed, 98 insertions(+), 18 deletions(-)
diff --git a/src-python/config.py b/src-python/config.py
index be7ba2fb..54fe37fd 100644
--- a/src-python/config.py
+++ b/src-python/config.py
@@ -533,6 +533,19 @@ class Config:
self._MIC_WORD_FILTER = sorted(set(value), key=value.index)
self.saveConfig(inspect.currentframe().f_code.co_name, value)
+ @property
+ @json_serializable('HOTKEYS')
+ def HOTKEYS(self):
+ return self._HOTKEYS
+
+ @HOTKEYS.setter
+ def HOTKEYS(self, value):
+ if isinstance(value, dict) and set(value.keys()) == set(self.HOTKEYS.keys()):
+ for key, value in value.items():
+ if isinstance(value, list) or value is None:
+ self._HOTKEYS[key] = value
+ self.saveConfig(inspect.currentframe().f_code.co_name, self.HOTKEYS, immediate_save=True)
+
@property
@json_serializable('MIC_AVG_LOGPROB')
def MIC_AVG_LOGPROB(self):
@@ -1026,6 +1039,9 @@ class Config:
self._MIC_PHRASE_TIMEOUT = 3
self._MIC_MAX_PHRASES = 10
self._MIC_WORD_FILTER = []
+ self._HOTKEYS = {
+ "toggle_active_vrct": None,
+ }
self._MIC_AVG_LOGPROB = -0.8
self._MIC_NO_SPEECH_PROB = 0.6
self._AUTO_SPEAKER_SELECT = True
diff --git a/src-python/controller.py b/src-python/controller.py
index 43fbe9e3..97ad29fc 100644
--- a/src-python/controller.py
+++ b/src-python/controller.py
@@ -996,6 +996,15 @@ class Controller:
response = {"status":200, "result":config.SPEAKER_MAX_PHRASES}
return response
+ @staticmethod
+ def getHotkeys(*args, **kwargs) -> dict:
+ return {"status":200, "result":config.HOTKEYS}
+
+ @staticmethod
+ def setHotkeys(data, *args, **kwargs) -> dict:
+ config.HOTKEYS = data
+ return {"status":200, "result":config.HOTKEYS}
+
@staticmethod
def getSpeakerAvgLogprob(*args, **kwargs) -> dict:
return {"status":200, "result":config.SPEAKER_AVG_LOGPROB}
diff --git a/src-python/mainloop.py b/src-python/mainloop.py
index c17c9564..af3a9dfe 100644
--- a/src-python/mainloop.py
+++ b/src-python/mainloop.py
@@ -183,6 +183,9 @@ mapping = {
"/get/data/mic_max_phrases": {"status": True, "variable":controller.getMicMaxPhrases},
"/set/data/mic_max_phrases": {"status": True, "variable":controller.setMicMaxPhrases},
+ "/get/data/hotkeys": {"status": True, "variable":controller.getHotkeys},
+ "/set/data/hotkeys": {"status": True, "variable":controller.setHotkeys},
+
"/get/data/mic_avg_logprob": {"status": True, "variable":controller.getMicAvgLogprob},
"/set/data/mic_avg_logprob": {"status": True, "variable":controller.setMicAvgLogprob},
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/_atoms/_entry/_Entry.jsx b/src-ui/app/config_page/setting_section/setting_box/_components/_atoms/_entry/_Entry.jsx
index c48d99b7..d9b0d4cb 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/_atoms/_entry/_Entry.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/_atoms/_entry/_Entry.jsx
@@ -28,10 +28,16 @@ const _Entry = forwardRef((props, ref) => {
>
props.onChange(e)}
- {...props}
+ onChange={(e) => props.onChange?.(e)}
+ onFocus={(e) => props.onFocus?.(e)}
+ onBlur={(e) => props.onBlur?.(e)}
+ onKeyDown={(e) => props.onKeyDown?.(e)}
+ onKeyUp={(e) => props.onKeyUp?.(e)}
+ readOnly={props.readOnly === true ? true : false}
/>
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
index ae5bc2a8..21a874a0 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
@@ -1,16 +1,25 @@
import styles from "./HotkeysEntry.module.scss";
import { _Entry } from "../_atoms/_entry/_Entry";
-import { useState, useRef } from "react";
+import { useState, useRef, useEffect } from "react";
+import DeleteSvg from "@images/cancel.svg?react";
+import { clsx } from "clsx";
export const HotkeysEntry = (props) => {
const [isAcceptingInput, setIsAcceptingInput] = useState(false);
- const [displayValue, setDisplayValue] = useState(props.value[props.hotkey_id]);
+ const [displayValue, setDisplayValue] = useState("");
const lastKeyRef = useRef(null);
const isModifierOnlyRef = useRef(false);
const entryRef = useRef(null);
const pressedKeys = useRef(new Set());
const keysRef = useRef([]);
+ useEffect(() => {
+ const init_display_value = props.value[props.hotkey_id] ? props.value[props.hotkey_id].join(" + ") : "";
+ setDisplayValue(init_display_value);
+ }, []);
+ console.log(props.value[props.hotkey_id]);
+
+
const updateHotkeys = (keys) => {
entryRef.current.blur();
props.setHotkeys({ [props.hotkey_id]: keys });
@@ -85,23 +94,25 @@ export const HotkeysEntry = (props) => {
setDisplayValue("");
};
+ const is_pending = props.state === "pending";
return (
+ {is_pending && }
<_Entry
ref={entryRef}
type="text"
- placeholder="Press hotkeys keys"
onFocus={() => setIsAcceptingInput(true)}
onBlur={handleBlur}
onKeyDown={handleKeyDown}
onKeyUp={handleKeyUp}
- value={displayValue}
+ ui_variable={displayValue}
width="20rem"
is_activated={isAcceptingInput}
+ is_disabled={is_pending}
readOnly
/>
-
- Delete
+
+
);
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.module.scss b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.module.scss
index 199afbb7..017f4085 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.module.scss
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.module.scss
@@ -1,13 +1,41 @@
+@import "@scss_mixins";
+
.container {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
+ position: relative;
}
.delete_button {
- padding: 0.8rem;
+ padding: 0.4rem;
font-size: 1.4rem;
- background-color: var(--dark_800_color);
+ // background-color: var(--dark_800_color);
flex-shrink: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 0.2rem;
+ &:hover {
+ background-color: var(--dark_850_color);
+ }
+ &:active {
+ background-color: var(--dark_900_color);
+ }
+ &.is_pending {
+ pointer-events: none;
+ & .delete_svg {
+ color: var(--dark_600_color);
+ }
+ }
+}
+
+.delete_svg {
+ width: 2.2rem;
+ color: var(--error_bc_color);
+}
+
+.loader {
+ @include loader(2rem, 0.2rem, left, -2.2rem);
}
\ No newline at end of file
diff --git a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
index 407db1a7..a0359b5a 100644
--- a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
@@ -19,6 +19,7 @@ const HotkeysBoxContainer = () => {
label="Toggle active input box"
hotkey_id="toggle_active_vrct"
value={currentHotkeys.data}
+ state={currentHotkeys.state}
setHotkeys={setHotkeys}
/>
diff --git a/src-ui/logics/configs/hotkeys/useHotkeys.js b/src-ui/logics/configs/hotkeys/useHotkeys.js
index 5349b33b..1da14fb6 100644
--- a/src-ui/logics/configs/hotkeys/useHotkeys.js
+++ b/src-ui/logics/configs/hotkeys/useHotkeys.js
@@ -1,24 +1,23 @@
import { useStore_Hotkeys } from "@store";
-// import { useStdoutToPython } from "@logics/useStdoutToPython";
+import { useStdoutToPython } from "@logics/useStdoutToPython";
export const useHotkeys = () => {
- // const { asyncStdoutToPython } = useStdoutToPython();
+ const { asyncStdoutToPython } = useStdoutToPython();
const { currentHotkeys, updateHotkeys, pendingHotkeys } = useStore_Hotkeys();
const getHotkeys = () => {
- // pendingHotkeys();
- // asyncStdoutToPython("/get/data/osc_ip_address");
+ pendingHotkeys();
+ asyncStdoutToPython("/get/data/hotkeys");
};
const setHotkeys = (hotkeys) => {
- updateHotkeys(hotkeys);
- // pendingHotkeys();
- // asyncStdoutToPython("/set/data/osc_ip_address", osc_ip_address);
+ pendingHotkeys();
+ asyncStdoutToPython("/set/data/hotkeys", hotkeys);
};
return {
currentHotkeys,
- // getHotkeys,
+ getHotkeys,
updateHotkeys,
setHotkeys,
};
diff --git a/src-ui/logics/useReceiveRoutes.js b/src-ui/logics/useReceiveRoutes.js
index 4234fe23..030a199b 100644
--- a/src-ui/logics/useReceiveRoutes.js
+++ b/src-ui/logics/useReceiveRoutes.js
@@ -68,6 +68,7 @@ import {
useIsEnabledOverlayLargeLog,
useOverlayLargeLogSettings,
useOverlayShowOnlyTranslatedMessages,
+ useHotkeys,
useOscIpAddress,
useOscPort,
} from "@logics_configs";
@@ -168,6 +169,8 @@ export const useReceiveRoutes = () => {
const { updateIsEnabledOverlayLargeLog } = useIsEnabledOverlayLargeLog();
const { updateOverlayShowOnlyTranslatedMessages } = useOverlayShowOnlyTranslatedMessages();
+ const { updateHotkeys } = useHotkeys();
+
const { updateOscIpAddress } = useOscIpAddress();
const { updateOscPort } = useOscPort();
@@ -458,6 +461,10 @@ export const useReceiveRoutes = () => {
"/set/enable/send_received_message_to_vrc": updateEnableSendReceivedMessageToVrc,
"/set/disable/send_received_message_to_vrc": updateEnableSendReceivedMessageToVrc,
+ // Hotkeys
+ "/get/data/hotkeys": updateHotkeys,
+ "/set/data/hotkeys": updateHotkeys,
+
// Advanced Settings
"/get/data/osc_ip_address": updateOscIpAddress,
"/set/data/osc_ip_address": updateOscIpAddress,
From bac7bb15d365d62a76d7f8fbf4f862b96ec9fdba Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 17 Jan 2025 02:41:27 +0900
Subject: [PATCH 15/54] [Update] Add hotkeys main functions
---
locales/en.yml | 10 +++
locales/ja.yml | 4 +
src-python/config.py | 5 +-
.../GlobalHotKeyController.jsx | 80 ++++++++++++-------
.../hotkeys_entry/HotkeysEntry.jsx | 10 ++-
.../setting_box/hotkeys/Hotkeys.jsx | 30 ++++++-
.../setting_box/hotkeys/Hotkeys.module.scss | 2 +-
.../message_input_box/MessageInputBox.jsx | 2 +-
src-ui/logics/configs/hotkeys/useHotkeys.js | 8 +-
src-ui/logics/main/useMainFunction.js | 20 ++++-
src-ui/store.js | 31 +++----
11 files changed, 145 insertions(+), 57 deletions(-)
diff --git a/locales/en.yml b/locales/en.yml
index 438af71e..3ef81b30 100644
--- a/locales/en.yml
+++ b/locales/en.yml
@@ -258,6 +258,16 @@ config_page:
label: Send Received Message To VRChat
desc: Send the message you received from the speaker's sound to VRChat's chatbox.
+ hotkeys:
+ toggle_vrct_visibility:
+ label: Toggle VRCT Visibility
+ toggle_translation:
+ label: Toggle Translation
+ toggle_transcription_send:
+ label: Toggle Voice2Chatbox
+ toggle_transcription_receive:
+ label: Toggle Speaker2Log
+
advanced_settings:
osc_ip_address:
label: OSC IP Address
diff --git a/locales/ja.yml b/locales/ja.yml
index 97784185..94abb3d1 100644
--- a/locales/ja.yml
+++ b/locales/ja.yml
@@ -255,6 +255,10 @@ config_page:
label: 受信したメッセージをVRChatに送信する
desc: スピーカーから聞き取り、文字起こしされたメッセージをVRChatに送信します。
+ hotkeys:
+ toggle_vrct_visibility:
+ label: VRCTの最小化/アクティブ化の切り替え
+
advanced_settings:
osc_ip_address:
label: OSC IP Address
diff --git a/src-python/config.py b/src-python/config.py
index 54fe37fd..15d0aacb 100644
--- a/src-python/config.py
+++ b/src-python/config.py
@@ -1040,7 +1040,10 @@ class Config:
self._MIC_MAX_PHRASES = 10
self._MIC_WORD_FILTER = []
self._HOTKEYS = {
- "toggle_active_vrct": None,
+ "toggle_vrct_visibility": None,
+ "toggle_translation": None,
+ "toggle_transcription_send": None,
+ "toggle_transcription_receive": None,
}
self._MIC_AVG_LOGPROB = -0.8
self._MIC_NO_SPEECH_PROB = 0.6
diff --git a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
index e3b8474a..f21a2cee 100644
--- a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
+++ b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
@@ -3,6 +3,7 @@ import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalSho
import { useEffect } from "react";
import { store } from "@store";
import { useHotkeys } from "@logics_configs";
+import { useMainFunction } from "@logics_main";
// 修飾キーのパースを行う関数
const parseHotkey = (hotkeyString) => {
@@ -22,40 +23,65 @@ const parseHotkey = (hotkeyString) => {
export const GlobalHotKeyController = () => {
const { currentHotkeys } = useHotkeys();
+ const {
+ toggleTranslation,
+ toggleTranscriptionSend,
+ toggleTranscriptionReceive,
+ } = useMainFunction();
+
useEffect(() => {
const registerShortcuts = async () => {
- const shortcut_raw = currentHotkeys.data.toggle_active_vrct;
- console.log(shortcut_raw);
-
- if (!shortcut_raw) {
- console.warn("No hotkey defined.");
- return;
- }
-
- const shortcut = parseHotkey(shortcut_raw);
-
try {
// 既存のショートカットをすべて解除
await unregisterAll();
- // 新しいショートカットを登録
- const isAlreadyRegistered = await isRegistered(shortcut);
- if (!isAlreadyRegistered) {
- await register(shortcut, async () => {
- console.log(`Shortcut "${shortcut}" triggered, setting focus.`);
- const minimized = await appWindow.isMinimized();
- if (minimized === true) {
- appWindow.unminimize();
- await appWindow.setFocus();
- store.text_area_ref.current?.focus();
- } else {
- appWindow.minimize();
- }
- });
- console.log(`Registered global shortcut: ${shortcut}`);
+ const hotkeyEntries = Object.entries(currentHotkeys.data);
+
+ for (const [actionKey, hotkeyRaw] of hotkeyEntries) {
+ if (!hotkeyRaw) continue;
+
+ const shortcut = parseHotkey(hotkeyRaw);
+ const isAlreadyRegistered = await isRegistered(shortcut);
+
+ if (!isAlreadyRegistered) {
+ await register(shortcut, async () => {
+ console.log(`Shortcut for "${actionKey}" triggered.`);
+
+ switch (actionKey) {
+ case "toggle_vrct_visibility": {
+ const minimized = await appWindow.isMinimized();
+ if (minimized) {
+ appWindow.unminimize();
+ await appWindow.setFocus();
+ store.text_area_ref.current?.focus();
+ } else {
+ appWindow.minimize();
+ }
+ break;
+ }
+ case "toggle_translation": {
+ toggleTranslation();
+ break;
+ }
+ case "toggle_transcription_send": {
+ toggleTranscriptionSend();
+ break;
+ }
+ case "toggle_transcription_receive": {
+ toggleTranscriptionReceive();
+ break;
+ }
+ default: {
+ console.warn(`No handler defined for action: ${actionKey}`);
+ break;
+ }
+ }
+ });
+ console.log(`Registered global shortcut: ${shortcut} for action: ${actionKey}`);
+ }
}
} catch (error) {
- console.error("Failed to register global shortcut:", error);
+ console.error("Failed to register global shortcuts:", error);
}
};
@@ -67,7 +93,7 @@ export const GlobalHotKeyController = () => {
console.error("Failed to unregister shortcuts:", error);
});
};
- }, [currentHotkeys.data.toggle_active_vrct]); // 監視対象を明確に指定
+ }, [currentHotkeys.data]); // 監視対象を全体に変更
return null;
};
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
index 21a874a0..1e71a069 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
@@ -17,8 +17,6 @@ export const HotkeysEntry = (props) => {
const init_display_value = props.value[props.hotkey_id] ? props.value[props.hotkey_id].join(" + ") : "";
setDisplayValue(init_display_value);
}, []);
- console.log(props.value[props.hotkey_id]);
-
const updateHotkeys = (keys) => {
entryRef.current.blur();
@@ -35,9 +33,10 @@ export const HotkeysEntry = (props) => {
const keys = [];
const nonModifierKeys = [];
- ["Ctrl", "Shift", "Alt", "Super"].forEach((modKey) => {
+ ["Ctrl", "Shift", "Alt", "Meta"].forEach((modKey) => {
if (event[`${modKey.toLowerCase()}Key`] && !keys.includes(modKey)) {
- keys.push(modKey);
+ let register_mod_key = (modKey === "Meta") ? "Super" : modKey;
+ keys.push(register_mod_key);
}
});
@@ -80,6 +79,9 @@ export const HotkeysEntry = (props) => {
);
if (hasNonModifierKeys) {
updateHotkeys(keysRef.current);
+ } else {
+ const display_value = props.value[props.hotkey_id] ? props.value[props.hotkey_id].join(" + ") : "";
+ setDisplayValue(display_value);
}
}
};
diff --git a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
index a0359b5a..2fe0116d 100644
--- a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
@@ -1,7 +1,7 @@
import { useHotkeys } from "@logics_configs";
import styles from "./Hotkeys.module.scss";
import { HotkeysEntryContainer } from "../_templates/Templates";
-
+import { useTranslation } from "react-i18next";
export const Hotkeys = () => {
return (
@@ -11,13 +11,35 @@ export const Hotkeys = () => {
};
const HotkeysBoxContainer = () => {
+ const { t } = useTranslation();
const { currentHotkeys, setHotkeys } = useHotkeys();
+
return (
+
+
+
{
const onSubmitFunction = (e) => {
e.preventDefault();
- appWindow.minimize();
+ // appWindow.minimize();
if (!currentMessageInputValue.data.trim()) return updateMessageInputValue("");
diff --git a/src-ui/logics/configs/hotkeys/useHotkeys.js b/src-ui/logics/configs/hotkeys/useHotkeys.js
index 1da14fb6..65ea3448 100644
--- a/src-ui/logics/configs/hotkeys/useHotkeys.js
+++ b/src-ui/logics/configs/hotkeys/useHotkeys.js
@@ -12,7 +12,13 @@ export const useHotkeys = () => {
const setHotkeys = (hotkeys) => {
pendingHotkeys();
- asyncStdoutToPython("/set/data/hotkeys", hotkeys);
+ const send_obj = {
+ ...currentHotkeys.data,
+ ...hotkeys,
+ };
+ asyncStdoutToPython("/set/data/hotkeys", send_obj);
+
+
};
return {
diff --git a/src-ui/logics/main/useMainFunction.js b/src-ui/logics/main/useMainFunction.js
index 14b1e923..9345f090 100644
--- a/src-ui/logics/main/useMainFunction.js
+++ b/src-ui/logics/main/useMainFunction.js
@@ -6,7 +6,7 @@ import {
useStore_TranscriptionReceiveStatus,
useStore_ForegroundStatus,
} from "@store";
-
+import { useCallback } from "react";
import { useStdoutToPython } from "@logics/useStdoutToPython";
export const useMainFunction = () => {
@@ -40,7 +40,11 @@ export const useMainFunction = () => {
asyncStdoutToPython("/set/disable/translation");
}
};
- const toggleTranslation = () => setTranslation(!currentTranslationStatus.data);
+ const toggleTranslation = () => {
+ updateTranslationStatus(prev_state => {
+ if (prev_state.state === "ok") setTranslation(!prev_state.data);
+ }, { set_state: "pending" });
+ };
const setTranscriptionSend = (to_enable) => {
pendingTranscriptionSendStatus();
@@ -50,7 +54,11 @@ export const useMainFunction = () => {
asyncStdoutToPython("/set/disable/transcription_send");
}
};
- const toggleTranscriptionSend = () => setTranscriptionSend(!currentTranscriptionSendStatus.data);
+ const toggleTranscriptionSend = () => {
+ updateTranscriptionSendStatus(prev_state => {
+ if (prev_state.state === "ok") setTranscriptionSend(!prev_state.data);
+ }, { set_state: "pending" });
+ };
const setTranscriptionReceive = (to_enable) => {
pendingTranscriptionReceiveStatus();
@@ -60,7 +68,11 @@ export const useMainFunction = () => {
asyncStdoutToPython("/set/disable/transcription_receive");
}
};
- const toggleTranscriptionReceive = () => setTranscriptionReceive(!currentTranscriptionReceiveStatus.data);
+ const toggleTranscriptionReceive = () => {
+ updateTranscriptionReceiveStatus(prev_state => {
+ if (prev_state.state === "ok") setTranscriptionReceive(!prev_state.data);
+ }, { set_state: "pending" });
+ };
const toggleForeground = () => {
diff --git a/src-ui/store.js b/src-ui/store.js
index 53d30ed5..24043576 100644
--- a/src-ui/store.js
+++ b/src-ui/store.js
@@ -55,20 +55,20 @@ const createAtomWithHook = (initialValue, base_name, options) => {
});
};
- const updateAtom = (payload) => {
+ const updateAtom = (payload, options = {}) => {
+ const { remain_state = false, set_state } = options;
+
setAtom((currentValue) => {
- if (typeof payload === "function") {
- const updated_data = payload(currentValue);
- return {
- state: "ok",
- data: updated_data,
- };
- } else {
- return {
- state: "ok",
- data: payload,
- };
- }
+ const new_state = set_state ?? (remain_state ? currentValue.state : "ok");
+
+ const updated_data = typeof payload === "function"
+ ? payload(currentValue)
+ : payload;
+
+ return {
+ state: new_state,
+ data: updated_data,
+ };
});
};
@@ -266,7 +266,10 @@ export const { atomInstance: Atom_EnableSendReceivedMessageToVrc, useHook: useSt
// Hotkeys
export const { atomInstance: Atom_Hotkeys, useHook: useStore_Hotkeys } = createAtomWithHook({
- toggle_active_vrct: null,
+ toggle_vrct_visibility: null,
+ toggle_translation: null,
+ toggle_transcription_send: null,
+ toggle_transcription_receive: null,
}, "Hotkeys");
// Advanced Settings
From 04f7c1f556841766b7602ac65cf80497ec8dc7fb Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 17 Jan 2025 03:59:32 +0900
Subject: [PATCH 16/54] [Update] Prevent hotkeys function while opening config
page and register the hotkeys when closed.
---
src-ui/app/App.jsx | 2 -
.../ConfigPageCloseTriggerController.jsx | 6 ++
.../GlobalHotKeyController.jsx | 99 -------------------
src-ui/app/_app_controllers/index.js | 1 -
src-ui/logics/configs/hotkeys/useHotkeys.js | 79 ++++++++++++++-
5 files changed, 84 insertions(+), 103 deletions(-)
delete mode 100644 src-ui/app/_app_controllers/GlobalHotKeyController.jsx
diff --git a/src-ui/app/App.jsx b/src-ui/app/App.jsx
index 60a3effe..de37abf8 100644
--- a/src-ui/app/App.jsx
+++ b/src-ui/app/App.jsx
@@ -6,7 +6,6 @@ import {
import {
KeyEventController,
- GlobalHotKeyController,
StartPythonController,
UiLanguageController,
ConfigPageCloseTriggerController,
@@ -33,7 +32,6 @@ export const App = () => {
return (
-
diff --git a/src-ui/app/_app_controllers/ConfigPageCloseTriggerController.jsx b/src-ui/app/_app_controllers/ConfigPageCloseTriggerController.jsx
index 7705aecc..c04e2a1a 100644
--- a/src-ui/app/_app_controllers/ConfigPageCloseTriggerController.jsx
+++ b/src-ui/app/_app_controllers/ConfigPageCloseTriggerController.jsx
@@ -9,6 +9,8 @@ import {
useMainFunction,
} from "@logics_main";
+import { useHotkeys } from "@logics_configs";
+
import { useStore_MainFunctionsStateMemory } from "@store";
export const ConfigPageCloseTriggerController = () => {
@@ -27,6 +29,8 @@ export const ConfigPageCloseTriggerController = () => {
volumeCheckStop_Speaker,
} = useVolume();
+ const { registerShortcuts, unregisterAll } = useHotkeys();
+
const memorizeLatestMainFunctionsState = () => {
updateMainFunctionsStateMemory({
@@ -43,9 +47,11 @@ export const ConfigPageCloseTriggerController = () => {
useEffect(() => {
if (currentIsOpenedConfigPage.data === true) { // When config page is opened.
memorizeLatestMainFunctionsState();
+ unregisterAll();
if (currentTranscriptionSendStatus.data === true) setTranscriptionSend(false);
if (currentTranscriptionReceiveStatus.data === true) setTranscriptionReceive(false);
} else if (currentIsOpenedConfigPage.data === false) { // When config page is closed.
+ registerShortcuts();
if (currentMicThresholdCheckStatus.data === true) volumeCheckStop_Mic();
if (currentSpeakerThresholdCheckStatus.data === true) volumeCheckStop_Speaker();
restoreMainFunctionState();
diff --git a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
deleted file mode 100644
index f21a2cee..00000000
--- a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { appWindow } from "@tauri-apps/api/window";
-import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut";
-import { useEffect } from "react";
-import { store } from "@store";
-import { useHotkeys } from "@logics_configs";
-import { useMainFunction } from "@logics_main";
-
-// 修飾キーのパースを行う関数
-const parseHotkey = (hotkeyString) => {
- const keyMap = {
- Ctrl: "Control",
- Alt: "Alt",
- Shift: "Shift",
- Meta: "Super",
- };
-
- // 入力文字列を分解して対応するキーを再結合
- return hotkeyString
- .map((key) => keyMap[key] || key) // 修飾キーをマップし、その他はそのまま
- .join("+");
-};
-
-export const GlobalHotKeyController = () => {
- const { currentHotkeys } = useHotkeys();
-
- const {
- toggleTranslation,
- toggleTranscriptionSend,
- toggleTranscriptionReceive,
- } = useMainFunction();
-
- useEffect(() => {
- const registerShortcuts = async () => {
- try {
- // 既存のショートカットをすべて解除
- await unregisterAll();
-
- const hotkeyEntries = Object.entries(currentHotkeys.data);
-
- for (const [actionKey, hotkeyRaw] of hotkeyEntries) {
- if (!hotkeyRaw) continue;
-
- const shortcut = parseHotkey(hotkeyRaw);
- const isAlreadyRegistered = await isRegistered(shortcut);
-
- if (!isAlreadyRegistered) {
- await register(shortcut, async () => {
- console.log(`Shortcut for "${actionKey}" triggered.`);
-
- switch (actionKey) {
- case "toggle_vrct_visibility": {
- const minimized = await appWindow.isMinimized();
- if (minimized) {
- appWindow.unminimize();
- await appWindow.setFocus();
- store.text_area_ref.current?.focus();
- } else {
- appWindow.minimize();
- }
- break;
- }
- case "toggle_translation": {
- toggleTranslation();
- break;
- }
- case "toggle_transcription_send": {
- toggleTranscriptionSend();
- break;
- }
- case "toggle_transcription_receive": {
- toggleTranscriptionReceive();
- break;
- }
- default: {
- console.warn(`No handler defined for action: ${actionKey}`);
- break;
- }
- }
- });
- console.log(`Registered global shortcut: ${shortcut} for action: ${actionKey}`);
- }
- }
- } catch (error) {
- console.error("Failed to register global shortcuts:", error);
- }
- };
-
- registerShortcuts();
-
- // クリーンアップ関数でショートカットを解除
- return () => {
- unregisterAll().catch((error) => {
- console.error("Failed to unregister shortcuts:", error);
- });
- };
- }, [currentHotkeys.data]); // 監視対象を全体に変更
-
- return null;
-};
diff --git a/src-ui/app/_app_controllers/index.js b/src-ui/app/_app_controllers/index.js
index 29576a84..abe6f018 100644
--- a/src-ui/app/_app_controllers/index.js
+++ b/src-ui/app/_app_controllers/index.js
@@ -1,5 +1,4 @@
export { KeyEventController } from "./KeyEventController";
-export { GlobalHotKeyController } from "./GlobalHotKeyController";
export { StartPythonController } from "./StartPythonController";
export { UiLanguageController } from "./UiLanguageController";
export { ConfigPageCloseTriggerController } from "./ConfigPageCloseTriggerController";
diff --git a/src-ui/logics/configs/hotkeys/useHotkeys.js b/src-ui/logics/configs/hotkeys/useHotkeys.js
index 65ea3448..358dd183 100644
--- a/src-ui/logics/configs/hotkeys/useHotkeys.js
+++ b/src-ui/logics/configs/hotkeys/useHotkeys.js
@@ -1,9 +1,19 @@
-import { useStore_Hotkeys } from "@store";
+import { appWindow } from "@tauri-apps/api/window";
+
+import { store, useStore_Hotkeys } from "@store";
import { useStdoutToPython } from "@logics/useStdoutToPython";
+import { useMainFunction } from "@logics_main";
+import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut";
export const useHotkeys = () => {
const { asyncStdoutToPython } = useStdoutToPython();
const { currentHotkeys, updateHotkeys, pendingHotkeys } = useStore_Hotkeys();
+ const {
+ toggleTranslation,
+ toggleTranscriptionSend,
+ toggleTranscriptionReceive,
+ } = useMainFunction();
+
const getHotkeys = () => {
pendingHotkeys();
@@ -17,8 +27,58 @@ export const useHotkeys = () => {
...hotkeys,
};
asyncStdoutToPython("/set/data/hotkeys", send_obj);
+ };
+ const registerShortcuts = async () => {
+ try {
+ await unregisterAll();
+ const hotkeyEntries = Object.entries(currentHotkeys.data);
+
+ for (const [actionKey, hotkeyRaw] of hotkeyEntries) {
+ if (!hotkeyRaw) continue;
+
+ const shortcut = parseHotkey(hotkeyRaw);
+ const isAlreadyRegistered = await isRegistered(shortcut);
+
+ if (!isAlreadyRegistered) {
+ await register(shortcut, async () => {
+ switch (actionKey) {
+ case "toggle_vrct_visibility": {
+ const minimized = await appWindow.isMinimized();
+ if (minimized) {
+ appWindow.unminimize();
+ await appWindow.setFocus();
+ store.text_area_ref.current?.focus();
+ } else {
+ appWindow.minimize();
+ }
+ break;
+ }
+ case "toggle_translation": {
+ toggleTranslation();
+ break;
+ }
+ case "toggle_transcription_send": {
+ toggleTranscriptionSend();
+ break;
+ }
+ case "toggle_transcription_receive": {
+ toggleTranscriptionReceive();
+ break;
+ }
+ default: {
+ console.warn(`No handler defined for action: ${actionKey}`);
+ break;
+ }
+ }
+ });
+ // console.log(`Registered global shortcut: ${shortcut} for action: ${actionKey}`);
+ }
+ }
+ } catch (error) {
+ console.error("Failed to register global shortcuts:", error);
+ }
};
return {
@@ -26,5 +86,22 @@ export const useHotkeys = () => {
getHotkeys,
updateHotkeys,
setHotkeys,
+ registerShortcuts,
+ unregisterAll,
};
+};
+
+// 修飾キーのパースを行う関数
+const parseHotkey = (hotkeyString) => {
+ const keyMap = {
+ Ctrl: "Control",
+ Alt: "Alt",
+ Shift: "Shift",
+ Meta: "Super",
+ };
+
+
+ return hotkeyString
+ .map((key) => keyMap[key] || key)
+ .join("+");
};
\ No newline at end of file
From 21235068f74631bc9932bebea1dc7ba35a787e6d Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Fri, 17 Jan 2025 04:33:15 +0900
Subject: [PATCH 17/54] [Update] Add Japanese and add breakpoint.
---
locales/en.yml | 6 +++---
locales/ja.yml | 7 +++++++
.../setting_section/setting_box/_templates/Templates.jsx | 2 +-
.../setting_section/setting_box/hotkeys/Hotkeys.jsx | 6 +++---
4 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/locales/en.yml b/locales/en.yml
index 3ef81b30..73ba1ed0 100644
--- a/locales/en.yml
+++ b/locales/en.yml
@@ -262,11 +262,11 @@ config_page:
toggle_vrct_visibility:
label: Toggle VRCT Visibility
toggle_translation:
- label: Toggle Translation
+ label: Toggle {{translation}}
toggle_transcription_send:
- label: Toggle Voice2Chatbox
+ label: Toggle {{transcription_send}}
toggle_transcription_receive:
- label: Toggle Speaker2Log
+ label: Toggle {{transcription_receive}}
advanced_settings:
osc_ip_address:
diff --git a/locales/ja.yml b/locales/ja.yml
index 94abb3d1..1218ef08 100644
--- a/locales/ja.yml
+++ b/locales/ja.yml
@@ -92,6 +92,7 @@ config_page:
translation: 翻訳
transcription: 音声認識
others: その他
+ hotkeys: ホットキー
advanced_settings: 高度な設定
device:
@@ -258,6 +259,12 @@ config_page:
hotkeys:
toggle_vrct_visibility:
label: VRCTの最小化/アクティブ化の切り替え
+ toggle_translation:
+ label: '{{translation}}機能切り替え'
+ toggle_transcription_send:
+ label: '{{transcription_send}}機能切り替え'
+ toggle_transcription_receive:
+ label: '{{transcription_receive}}機能切り替え'
advanced_settings:
osc_ip_address:
diff --git a/src-ui/app/config_page/setting_section/setting_box/_templates/Templates.jsx b/src-ui/app/config_page/setting_section/setting_box/_templates/Templates.jsx
index d47e5842..716a15c9 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_templates/Templates.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_templates/Templates.jsx
@@ -77,7 +77,7 @@ export const EntryContainer = (props) => (
);
export const HotkeysEntryContainer = (props) => (
-
+
);
export const RadioButtonContainer = (props) => (
diff --git a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
index 2fe0116d..33d57923 100644
--- a/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/hotkeys/Hotkeys.jsx
@@ -24,21 +24,21 @@ const HotkeysBoxContainer = () => {
setHotkeys={setHotkeys}
/>
Date: Fri, 17 Jan 2025 05:18:09 +0900
Subject: [PATCH 18/54] [Update] Prevent to register the same hotkey that is
already in use.
---
.../hotkeys_entry/HotkeysEntry.jsx | 3 +-
src-ui/logics/configs/hotkeys/useHotkeys.js | 36 +++++++++++++++----
2 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
index 1e71a069..750095e0 100644
--- a/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
+++ b/src-ui/app/config_page/setting_section/setting_box/_components/hotkeys_entry/HotkeysEntry.jsx
@@ -20,7 +20,8 @@ export const HotkeysEntry = (props) => {
const updateHotkeys = (keys) => {
entryRef.current.blur();
- props.setHotkeys({ [props.hotkey_id]: keys });
+ const result = props.setHotkeys({ [props.hotkey_id]: keys });
+ if (result === false) setDisplayValue("");
};
const processKey = (key) => {
diff --git a/src-ui/logics/configs/hotkeys/useHotkeys.js b/src-ui/logics/configs/hotkeys/useHotkeys.js
index 358dd183..a80cfb78 100644
--- a/src-ui/logics/configs/hotkeys/useHotkeys.js
+++ b/src-ui/logics/configs/hotkeys/useHotkeys.js
@@ -2,6 +2,7 @@ import { appWindow } from "@tauri-apps/api/window";
import { store, useStore_Hotkeys } from "@store";
import { useStdoutToPython } from "@logics/useStdoutToPython";
+import { useNotificationStatus } from "@logics_common";
import { useMainFunction } from "@logics_main";
import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut";
@@ -19,14 +20,37 @@ export const useHotkeys = () => {
pendingHotkeys();
asyncStdoutToPython("/get/data/hotkeys");
};
+ const { showNotification_Success, showNotification_Error, closeNotification } = useNotificationStatus();
const setHotkeys = (hotkeys) => {
pendingHotkeys();
- const send_obj = {
- ...currentHotkeys.data,
- ...hotkeys,
- };
- asyncStdoutToPython("/set/data/hotkeys", send_obj);
+
+ const updatedHotkeys = { ...currentHotkeys.data, ...hotkeys };
+ const usedShortcuts = new Set();
+ const conflictingKeys = [];
+
+ for (const [actionKey, hotkey] of Object.entries(updatedHotkeys)) {
+ if (!hotkey) continue;
+
+ const shortcut = parseHotkey(hotkey);
+ if (usedShortcuts.has(shortcut)) {
+ showNotification_Error(`The hotkey ${shortcut} is already in use.`);
+ updatedHotkeys[actionKey] = null;
+ conflictingKeys.push(actionKey);
+ } else {
+ usedShortcuts.add(shortcut);
+ }
+ }
+
+ updateHotkeys(updatedHotkeys);
+
+ if (conflictingKeys.length === 0) {
+ asyncStdoutToPython("/set/data/hotkeys", updatedHotkeys);
+ closeNotification();
+ return true;
+ } else {
+ return false;
+ }
};
const registerShortcuts = async () => {
@@ -73,7 +97,7 @@ export const useHotkeys = () => {
}
}
});
- // console.log(`Registered global shortcut: ${shortcut} for action: ${actionKey}`);
+
}
}
} catch (error) {
From 2c6e952ff9023c8cc6e67ccf26d3aea8db0016f4 Mon Sep 17 00:00:00 2001
From: misyaguziya <53165965+misyaguziya@users.noreply.github.com>
Date: Sun, 19 Jan 2025 15:16:01 +0900
Subject: [PATCH 19/54] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Add=20Fun?=
=?UTF-8?q?ding=20URL=20(patreon,=20ko-fi=20)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/FUNDING.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index cc1700ef..a9178174 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,13 +1,13 @@
# These are supported funding model platforms
github: [misyaguziya]
-patreon: # Replace with a single Patreon username
+patreon: vrct_dev
open_collective: # Replace with a single Open Collective username
-ko_fi: # Replace with a single Ko-fi username
+ko_fi: vrct_dev
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
-custom: ["https://misyaguziya.booth.pm/", "https://vrct-dev.fanbox.cc/"]
+custom: ["https://misyaguziya.booth.pm", "https://vrct-dev.fanbox.cc"]
From 16b41c8102c88b7fd41954200ee2461a8600dd43 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Mon, 20 Jan 2025 12:06:05 +0900
Subject: [PATCH 20/54] [bugfix] to register hotkeys when start up the
software.(to unregisterAll when the software is updating)
---
src-ui/app/App.jsx | 2 ++
.../GlobalHotKeyController.jsx | 22 +++++++++++++++++++
src-ui/app/_app_controllers/index.js | 1 +
3 files changed, 25 insertions(+)
create mode 100644 src-ui/app/_app_controllers/GlobalHotKeyController.jsx
diff --git a/src-ui/app/App.jsx b/src-ui/app/App.jsx
index de37abf8..c36f7d31 100644
--- a/src-ui/app/App.jsx
+++ b/src-ui/app/App.jsx
@@ -7,6 +7,7 @@ import {
import {
KeyEventController,
StartPythonController,
+ GlobalHotKeyController,
UiLanguageController,
ConfigPageCloseTriggerController,
UiSizeController,
@@ -33,6 +34,7 @@ export const App = () => {
+
diff --git a/src-ui/app/_app_controllers/GlobalHotKeyController.jsx b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
new file mode 100644
index 00000000..d687c138
--- /dev/null
+++ b/src-ui/app/_app_controllers/GlobalHotKeyController.jsx
@@ -0,0 +1,22 @@
+import { useEffect } from "react";
+import { useHotkeys } from "@logics_configs";
+import { useIsBackendReady, useIsSoftwareUpdating } from "@logics_common";
+
+export const GlobalHotKeyController = () => {
+ const { currentIsBackendReady } = useIsBackendReady();
+ const { currentIsSoftwareUpdating } = useIsSoftwareUpdating();
+ const { registerShortcuts, unregisterAll } = useHotkeys();
+
+ useEffect(() => {
+ const is_backend_ready = currentIsBackendReady.data;
+ const is_software_updating = currentIsSoftwareUpdating.data;
+
+ if (is_backend_ready && !is_software_updating) {
+ registerShortcuts();
+ } else if (is_software_updating) {
+ unregisterAll();
+ }
+ }, [currentIsBackendReady.data, currentIsSoftwareUpdating.data]);
+
+ return null;
+};
\ No newline at end of file
diff --git a/src-ui/app/_app_controllers/index.js b/src-ui/app/_app_controllers/index.js
index abe6f018..547c78f4 100644
--- a/src-ui/app/_app_controllers/index.js
+++ b/src-ui/app/_app_controllers/index.js
@@ -1,5 +1,6 @@
export { KeyEventController } from "./KeyEventController";
export { StartPythonController } from "./StartPythonController";
+export { GlobalHotKeyController } from "./GlobalHotKeyController";
export { UiLanguageController } from "./UiLanguageController";
export { ConfigPageCloseTriggerController } from "./ConfigPageCloseTriggerController";
export { UiSizeController } from "./UiSizeController";
From 93a6d304c015f3fcbccd5ac5db2515d7f0b1f209 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Mon, 20 Jan 2025 12:27:30 +0900
Subject: [PATCH 21/54] [Update] Hotkeys: Add prevent the default function that
when pressed F10, F12.
---
src-ui/app/_app_controllers/KeyEventController.jsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src-ui/app/_app_controllers/KeyEventController.jsx b/src-ui/app/_app_controllers/KeyEventController.jsx
index 654f8499..57260503 100644
--- a/src-ui/app/_app_controllers/KeyEventController.jsx
+++ b/src-ui/app/_app_controllers/KeyEventController.jsx
@@ -4,7 +4,9 @@ export const KeyEventController = () => {
useEffect(() => {
const handleKeydown = (event) => {
if (
- event.key === "F5" ||
+ event.key === "F5" || // Page reload
+ event.key === "F10" || // Focus thw window menu (maybe)
+ event.key === "F12" || // Open dev tool
(event.ctrlKey && event.key === "r") ||
(event.metaKey && event.key === "r")
) {
From a1be11ae24195550cb113ca5611058953c4ba2ca Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Tue, 21 Jan 2025 05:41:53 +0900
Subject: [PATCH 22/54] [Chore] Change a new line code.
---
README.ja.md | 2 +-
README.ko.md | 2 +-
README.md | 2 +-
README.zh-Hant.md | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.ja.md b/README.ja.md
index 018f5ead..8677f813 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -3,7 +3,7 @@

[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
[](https://vrct-dev.fanbox.cc/)
diff --git a/README.ko.md b/README.ko.md
index 824a4c4c..c6c94458 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -3,7 +3,7 @@

[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
[](https://vrct-dev.fanbox.cc/)
diff --git a/README.md b/README.md
index 93a7fa5a..25bdcb6b 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@

[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
[](https://vrct-dev.fanbox.cc/)
diff --git a/README.zh-Hant.md b/README.zh-Hant.md
index 4cf5bb36..48dd49a3 100644
--- a/README.zh-Hant.md
+++ b/README.zh-Hant.md
@@ -3,7 +3,7 @@

[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
[](https://vrct-dev.fanbox.cc/)
From 9fc03a7a5ff8aead9d80b919c2a0f3d3d3a72c57 Mon Sep 17 00:00:00 2001
From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com>
Date: Tue, 21 Jan 2025 16:29:25 +0900
Subject: [PATCH 23/54] [Update] Add Support us section and buttons. Change
VRCT logo size and adjust dark/light theme on github.
---
README.ja.md | 50 ++++++++++++++++++++++++++--
README.ko.md | 50 ++++++++++++++++++++++++++--
README.md | 50 ++++++++++++++++++++++++++--
README.zh-Hant.md | 50 ++++++++++++++++++++++++++--
docs/kofi_logo.png | Bin 0 -> 12585 bytes
docs/patreon_logo_black.png | Bin 0 -> 8339 bytes
docs/patreon_logo_white.png | Bin 0 -> 9036 bytes
docs/pixiv_fanbox_black.png | Bin 0 -> 9734 bytes
docs/pixiv_fanbox_white.png | Bin 0 -> 10494 bytes
docs/supporter_section_border_d.png | Bin 0 -> 182 bytes
docs/supporter_section_border_l.png | Bin 0 -> 186 bytes
docs/vrct_logo_black.png | Bin 0 -> 93566 bytes
docs/vrct_logo_white.png | Bin 0 -> 91965 bytes
13 files changed, 188 insertions(+), 12 deletions(-)
create mode 100644 docs/kofi_logo.png
create mode 100644 docs/patreon_logo_black.png
create mode 100644 docs/patreon_logo_white.png
create mode 100644 docs/pixiv_fanbox_black.png
create mode 100644 docs/pixiv_fanbox_white.png
create mode 100644 docs/supporter_section_border_d.png
create mode 100644 docs/supporter_section_border_l.png
create mode 100644 docs/vrct_logo_black.png
create mode 100644 docs/vrct_logo_white.png
diff --git a/README.ja.md b/README.ja.md
index 8677f813..1d7a8c2a 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -1,12 +1,56 @@
-
+
+
+
+
+
+
+
+
+
[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
-[](https://vrct-dev.fanbox.cc/)
+
+
+Become a VRCT Supporter on:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
| [English](./README.md) | **日本語** | [한국어](./README.ko.md) | [繁體中文](./README.zh-Hant.md) |
diff --git a/README.ko.md b/README.ko.md
index c6c94458..ae6fabda 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -1,12 +1,56 @@
-
+
+
+
+
+
+
+
+
+
[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
-[](https://vrct-dev.fanbox.cc/)
+
+
+Become a VRCT Supporter on:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
| [English](./README.md) | [日本語](./README.ja.md) | **한국어** |
diff --git a/README.md b/README.md
index 25bdcb6b..13c563a6 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,56 @@
-
+
+
+
+
+
+
+
+
+
[](https://github.com/misyaguziya/VRCT/releases)
[](https://github.com/misyaguziya/VRCT/releases)
-[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)\
+[](https://github.com/misyaguziya/VRCT/blob/master/LICENSE)
[](https://misyaguziya.booth.pm/items/5155325)
[](https://github.com/sponsors/misyaguziya)
-[](https://vrct-dev.fanbox.cc/)
+
+
+Become a VRCT Supporter on:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
| **English** | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [繁體中文](./README.zh-Hant.md) |
diff --git a/README.zh-Hant.md b/README.zh-Hant.md
index 48dd49a3..ea79a1b1 100644
--- a/README.zh-Hant.md
+++ b/README.zh-Hant.md
@@ -1,12 +1,56 @@