emmental/trackdb/__init__.py

71 lines
1.7 KiB
Python
Raw Normal View History

# Copyright 2020 (c) Anna Schumaker.
from lib import bus
from lib import data
from lib import publisher
from . import library
from . import track
import pathlib
import threading
db_file = "trackdb.pickle"
save_bus = bus.Bus(500)
library_paths = [ ]
LibraryAdded = publisher.Publisher()
LibraryRemoved = publisher.Publisher()
def add_path(path):
if get_library(path) == None:
lib = library.LibraryPath(path)
library_paths.append(lib)
LibraryAdded.publish(lib)
return lib
def get_library(path):
for lib in library_paths:
if lib.path == pathlib.Path(path):
return lib
return None
def get_track(trackid):
for lib in library_paths:
if (track := lib[trackid]) != None:
return track
return None
def remove_path(path):
lib = get_library(path)
library_paths.remove(lib)
LibraryRemoved.publish(lib)
def _do_save():
with data.DataFile(db_file, data.WRITE) as f:
f.pickle([ library.Tracks, library_paths ])
def save(*args):
save_bus.board(_do_save)
def load():
global library_paths
with data.DataFile(db_file, data.READ) as f:
if f.exists():
(library.Tracks, library_paths) = f.unpickle()
def __register_callbacks():
LibraryAdded.register(save)
LibraryRemoved.register(save)
library.TrackAdded.register(save)
library.TrackRemoved.register(save)
track.TrackUpdated.register(save)
__register_callbacks()
def reset():
library_paths.clear()
LibraryAdded.reset()
LibraryRemoved.reset()
library.reset()
track.reset()
save_bus.clear()
data.DataFile(db_file, data.READ).remove()
__register_callbacks()