print: fix directory dates fixes #1199

This commit is contained in:
alfrix 2023-12-23 16:38:00 -03:00
parent be972d50d1
commit 34f80ce4aa
3 changed files with 38 additions and 15 deletions

View File

@ -211,6 +211,15 @@ class MoonrakerApi:
*args *args
) )
def get_dir_info(self, callback=None, directory='gcodes', *args):
logging.debug("Sending server.files.get_directory")
return self._ws.send_method(
"server.files.get_directory",
{"path": directory},
callback,
*args
)
def get_file_metadata(self, filename, callback=None, *args): def get_file_metadata(self, filename, callback=None, *args):
return self._ws.send_method( return self._ws.send_method(
"server.files.metadata", "server.files.metadata",

View File

@ -13,6 +13,7 @@ class KlippyFiles:
self.callbacks = [] self.callbacks = []
self.files = {} self.files = {}
self.filelist = [] self.filelist = []
self.directories = []
self.gcodes_path = None self.gcodes_path = None
def initialize(self): def initialize(self):
@ -27,6 +28,7 @@ class KlippyFiles:
self.callbacks = None self.callbacks = None
self.files = None self.files = None
self.filelist = None self.filelist = None
self.directories = None
self.gcodes_path = None self.gcodes_path = None
def _callback(self, result, method, params): def _callback(self, result, method, params):
@ -85,6 +87,13 @@ class KlippyFiles:
fdir = os.path.dirname(params['filename']) fdir = os.path.dirname(params['filename'])
thumbnail['path'] = os.path.join(fdir, thumbnail['relative_path']) thumbnail['path'] = os.path.join(fdir, thumbnail['relative_path'])
self.run_callbacks(mods=[params['filename']]) self.run_callbacks(mods=[params['filename']])
elif method == "server.files.get_directory":
if 'result' not in result or 'dirs' not in result['result']:
return
for x in result['result']['dirs']:
if x not in self.directories:
self.directories.append(x)
self.get_dir_info(x['dirname'])
def add_file(self, item, notify=True): def add_file(self, item, notify=True):
if 'filename' not in item and 'path' not in item: if 'filename' not in item and 'path' not in item:
@ -166,6 +175,7 @@ class KlippyFiles:
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)
self._screen._ws.klippy.get_dir_info(self._callback)
return False return False
def remove_file(self, filename, notify=True): def remove_file(self, filename, notify=True):
@ -199,3 +209,6 @@ class KlippyFiles:
if filename not in self.files: if filename not in self.files:
return {"path": None, "modified": 0, "size": 0} return {"path": None, "modified": 0, "size": 0}
return self.files[filename] return self.files[filename]
def get_dir_info(self, directory):
self._screen._ws.klippy.get_dir_info(self._callback, directory=directory)

View File

@ -82,8 +82,13 @@ class Panel(ScreenPanel):
def add_directory(self, directory, show=True): def add_directory(self, directory, show=True):
parent_dir = os.path.dirname(directory) parent_dir = os.path.dirname(directory)
modified = 0
for x in self._files.directories:
if x['dirname'] == os.path.split(directory)[-1]:
modified = x['modified']
break
if directory not in self.filelist: if directory not in self.filelist:
self.filelist[directory] = {'directories': [], 'files': [], 'modified': 0} self.filelist[directory] = {'directories': [], 'files': [], 'modified': modified}
self.filelist[parent_dir]['directories'].append(directory) self.filelist[parent_dir]['directories'].append(directory)
if directory not in self.labels['directories']: if directory not in self.labels['directories']:
@ -114,22 +119,22 @@ class Panel(ScreenPanel):
curdir = os.path.join(*d[:i]) curdir = os.path.join(*d[:i])
newdir = os.path.join(*d[:i + 1]) newdir = os.path.join(*d[:i + 1])
if newdir not in self.filelist[curdir]['directories']: if newdir not in self.filelist[curdir]['directories']:
if d[i].startswith("."): if newdir.startswith("."):
return return
self.add_directory(newdir) self.add_directory(newdir)
if filename not in self.filelist[directory]['files']: if filename not in self.filelist[directory]['files']:
for i in range(1, len(d)): for i in range(1, len(d)):
curdir = os.path.join(*d[:i + 1]) curdir = os.path.join(*d[:i + 1])
if curdir != "gcodes" and fileinfo['modified'] > self.filelist[curdir]['modified']: if self.time_24:
self.filelist[curdir]['modified'] = fileinfo['modified'] time = f":<b>{self.space}" \
if self.time_24: f"{datetime.fromtimestamp(self.filelist[curdir]['modified']):%Y/%m/%d %H:%M}</b>"
time = f':<b>{self.space}{datetime.fromtimestamp(fileinfo["modified"]):%Y/%m/%d %H:%M}</b>' else:
else: time = f":<b>{self.space}" \
time = f':<b>{self.space}{datetime.fromtimestamp(fileinfo["modified"]):%Y/%m/%d %I:%M %p}</b>' f"{datetime.fromtimestamp(self.filelist[curdir]['modified']):%Y/%m/%d %I:%M %p}</b>"
info = _("Modified") + time info = _("Modified") + time
info += "\n" + _("Size") + f':<b>{self.space}{self.format_size(fileinfo["size"])}</b>' info += "\n" + _("Size") + f':<b>{self.space}{self.format_size(fileinfo["size"])}</b>'
self.labels['directories'][curdir]['info'].set_markup(info) self.labels['directories'][curdir]['info'].set_markup(info)
self.filelist[directory]['files'].append(filename) self.filelist[directory]['files'].append(filename)
if filepath not in self.files: if filepath not in self.files:
@ -394,21 +399,17 @@ class Panel(ScreenPanel):
logging.debug(f"Cannot update file, file not in labels: {filename}") logging.debug(f"Cannot update file, file not in labels: {filename}")
return return
logging.info(f"Updating file {filename}")
self.labels['files'][filename]['info'].set_markup(self.get_file_info_str(filename)) self.labels['files'][filename]['info'].set_markup(self.get_file_info_str(filename))
# Update icon # Update icon
GLib.idle_add(self.image_load, filename) GLib.idle_add(self.image_load, filename)
def _callback(self, newfiles, deletedfiles, updatedfiles=None): def _callback(self, newfiles, deletedfiles, updatedfiles=None):
logging.debug(f"newfiles: {newfiles}")
for file in newfiles: for file in newfiles:
self.add_file(file) self.add_file(file)
logging.debug(f"deletedfiles: {deletedfiles}")
for file in deletedfiles: for file in deletedfiles:
self.delete_file(file) self.delete_file(file)
if updatedfiles is not None: if updatedfiles is not None:
logging.debug(f"updatefiles: {updatedfiles}")
for file in updatedfiles: for file in updatedfiles:
self.update_file(file) self.update_file(file)
return False return False