diff --git a/sync_client.py b/sync_client.py index d960467..2a62cf7 100644 --- a/sync_client.py +++ b/sync_client.py @@ -7,6 +7,8 @@ from watchdog.events import FileSystemEventHandler import os import requests import json +import threading +import queue class SyncClient: @classmethod @@ -19,23 +21,34 @@ class SyncClient: def start(self) -> None: _sself = self + self.__event_queue = queue.Queue() + + def comm_thread_routine(): + while True: + event = self.__event_queue.get() + + rel_path = str(event.src_path).removeprefix(_sself.dir()) + if event.event_type == "created" or event.event_type == "modified": + _sself.upload(rel_path) + elif event.event_type == "moved": + src_rel_path = rel_path + dst_rel_path = str(event.dest_path).removeprefix(_sself.dir()) + _sself.move(src_rel_path, dst_rel_path) + pass + elif event.event_type == "deleted": + _sself.delete(rel_path) + pass + + class FileChangeHandler(FileSystemEventHandler): EVENTS_WATCHED = [ "moved", "deleted", "created", "modified" ] def on_any_event(self, event): if event.event_type in FileChangeHandler.EVENTS_WATCHED: if event.src_path != _sself.dir(): - rel_path = str(event.src_path).removeprefix(_sself.dir()) - if event.event_type == "created" or event.event_type == "modified": - _sself.upload(rel_path) - elif event.event_type == "moved": - src_rel_path = rel_path - dst_rel_path = str(event.dest_path).removeprefix(_sself.dir()) - _sself.move(src_rel_path, dst_rel_path) - pass - elif event.event_type == "deleted": - _sself.delete(rel_path) - pass + _sself.__event_queue.put(event) + + self.__comm_thread = threading.Thread() observer = Observer() event_handler = FileChangeHandler() @@ -51,6 +64,9 @@ class SyncClient: self.__id = id self.__key = key + self.__comm_thread: threading.Thread + self.__event_queue: queue.Queue + self.start()