handle watchdog events

- handle on_created event
- handle on_moved event
- handle on_deleted event
- watch whole ~ directory
This commit is contained in:
geoffrey45 2022-02-16 18:35:28 +03:00
parent 8b25fc4844
commit dcfb0a6ed1

View File

@ -1,20 +1,23 @@
from pprint import pprint
import time import time
import os import os
from watchdog.observers import Observer from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler from watchdog.events import PatternMatchingEventHandler
from app import instances, functions
from app import api
class OnMyWatch: class OnMyWatch:
directory = "/home/cwilvx/Music" directory = os.path.expanduser("~")
def __init__(self): def __init__(self):
self.observer = Observer() self.observer = Observer()
def run(self): def run(self):
event_handler = Handler() event_handler = Handler()
self.observer.schedule( self.observer.schedule(event_handler, self.directory, recursive=True)
event_handler, self.directory, recursive=True
)
self.observer.start() self.observer.start()
try: try:
@ -27,36 +30,76 @@ class OnMyWatch:
self.observer.join() self.observer.join()
def create_thumb_dir(filepath): def add_track(filepath: str) -> None:
f_name = filepath.split('/')[-1] """
parent_dir = filepath.replace(f_name, '') Processes the audio tags for a given file ands add them to the music dict.
"""
tags = functions.get_tags(filepath)
thumb_dir = parent_dir + ".thumbnails" if tags is not None:
print("🔵: tags okay")
track_id = instances.songs_instance.insert_song(tags)
track = instances.songs_instance.get_song_by_id(track_id)
print(track_id)
if not os.path.exists(thumb_dir): track_obj = functions.create_track_class(track)
os.makedirs(thumb_dir) api.all_the_f_music.append(track_obj)
def remove_track(filepath: str) -> None:
"""
Removes a track from the music dict.
"""
track_id = instances.songs_instance.get_song_by_path(filepath)["_id"]["$oid"]
instances.songs_instance.remove_song_by_id(track_id)
for track in api.all_the_f_music:
if track.track_id == track_id:
pprint(track)
api.all_the_f_music.remove(track)
class Handler(PatternMatchingEventHandler): class Handler(PatternMatchingEventHandler):
files_to_process = []
def __init__(self): def __init__(self):
print("💠 started watchxx") print("💠 started watchdog")
PatternMatchingEventHandler.__init__( PatternMatchingEventHandler.__init__(
self, patterns=['*.flac', '*.mp3'], ignore_directories=True, case_sensitive=False) self,
patterns=["*.flac", "*.mp3"],
ignore_directories=True,
case_sensitive=False,
)
def on_created(self, event): def on_created(self, event):
"""
Fired when a supported file is created.
"""
print("🔵 created +++") print("🔵 created +++")
print(event.src_path) self.files_to_process.append(event.src_path)
create_thumb_dir(event.src_path)
def on_deleted(self, event): def on_deleted(self, event):
"""
Fired when a delete event occurs on a supported file.
"""
print("🔴 deleted ---") print("🔴 deleted ---")
print(event.src_path) remove_track(event.src_path)
def on_moved(self, event): def on_moved(self, event):
"""
Fired when a move event occurs on a supported file.
"""
print("🔘 moved -->") print("🔘 moved -->")
print(event.src_path) remove_track(event.src_path)
print(event.dest_path) add_track(event.dest_path)
def on_closed(self, event):
"""
Fired when a created file is closed.
"""
print("⚫ closed ~~~")
self.files_to_process.remove(event.src_path)
add_track(event.src_path)
watch = OnMyWatch() watch = OnMyWatch()