[Update] クリップボード機能を統合し、コピーとペーストを一度の呼び出しで実行できるように変更

This commit is contained in:
misyaguziya
2026-01-13 21:12:05 +09:00
parent ba0f834fbd
commit 4e5acd4ac3
3 changed files with 15 additions and 67 deletions

View File

@@ -424,8 +424,7 @@ class Controller:
if config.ENABLE_CLIPBOARD is True:
clipboard_message = self.messageFormatter("SEND", translation, message)
model.setCopyToClipboard(clipboard_message)
model.setPasteFromClipboard()
model.setCopyToClipboardAndPasteFromClipboard(clipboard_message)
if model.checkWebSocketServerAlive() is True:
model.websocketSendMessage(
@@ -779,11 +778,6 @@ class Controller:
)
model.updateOverlayLargeLog(overlay_image)
if config.ENABLE_CLIPBOARD is True:
clipboard_message = self.messageFormatter("SEND", translation, message)
model.setCopyToClipboard(clipboard_message)
model.setPasteFromClipboard()
if model.checkWebSocketServerAlive() is True:
model.websocketSendMessage(
{

View File

@@ -1299,11 +1299,11 @@ class Model:
errorLogging()
return False
def setCopyToClipboard(self, text:str) -> bool:
def setCopyToClipboardAndPasteFromClipboard(self, text:str) -> bool:
self.ensure_initialized()
try:
if isinstance(self.clipboard, Clipboard):
self.clipboard.copy(text)
self.clipboard.copy_and_paste(text)
return True
else:
return False
@@ -1311,17 +1311,6 @@ class Model:
errorLogging()
return False
def setPasteFromClipboard(self) -> bool:
self.ensure_initialized()
try:
if isinstance(self.clipboard, Clipboard):
return self.clipboard.paste()
else:
return False
except Exception:
errorLogging()
return False
def telemetryInit(self, enabled: bool, app_version: str):
"""Model 内で Telemetry を初期化"""
self.telemetry.init(enabled=enabled, app_version=app_version)

View File

@@ -139,7 +139,6 @@ def paste_via_pyautogui(countdown: int = 0) -> bool:
class Clipboard:
def __init__(self):
self.is_enabled = True
self._vr_monitor_thread = None
self._stop_monitoring = False
self.app_name = None
@@ -192,47 +191,7 @@ class Clipboard:
printLog(f"Clipboard: Error setting up VR app name: {e}")
self.app_name = None
def enable(self):
"""Enable clipboard functionality. Reinitialize the class."""
printLog("Clipboard: Enabling clipboard functionality.")
self.is_enabled = True
self._initialize()
def disable(self):
"""Disable clipboard functionality. Stop VR monitoring."""
printLog("Clipboard: Disabling clipboard functionality.")
self.is_enabled = False
self._stop_monitoring = True
if self._vr_monitor_thread is not None and self._vr_monitor_thread.is_alive():
self._vr_monitor_thread.join(timeout=1)
self._vr_monitor_thread = None
def copy(self, message: str) -> bool:
"""Copy `message` to clipboard.
Args:
message: Text to copy.
Returns:
True if copy succeeded, False otherwise.
"""
if not self.is_enabled:
return False
return copy_to_clipboard(message)
def paste(self, window_name: str|None = None, countdown: int = 0) -> bool:
"""Focus a window identified by `window_name`, then paste via Ctrl+V.
Args:
window_name: Window title substring or process name to find and focus (Windows only). Required.
countdown: Seconds to wait before sending paste key.
Returns:
True if paste command was sent, False otherwise.
"""
if not self.is_enabled:
return False
def copy_and_paste(self, message: str, window_name: str|None = None, countdown: int = 0) -> bool:
window_name = window_name if window_name is not None else self.app_name
# If window_name is provided, attempt to focus it (Windows only).
@@ -265,11 +224,17 @@ class Clipboard:
# small delay to allow focus to settle
time.sleep(0.2)
# copy
copied = copy_to_clipboard(message)
if not copied:
printLog("copy_and_paste: failed to copy to clipboard")
return False
# paste
pasted = paste_via_pyautogui(countdown)
return bool(pasted)
else:
return False
if __name__ == '__main__':
clipboard = Clipboard()
clipboard.copy("Sample text to copy to clipboard.")
clipboard.paste(window_name=None, countdown=3)
clipboard.copy_and_paste("Sample text to copy to clipboard.", window_name=None, countdown=3)