mirror of
https://github.com/hanzoui/mixlab-nodes.git
synced 2026-10-30 20:48:06 +00:00
124 lines
3.6 KiB
Python
124 lines
3.6 KiB
Python
from watchdog.observers import Observer
|
|
from watchdog.events import FileSystemEventHandler
|
|
|
|
import time
|
|
import json
|
|
import os
|
|
# current_directory = os.getcwd()
|
|
# print('Watcher:',current_directory)
|
|
|
|
def save_to_json(file_path, data):
|
|
try:
|
|
with open(file_path, 'w') as f:
|
|
json.dump(data, f)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
def read_from_json(file_path):
|
|
data={}
|
|
try:
|
|
with open(file_path, 'r') as f:
|
|
data = json.load(f)
|
|
except Exception as e:
|
|
print(e)
|
|
return data
|
|
|
|
|
|
# read_from_json()
|
|
current_path = os.path.abspath(os.path.dirname(__file__))
|
|
config_json=os.path.join(current_path,'config.json')
|
|
# print('Watcher:',config_json)
|
|
|
|
def read_config():
|
|
config={}
|
|
try:
|
|
if os.path.exists(config_json):
|
|
config=read_from_json(config_json)
|
|
except Exception as e:
|
|
print(e)
|
|
return config
|
|
|
|
|
|
class FolderWatcher:
|
|
def __init__(self, folder_path):
|
|
self.folder_path = folder_path
|
|
|
|
if folder_path:
|
|
config=read_config()
|
|
config['folder_path']=folder_path
|
|
save_to_json(config_json,config)
|
|
|
|
self.observer = None
|
|
self.event_handler = self._create_event_handler()
|
|
self.status = "Not started"
|
|
self.event_type='-'
|
|
|
|
def _create_event_handler(self):
|
|
|
|
class EventHandler(FileSystemEventHandler):
|
|
def on_any_event(self, event):
|
|
|
|
if event.is_directory:
|
|
return
|
|
elif event.event_type == 'created':
|
|
print(f"File created: {event.src_path}")
|
|
self.event_type=event.event_type+'_'+str(int(time.time()))
|
|
elif event.event_type == 'deleted':
|
|
print(f"File deleted: {event.src_path}")
|
|
self.event_type=event.event_type+'_'+str(int(time.time()))
|
|
elif event.event_type == 'modified':
|
|
print(f"File modified: {event.src_path}")
|
|
self.event_type=event.event_type+'_'+str(int(time.time()))
|
|
elif event.event_type == 'moved':
|
|
print(f"File moved: {event.src_path} to {event.dest_path}")
|
|
self.event_type=event.event_type+'_'+str(int(time.time()))
|
|
|
|
print(event.event_type)
|
|
config=read_config()
|
|
config['event_type']=self.event_type
|
|
save_to_json(config_json,config)
|
|
|
|
return EventHandler()
|
|
|
|
def set_folder_path(self, new_folder_path):
|
|
self.folder_path = new_folder_path
|
|
if new_folder_path:
|
|
config=read_config()
|
|
config['folder_path']=new_folder_path
|
|
save_to_json(config_json,config)
|
|
self.event_type='-'
|
|
|
|
def start(self):
|
|
self.observer = Observer()
|
|
self.observer.schedule(self.event_handler, self.folder_path, recursive=True)
|
|
self.observer.start()
|
|
self.status = "Listening"
|
|
self.event_type='-'
|
|
print('Listening')
|
|
|
|
def stop(self):
|
|
if self.observer!=None:
|
|
self.observer.stop()
|
|
self.observer.join()
|
|
self.observer=None
|
|
self.status = "Stopped"
|
|
self.event_type='-'
|
|
print('Stopped')
|
|
|
|
|
|
|
|
# # 示例用法
|
|
# if __name__ == "__main__":
|
|
# folder_path = "C:\\\\Users\\\\38957\\\\Documents\\\\GitHub\\\\extract-anything\\\\outputs" # 替换为您要监听的文件夹路径
|
|
|
|
# watcher_folder = FolderWatcher(folder_path)
|
|
# watcher_folder.start()
|
|
# watcher_folder.stop()
|
|
|
|
# watcher_folder.start()
|
|
# watcher_folder.stop()
|
|
|
|
# while True:
|
|
# 1
|
|
|