77 lines
1.3 KiB
Python
77 lines
1.3 KiB
Python
import os
|
|
import shlex
|
|
import subprocess
|
|
import time
|
|
|
|
from datetime import datetime
|
|
from izzylib import Path, logging
|
|
from watchdog.events import FileSystemEventHandler
|
|
from watchdog.observers import Observer
|
|
|
|
|
|
class SaveWatcher(Observer):
|
|
def __init__(self, server):
|
|
Observer.__init__(self)
|
|
|
|
self.server = server
|
|
self.schedule(SaveHandler(server), self.server.save_path, recursive=False)
|
|
|
|
self._running = False
|
|
|
|
|
|
def __enter__(self):
|
|
self.start()
|
|
|
|
|
|
def __exit__(self, *args):
|
|
self.stop()
|
|
|
|
|
|
def start(self):
|
|
if self._running:
|
|
return
|
|
|
|
logging.info('Starting save watcher')
|
|
Observer.start(self)
|
|
self._running = True
|
|
|
|
|
|
def stop(self):
|
|
if not self._running:
|
|
return
|
|
|
|
logging.info('Stopping save watcher')
|
|
Observer.stop(self)
|
|
self.join()
|
|
self._running = False
|
|
|
|
|
|
class SaveHandler(FileSystemEventHandler):
|
|
#patterns = [f'*.{ext}' for ext in config.watch_ext]
|
|
|
|
proc = None
|
|
last_restart = None
|
|
|
|
|
|
def __init__(self, server):
|
|
super().__init__()
|
|
|
|
self.server = server
|
|
|
|
|
|
def on_any_event(self, event):
|
|
if event.event_type not in ['modified', 'created', 'deleted']:
|
|
logging.debug(f'Ignored event: {event.event_type}')
|
|
return
|
|
|
|
path = Path(event.src_path)
|
|
|
|
if not path.suffix == 'sav':
|
|
return
|
|
|
|
self.handle_save_change(path.name, event.event_type)
|
|
|
|
|
|
def handle_save_change(self, name, event):
|
|
print(name, event)
|