From 4e07a1ebf01b366821c7b18e80977a942b1a71a8 Mon Sep 17 00:00:00 2001 From: mii443 Date: Fri, 27 Sep 2024 21:13:38 +0900 Subject: [PATCH] add auto skip when outside of VRChat --- package.json | 2 +- release.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 3 ++- src-tauri/src/config.rs | 7 +++++-- src-tauri/src/handler.rs | 10 ++++++++++ src-tauri/tauri.conf.json | 2 +- src/SettingsComponent.tsx | 39 ++++++++++++++++++++++++++------------- src/TitleBar.tsx | 2 +- 9 files changed, 48 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 3d0f241..5dda887 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vrclipboard-ime-gui", "private": true, - "version": "1.8.0", + "version": "1.9.0", "type": "module", "scripts": { "dev": "vite", diff --git a/release.json b/release.json index e61744e..181e76f 100644 --- a/release.json +++ b/release.json @@ -1,5 +1,5 @@ { - "url": "https://r2-vrime.mii.dev/releases/vrclipboard-ime-gui_1.8.0_x64_ja-JP.msi.zip", + "url": "https://r2-vrime.mii.dev/releases/vrclipboard-ime-gui_1.9.0_x64_ja-JP.msi.zip", "version": "1.8.0", "notes": "ログの出力を改善", "pub_date": "2024-09-25T14:51:05+00:00", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1582b7f..a175192 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3903,7 +3903,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vrclipboard-ime-gui" -version = "1.8.0" +version = "1.9.0" dependencies = [ "anyhow", "calc", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 2d4c9ed..1cde628 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vrclipboard-ime-gui" -version = "1.8.0" +version = "1.9.0" description = "VRClipboard IME" authors = ["mii"] edition = "2021" @@ -41,6 +41,7 @@ features = [ "Win32_UI_Input_Ime", "Win32_UI_TextServices", "Win32_UI_Input_KeyboardAndMouse", + "Win32_System_DataExchange", "Win32_UI_WindowsAndMessaging" ] diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs index f7c5633..6ec427b 100644 --- a/src-tauri/src/config.rs +++ b/src-tauri/src/config.rs @@ -24,7 +24,9 @@ pub struct Config { #[serde(default = "bool_true")] pub skip_url: bool, #[serde(default = "bool_false")] - pub use_tsf_reconvert: bool + pub use_tsf_reconvert: bool, + #[serde(default = "bool_true")] + pub skip_on_out_of_vrc: bool, } impl Default for Config { @@ -36,7 +38,8 @@ impl Default for Config { ignore_prefix: true, on_copy_mode: OnCopyMode::ReturnToChatbox, skip_url: true, - use_tsf_reconvert: false + use_tsf_reconvert: false, + skip_on_out_of_vrc: true, } } } diff --git a/src-tauri/src/handler.rs b/src-tauri/src/handler.rs index 38302e6..2987efc 100644 --- a/src-tauri/src/handler.rs +++ b/src-tauri/src/handler.rs @@ -6,6 +6,7 @@ use clipboard_master::{ClipboardHandler, CallbackResult}; use regex::Regex; use rosc::{encoder, OscMessage, OscPacket, OscType}; use tauri::{AppHandle, Manager}; +use windows::Win32::System::DataExchange::GetClipboardOwner; use crate::{config::{Config, OnCopyMode}, conversion::Conversion, tsf_conversion::TsfConversion, Log, STATE}; use anyhow::Result; use tracing::{info, warn, error}; @@ -34,6 +35,10 @@ impl ConversionHandler { } impl ConversionHandler { + fn clipboard_has_owner(&mut self) -> bool { + unsafe { GetClipboardOwner() }.is_ok() + } + fn tsf_conversion(&mut self, contents: &str, config: &Config) -> Result<()> { if contents.chars().count() > 140 { info!("Content exceeds 140 characters, skipping TSF conversion"); @@ -126,6 +131,11 @@ impl ConversionHandler { impl ClipboardHandler for ConversionHandler { fn on_clipboard_change(&mut self) -> CallbackResult { let config = self.get_config(); + if config.skip_on_out_of_vrc && self.clipboard_has_owner() { + info!("Clipboard has owner (maybe from outside of VRChat), skipping conversion"); + return CallbackResult::Next; + } + if let Ok(mut contents) = self.clipboard_ctx.get_contents() { if config.use_tsf_reconvert { if let Err(e) = self.tsf_conversion(&contents, &config) { diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index a11b69f..daad8ee 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -7,7 +7,7 @@ }, "package": { "productName": "vrclipboard-ime-gui", - "version": "1.8.0" + "version": "1.9.0" }, "tauri": { "updater": { diff --git a/src/SettingsComponent.tsx b/src/SettingsComponent.tsx index e027dcf..921f61b 100644 --- a/src/SettingsComponent.tsx +++ b/src/SettingsComponent.tsx @@ -10,6 +10,7 @@ interface Config { on_copy_mode: OnCopyMode; skip_url: boolean; use_tsf_reconvert: boolean; + skip_on_out_of_vrc: boolean; } enum OnCopyMode { @@ -26,7 +27,8 @@ const SettingsComponent = () => { ignore_prefix: false, on_copy_mode: OnCopyMode.ReturnToChatbox, skip_url: true, - use_tsf_reconvert: false + use_tsf_reconvert: false, + skip_on_out_of_vrc: true, }); const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); @@ -48,9 +50,9 @@ const SettingsComponent = () => { } }; - const saveSettings = async () => { + const saveSettings = async (newSettings: Config) => { try { - await invoke('save_settings', { config: settings }); + await invoke('save_settings', { config: newSettings }); alert('設定が正常に保存されました。'); } catch (error) { console.error('Failed to save settings:', error); @@ -60,15 +62,19 @@ const SettingsComponent = () => { const handleChange = (e: React.ChangeEvent) => { const { name, value, type, checked } = e.target; - setSettings(prev => ({ - ...prev, + const newSettings = { + ...settings, [name]: type === 'checkbox' ? checked : value - })); + }; + setSettings(newSettings); + saveSettings(newSettings); }; const handleSelectChange = (value: OnCopyMode) => { - setSettings(prev => ({ ...prev, on_copy_mode: value })); + const newSettings = { ...settings, on_copy_mode: value }; + setSettings(newSettings); setIsOpen(false); + saveSettings(newSettings); }; const handleClickOutside = (event: MouseEvent) => { @@ -195,12 +201,19 @@ const SettingsComponent = () => { Windows10または11を使用している場合は、「以前のバージョンの Microsoft IME を使う」を有効化する必要があります。 - +
+ + +
diff --git a/src/TitleBar.tsx b/src/TitleBar.tsx index a026868..e00813d 100644 --- a/src/TitleBar.tsx +++ b/src/TitleBar.tsx @@ -10,7 +10,7 @@ const TitleBar = () => {
VRClipboard-IME - v1.7.0 + v1.9.0