Fix PyInstaller build issues and add right-click edit
## Fixes - Web interface now loads correctly in built app (use sys._MEIPASS for bundled web files) - Macro execution no longer locks up (use pyperclip clipboard for Unicode text support) - Right-click context menu works (use Qt signals instead of fragile parent traversal) ## Changes - web_server.py: Use get_resource_path() for web directory - macro_manager.py: Use clipboard paste for text commands instead of typewrite - gui/main_window.py: Add edit_requested/delete_requested signals to MacroButton - pyproject.toml: Add pyperclip dependency - All .spec files: Add pyperclip to hidden imports 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# FastAPI web server for MacroPad
|
||||
|
||||
import os
|
||||
import sys
|
||||
import asyncio
|
||||
from typing import List, Optional
|
||||
from contextlib import asynccontextmanager
|
||||
@@ -14,6 +15,15 @@ import uvicorn
|
||||
from config import DEFAULT_PORT, VERSION
|
||||
|
||||
|
||||
def get_resource_path(relative_path):
|
||||
"""Get the path to a bundled resource file."""
|
||||
if getattr(sys, 'frozen', False):
|
||||
base_path = sys._MEIPASS
|
||||
else:
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
return os.path.join(base_path, relative_path)
|
||||
|
||||
|
||||
class Command(BaseModel):
|
||||
"""Single command in a macro sequence."""
|
||||
type: str # text, key, hotkey, wait, app
|
||||
@@ -94,12 +104,12 @@ class WebServer:
|
||||
lifespan=lifespan
|
||||
)
|
||||
|
||||
# Serve static files from web directory
|
||||
web_dir = os.path.join(self.app_dir, "web")
|
||||
# Serve static files from web directory (bundled with app)
|
||||
web_dir = get_resource_path("web")
|
||||
if os.path.exists(web_dir):
|
||||
app.mount("/static", StaticFiles(directory=web_dir), name="static")
|
||||
|
||||
# Serve macro images
|
||||
# Serve macro images (user data directory)
|
||||
images_dir = os.path.join(self.app_dir, "macro_images")
|
||||
if os.path.exists(images_dir):
|
||||
app.mount("/images", StaticFiles(directory=images_dir), name="images")
|
||||
|
||||
Reference in New Issue
Block a user