MCPcopy Create free account
hub / github.com/NyarchLinux/DesktopPuppet / PuppetLauncher

Class PuppetLauncher

src/gui_controller.py:106–243  ·  view source on GitHub ↗

Handles launching the puppet process.

Source from the content-addressed store, hash-verified

104
105
106class PuppetLauncher:
107 """Handles launching the puppet process."""
108
109 def __init__(self):
110 self.process = None
111 self.httpd = None
112 self.lockfile = None
113 self.webview_path = None
114 self.models_dir = None
115 self.log_file = None
116
117 # Set paths
118 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
119 self.webview_path = os.path.join(project_root, "avatars", "live2d", "web")
120 self.models_dir = os.path.join(self.webview_path, "models")
121 self.main_py = os.path.join(project_root, "src", "main.py")
122 self.cli_sh = os.path.join(project_root, "src", "cli.sh")
123 self.lockfile = os.path.join(project_root, "src", "nyarchlinux-desktop-puppet.lock")
124
125 def get_available_models(self):
126 """Get list of available models from the models directory."""
127 models = []
128 if not os.path.isdir(self.models_dir):
129 return models
130
131 for root, _, files in os.walk(self.models_dir):
132 for file in files:
133 if file.endswith('.model3.json') or file.endswith('.model.json'):
134 file_name = file.rstrip('.model3.json').rstrip('.model.json')
135 relative_path = os.path.relpath(os.path.join(root, file), self.models_dir)
136 models.append((file_name, relative_path))
137 return models
138
139 def ensure_viewer_installed(self):
140 """Ensure the Live2D viewer is installed."""
141 viewer_path = self.webview_path
142 if not os.path.isdir(viewer_path):
143 return False, "Viewer directory not found"
144 return True, "Viewer installed"
145
146 def start_viewer_webserver(self, model, scale, bg, extra_w, extra_h):
147 """Start the viewer webserver."""
148 folder_path = self.webview_path
149
150 class CustomHTTPRequestHandler(SimpleHTTPRequestHandler):
151 def translate_path(self, path):
152 path = super().translate_path(path)
153 return os.path.join(folder_path, os.path.relpath(path, os.getcwd()))
154 def log_message(self, format, *args):
155 pass # Suppress HTTP logs
156
157 self.httpd = HTTPServer(('127.0.0.1', 0), CustomHTTPRequestHandler)
158 port = self.httpd.server_address[1]
159
160 def run_server():
161 self.httpd.serve_forever()
162
163 thread = threading.Thread(target=run_server, daemon=True)

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected