print: refactor file updates and moves, fixes #1303
This commit is contained in:
parent
ebf7d574b7
commit
865d38217e
@ -32,6 +32,8 @@ class KlippyFiles:
|
|||||||
if params['filename'] not in self.files:
|
if params['filename'] not in self.files:
|
||||||
self.files[params['filename']] = {}
|
self.files[params['filename']] = {}
|
||||||
self.files[params['filename']][x] = result['result'][x]
|
self.files[params['filename']][x] = result['result'][x]
|
||||||
|
if 'path' not in self.files[params['filename']]:
|
||||||
|
self.files[params['filename']]['path'] = params['filename']
|
||||||
if "thumbnails" in self.files[params['filename']]:
|
if "thumbnails" in self.files[params['filename']]:
|
||||||
self.files[params['filename']]['thumbnails'].sort(key=lambda y: y['size'], reverse=True)
|
self.files[params['filename']]['thumbnails'].sort(key=lambda y: y['size'], reverse=True)
|
||||||
for thumbnail in self.files[params['filename']]['thumbnails']:
|
for thumbnail in self.files[params['filename']]['thumbnails']:
|
||||||
@ -50,6 +52,9 @@ class KlippyFiles:
|
|||||||
thumbnail['relative_path']
|
thumbnail['relative_path']
|
||||||
)
|
)
|
||||||
self._screen.process_update("notify_metadata_update", params)
|
self._screen.process_update("notify_metadata_update", params)
|
||||||
|
self.run_callbacks(
|
||||||
|
"modify_file", {'action': "modify_file", 'item': self.files[params['filename']]}
|
||||||
|
)
|
||||||
|
|
||||||
def add_file(self, item):
|
def add_file(self, item):
|
||||||
if 'path' not in item:
|
if 'path' not in item:
|
||||||
@ -72,9 +77,11 @@ class KlippyFiles:
|
|||||||
logging.info(f"callback not found {callback}")
|
logging.info(f"callback not found {callback}")
|
||||||
|
|
||||||
def process_update(self, data):
|
def process_update(self, data):
|
||||||
if 'item' in data and data['item']['root'] != 'gcodes':
|
if (
|
||||||
|
'item' in data and data['item']['root'] != 'gcodes'
|
||||||
|
or data['action'].endswith("file") and not self.is_gcode(data['item']['path'])
|
||||||
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
if data['action'] == "create_file":
|
if data['action'] == "create_file":
|
||||||
self.add_file(data['item'])
|
self.add_file(data['item'])
|
||||||
elif data['action'] == "delete_file":
|
elif data['action'] == "delete_file":
|
||||||
@ -82,11 +89,13 @@ class KlippyFiles:
|
|||||||
elif data['action'] == "modify_file":
|
elif data['action'] == "modify_file":
|
||||||
self.request_metadata(data['item']['path'])
|
self.request_metadata(data['item']['path'])
|
||||||
elif data['action'] == "move_file":
|
elif data['action'] == "move_file":
|
||||||
self.remove_file(data['source_item']['path'])
|
self.files[data['item']['path']] = self.files.pop(data['source_item']['path'])
|
||||||
self.add_file(data['item'])
|
self.files[data['item']['path']].update(data['item'])
|
||||||
self.run_callbacks(data['action'], data['item'])
|
self.run_callbacks(data['action'], data)
|
||||||
|
|
||||||
return False
|
@staticmethod
|
||||||
|
def is_gcode(path):
|
||||||
|
return os.path.splitext(path)[1] in {'.gcode', '.gco', '.g'}
|
||||||
|
|
||||||
def file_metadata_exists(self, filename):
|
def file_metadata_exists(self, filename):
|
||||||
return filename in self.files and "slicer" in self.files[filename]
|
return filename in self.files and "slicer" in self.files[filename]
|
||||||
@ -105,8 +114,10 @@ class KlippyFiles:
|
|||||||
return filename in self.files and "thumbnails" in self.files[filename]
|
return filename in self.files and "thumbnails" in self.files[filename]
|
||||||
|
|
||||||
def request_metadata(self, filename):
|
def request_metadata(self, filename):
|
||||||
if os.path.splitext(filename)[1] in {'.gcode', '.gco', '.g'}:
|
if self.is_gcode(filename):
|
||||||
self._screen._ws.klippy.get_file_metadata(filename, self._callback)
|
self._screen._ws.klippy.get_file_metadata(filename, self._callback)
|
||||||
|
else:
|
||||||
|
logging.info("Not a gcode")
|
||||||
|
|
||||||
def refresh_files(self):
|
def refresh_files(self):
|
||||||
self._screen._ws.klippy.get_file_list(self._callback)
|
self._screen._ws.klippy.get_file_list(self._callback)
|
||||||
@ -118,6 +129,7 @@ class KlippyFiles:
|
|||||||
def get_file_info(self, path):
|
def get_file_info(self, path):
|
||||||
if path not in self.files:
|
if path not in self.files:
|
||||||
logging.info(f"Metadata not found {path}")
|
logging.info(f"Metadata not found {path}")
|
||||||
|
self.request_metadata(path)
|
||||||
return {}
|
return {}
|
||||||
return self.files[path]
|
return self.files[path]
|
||||||
|
|
||||||
|
@ -361,40 +361,44 @@ class Panel(ScreenPanel):
|
|||||||
logging.info(f"Loaded in {(datetime.now() - start).total_seconds():.3f} seconds")
|
logging.info(f"Loaded in {(datetime.now() - start).total_seconds():.3f} seconds")
|
||||||
|
|
||||||
def delete_from_list(self, path):
|
def delete_from_list(self, path):
|
||||||
|
logging.info(f"deleting {path}")
|
||||||
for item in self.flowbox.get_children():
|
for item in self.flowbox.get_children():
|
||||||
if item.get_path() == path:
|
if item.get_path() in {path, f"gcodes/{path}"}:
|
||||||
logging.info("found removing")
|
logging.info("found removing")
|
||||||
self.flowbox.remove(item)
|
self.flowbox.remove(item)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def add_item_from_callback(self, action, item):
|
def add_item_from_callback(self, action, data):
|
||||||
self.delete_from_list(item["path"])
|
item = data['item']
|
||||||
|
if 'source_item' in data:
|
||||||
|
self.delete_from_list(data['source_item']['path'])
|
||||||
|
else:
|
||||||
|
self.delete_from_list(item['path'])
|
||||||
path = os.path.join("gcodes", item["path"])
|
path = os.path.join("gcodes", item["path"])
|
||||||
if self.cur_directory != os.path.dirname(path):
|
if self.cur_directory != os.path.dirname(path):
|
||||||
return
|
return
|
||||||
if action == "create_dir":
|
if action in {"create_dir", "move_dir"}:
|
||||||
item.update({"path": path, "dirname": os.path.split(item["path"])[1]})
|
item.update({"path": path, "dirname": os.path.split(item["path"])[1]})
|
||||||
else:
|
else:
|
||||||
item.update({"path": path, "filename": os.path.split(item["path"])[1]})
|
item.update({"path": path, "filename": os.path.split(item["path"])[1]})
|
||||||
fbchild = self.create_item(item)
|
fbchild = self.create_item(item)
|
||||||
logging.info(item)
|
|
||||||
if fbchild:
|
if fbchild:
|
||||||
self.flowbox.add(fbchild)
|
self.flowbox.add(fbchild)
|
||||||
self.flowbox.invalidate_sort()
|
self.flowbox.invalidate_sort()
|
||||||
self.flowbox.show_all()
|
self.flowbox.show_all()
|
||||||
|
|
||||||
def _callback(self, action, item):
|
def _callback(self, action, data):
|
||||||
logging.info(f"{action}: {item}")
|
logging.info(f"{action}: {data}")
|
||||||
if action in {"create_dir", "create_file"}:
|
if action in {"create_dir", "create_file"}:
|
||||||
self.add_item_from_callback(action, item)
|
self.add_item_from_callback(action, data)
|
||||||
elif action == "delete_file":
|
elif action == "delete_file":
|
||||||
self.delete_from_list(item["path"])
|
self.delete_from_list(data['item']["path"])
|
||||||
elif action == "delete_dir":
|
elif action == "delete_dir":
|
||||||
self.delete_from_list(os.path.join("gcodes", item["path"]))
|
self.delete_from_list(os.path.join("gcodes", data['item']["path"]))
|
||||||
elif action in {"modify_file", "move_file"}:
|
elif action in {"modify_file", "move_file", "move_dir"}:
|
||||||
if "path" in item and item["path"].startswith("gcodes/"):
|
if "path" in data['item'] and data['item']["path"].startswith("gcodes/"):
|
||||||
item["path"] = item["path"][7:]
|
data['item']["path"] = data['item']["path"][7:]
|
||||||
self.add_item_from_callback(action, item)
|
self.add_item_from_callback(action, data)
|
||||||
|
|
||||||
def _refresh_files(self, *args):
|
def _refresh_files(self, *args):
|
||||||
logging.info("Refreshing")
|
logging.info("Refreshing")
|
||||||
@ -464,4 +468,3 @@ class Panel(ScreenPanel):
|
|||||||
params
|
params
|
||||||
)
|
)
|
||||||
self.back()
|
self.back()
|
||||||
self._refresh_files()
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user