Skip to content

Instantly share code, notes, and snippets.

@JacobCarrell
Created October 24, 2020 21:12
Show Gist options
  • Save JacobCarrell/eaf6472e6e0790dc45003bbff0704105 to your computer and use it in GitHub Desktop.
Save JacobCarrell/eaf6472e6e0790dc45003bbff0704105 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import time
import os
from watchdog.observers import Observer
from watchdog.events import *
CMD_GADGET_MOUNT = "modprobe g_mass_storage file=/usb.fat32 stall=0 ro=1"
CMD_UNMOUNT = "modprobe -r g_mass_storage"
CMD_SYNC = "sync"
CMD_LOOPBACK_MOUNT="losetup -fP /usb.fat32"
CMD_MOUNT_LOOPBACK_DEVICE="mount -t vfat -o noatime,users,umask=000 /dev/loop0p1 /media/usb"
WATCH_PATH = "/media/usb"
ACT_EVENTS = [DirDeletedEvent, DirMovedEvent, FileDeletedEvent, FileModifiedEvent, FileMovedEvent]
ACT_TIME_OUT = 15
class DirtyHandler(FileSystemEventHandler):
def __init__(self):
self.reset()
def on_any_event(self, event):
if type(event) in ACT_EVENTS:
self._dirty = True
self._dirty_time = time.time()
@property
def dirty(self):
return self._dirty
@property
def dirty_time(self):
return self._dirty_time
def reset(self):
self._dirty = False
self._dirty_time = 0
self._path = None
os.system(CMD_GADGET_MOUNT)
os.system(CMD_LOOPBACK_MOUNT)
os.system(CMD_MOUNT_LOOPBACK_DEVICE)
evh = DirtyHandler()
observer = Observer()
observer.schedule(evh, path=WATCH_PATH, recursive=True)
observer.start()
try:
while True:
while evh.dirty:
time_out = time.time() - evh.dirty_time
if time_out >= ACT_TIME_OUT:
os.system(CMD_UNMOUNT)
time.sleep(1)
os.system(CMD_SYNC)
time.sleep(1)
os.system(CMD_GADGET_MOUNT)
evh.reset()
continue
time.sleep(1)
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment