84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
import logging
|
|
import asyncio
|
|
import json
|
|
|
|
import gi
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk, Gdk, GLib
|
|
|
|
logger = logging.getLogger("KlipperScreen.KlippyFiles")
|
|
|
|
class KlippyFiles:
|
|
callbacks = []
|
|
filelist = []
|
|
files = {}
|
|
timeout = None
|
|
|
|
def __init__(self, screen):
|
|
self._screen = screen
|
|
self.timeout = GLib.timeout_add(2000, self.ret_files)
|
|
#GLib.idle_add(self.ret_files)
|
|
|
|
|
|
def _callback(self, result, method, params):
|
|
if method == "server.files.list":
|
|
if isinstance(result['result'],list):
|
|
newfiles = []
|
|
deletedfiles = self.filelist.copy()
|
|
for item in result['result']:
|
|
if item['filename'] in self.files:
|
|
deletedfiles.remove(item['filename'])
|
|
else:
|
|
newfiles.append(item['filename'])
|
|
logger.debug("New file: %s", item['filename'])
|
|
self.filelist.append(item['filename'])
|
|
self.files[item['filename']] = {
|
|
"size": item['size'],
|
|
"modified": item['modified']
|
|
}
|
|
|
|
if len(self.callbacks) > 0 and (len(newfiles) > 0 or len(deletedfiles) > 0):
|
|
logger.debug("Running callbacks...")
|
|
for cb in self.callbacks:
|
|
cb(newfiles, deletedfiles)
|
|
|
|
if len(deletedfiles) > 0:
|
|
logger.debug("Deleted files: %s", deletedfiles)
|
|
for file in deletedfiles:
|
|
self.filelist.remove(file)
|
|
self.files.pop(file, None)
|
|
|
|
#self.get_file_data(item['filename'])
|
|
#files = [asyncio.create_task(self.get_file_data(file)) for file in self.files]
|
|
#await asyncio.gather(files)
|
|
#files = [GLib.idle_add(self.ret_file_data, file) for file in self.files]
|
|
|
|
elif method == "get_file_metadata":
|
|
print("Got metadata for %s" % (result['result']['filename']))
|
|
#print(json.dumps(result, indent=4))
|
|
|
|
def add_file_callback(self, callback):
|
|
self.callbacks.append(callback)
|
|
print("Callbacks...")
|
|
print(self.callbacks)
|
|
|
|
def ret_files(self):
|
|
self._screen._ws.klippy.get_file_list(self._callback)
|
|
return True
|
|
|
|
def ret_file_data (self, filename):
|
|
print("Getting file info for %s" % (filename))
|
|
self._screen._ws.klippy.get_file_metadata(filename, self._callback)
|
|
|
|
def get_file_list(self):
|
|
return self.filelist
|
|
|
|
def get_file_info(self, filename):
|
|
if filename not in self.files:
|
|
return None
|
|
|
|
return self.files[filename]
|
|
|
|
def add_file(self, file_name, size, modified, old_file_name = None):
|
|
print(file_name)
|