

# https://www.globalsino.com/ICs/
# Use tkinter pop-up window to display the file/folder change in a direct folder

from tkinter import *
from tkinter import filedialog
from watchdog.observers import Observer
import watchdog.events
from watchdog.events import PatternMatchingEventHandler

class Watchdog(watchdog.events.PatternMatchingEventHandler, Observer):
    def __init__(self, path='.', patterns='*', logfunc=print):        
        watchdog.events.PatternMatchingEventHandler.__init__(self, patterns, ignore_directories=True, case_sensitive=False)
        Observer.__init__(self)
        self.schedule(self, path=path, recursive=False)
        self.log = logfunc

    def on_created(self, event):
        print(event.src_path)
        self.log(f"{event.src_path} has been created!")

    def on_modified(self, event):
        print(event.src_path)
        self.log(f"{event.src_path} has been modified")

class GUI:
    def __init__(self):        
        self.watchdog = None
        self.watch_path = '.'
        self.root = Tk()
        self.root.title("File/folder change monitor")
        self.root.geometry("800x200")
        self.messagebox = Text(width=80, height=10)
        self.messagebox.pack()
        frm = Frame(self.root)
        event_handler = Watchdog()
        Button(frm, text='Directory to monitor', command=self.select_path).pack(side=LEFT)
        Button(frm, text='Start monitoring', command=self.start_watchdog).pack(side=RIGHT)
        Button(frm, text='Stop monitoring', command=self.stop_watchdog).pack(side=RIGHT)
        frm.pack(fill=X, expand=1)
        self.root.mainloop()

    def start_watchdog(self):
        if self.watchdog is None:
            self.watchdog = Watchdog(path=self.watch_path, logfunc=self.log)
            self.watchdog.start()
            self.log('Monitoring started')
        else:
            self.log('Monitoring started')

    def stop_watchdog(self):
        if self.watchdog:
            self.watchdog.stop()
            self.watchdog = None
            self.log('Monitoring stopped')
        else:
            self.log('Monitoring is on')

    def select_path(self):
        path = filedialog.askdirectory()
        if path:
            self.watch_path = path
            self.log(f'Selected path: {path}')

    def log(self, message):
        self.messagebox.insert(END, f'{message}\n')
        self.messagebox.see(END)

if __name__ == '__main__':    
    GUI()


