Skip to content

Commit 4cedc40

Browse files
committed
Stabilize path handling
1 parent bcb498d commit 4cedc40

File tree

1 file changed

+28
-35
lines changed
  • files/4-apps/home/rinkhals/apps/40-moonraker

1 file changed

+28
-35
lines changed

files/4-apps/home/rinkhals/apps/40-moonraker/kobra.py

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ def __init__(self, config):
5959
self.patch_bed_mesh()
6060
self.patch_objects_list()
6161
self.patch_mainsail()
62-
self.patch_gcode_paths()
6362
logging.info('Completed Kobra patching! Yay!')
6463

6564
# Trigger LAN mode warning if needed
@@ -172,39 +171,53 @@ def mqtt_on_message(client, userdata, msg):
172171

173172

174173
def patch_status(self, status):
175-
176174
if self.is_goklipper_running():
177-
if 'print_stats' in status and 'state' in status['print_stats']:
178-
state = status['print_stats']['state']
179-
logging.info(f'[Kobra] Converted Kobra state {state}')
180175

181-
if state.lower() == 'heating':
182-
state = 'printing'
183-
if state.lower() == 'leveling':
184-
state = 'printing'
185-
if state.lower() == 'onpause':
186-
state = 'paused'
176+
if 'print_stats' in status:
177+
if 'state' in status['print_stats']:
178+
# Convert Kobra state
179+
state = status['print_stats']['state']
180+
logging.info(f'[Kobra] Converted Kobra state {state}')
181+
182+
if state.lower() == 'heating':
183+
state = 'printing'
184+
if state.lower() == 'leveling':
185+
state = 'printing'
186+
if state.lower() == 'onpause':
187+
state = 'paused'
188+
189+
status['print_stats']['state'] = state
187190

188-
status['print_stats']['state'] = state
191+
# Inject in 'idle_timeout' for Fluidd
192+
if 'idle_timeout' not in status:
193+
status['idle_timeout'] = {}
189194

190-
if 'idle_timeout' not in status:
191-
status['idle_timeout'] = {}
195+
status['idle_timeout']['state'] = state
196+
197+
if 'filename' in status['print_stats']:
198+
# Remove path prefix from filename
199+
status['print_stats']['filename'] = status['print_stats']['filename'].replace('/useremain/app/gk/gcodes/', '')
192200

193-
status['idle_timeout']['state'] = state
194201
if 'virtual_sdcard' in status:
195202
if 'total_layer' in status['virtual_sdcard']:
203+
# Save layer count for later
196204
self._total_layer = status['virtual_sdcard']['total_layer']
197205

198206
if 'current_layer' in status['virtual_sdcard']:
199207
current_layer = status['virtual_sdcard']['current_layer']
200208

209+
# Inject current and total layer count in 'info' for Mainsail / Fluidd
201210
if 'print_stats' not in status:
202211
status['print_stats'] = {}
203212
if 'info' not in status['print_stats']:
204213
status['print_stats']['info'] = {}
205214

206215
status['print_stats']['info']['current_layer'] = current_layer
207216
status['print_stats']['info']['total_layer'] = self._total_layer
217+
218+
if 'file_path' in status['virtual_sdcard']:
219+
# Remove path prefix from file path
220+
status['virtual_sdcard']['file_path'] = status['virtual_sdcard']['file_path'].replace('/useremain/app/gk/gcodes/', '')
208221

209222
return status
210223

@@ -316,10 +329,7 @@ def patch_mqtt_print(self):
316329
def wrap_run_gcode(original_run_gcode):
317330
async def run_gcode(me, script, default = Sentinel.MISSING):
318331
if self.is_goklipper_running() and script.startswith('SDCARD_PRINT_FILE'):
319-
script = script.replace('/useremain/app/gk/gcodes/', '')
320-
script = script.replace('useremain/app/gk/gcodes/', '')
321332
self._total_layer = 0
322-
print(script)
323333
filename = re.search("FILENAME=\"([^\"]+)\"$", script)
324334
filename = filename[1] if filename else None
325335
if filename and self.is_using_mqtt():
@@ -499,23 +509,6 @@ async def _request_standard(me, web_request, timeout = None):
499509
setattr(KlippyConnection, '_request_standard', wrap__request_standard(KlippyConnection._request_standard))
500510
logging.debug(f' After: {KlippyConnection._request_standard}')
501511

502-
def patch_gcode_paths(self):
503-
from .file_manager.file_manager import FileManager
504-
505-
def wrap__handle_metadata_request(original__handle_metadata_request):
506-
async def _handle_metadata_request(me, web_request):
507-
if self.is_goklipper_running() and 'filename' in web_request.args:
508-
logging.info('[Kobra] Replaced gcode paths')
509-
web_request.args['filename'] = web_request.args['filename'].replace('/useremain/app/gk/gcodes/', '')
510-
return await original__handle_metadata_request(me, web_request)
511-
return _handle_metadata_request
512-
513-
logging.info('> Patching gcode paths...')
514-
515-
logging.debug(f' Before: {FileManager._handle_metadata_request}')
516-
setattr(FileManager, '_handle_metadata_request', wrap__handle_metadata_request(FileManager._handle_metadata_request))
517-
logging.debug(f' After: {FileManager._handle_metadata_request}')
518-
519512

520513
def load_component(config):
521514
return Kobra(config)

0 commit comments

Comments
 (0)