2020-10-04 12:58:15 -04:00
|
|
|
# Copyright 2020 (c) Anna Schumaker.
|
2021-06-17 13:38:20 -04:00
|
|
|
from lib import bus
|
2020-10-24 21:21:38 -04:00
|
|
|
from lib import data
|
2020-10-10 20:07:53 -04:00
|
|
|
from lib import publisher
|
2020-10-04 15:28:30 -04:00
|
|
|
from . import library
|
2021-06-23 16:48:10 -04:00
|
|
|
from . import tags
|
2020-10-24 21:21:38 -04:00
|
|
|
from . import track
|
2020-10-04 15:28:30 -04:00
|
|
|
import pathlib
|
2020-10-24 21:21:38 -04:00
|
|
|
import threading
|
2020-10-04 12:58:15 -04:00
|
|
|
|
2020-10-24 21:21:38 -04:00
|
|
|
db_file = "trackdb.pickle"
|
2021-06-17 13:38:20 -04:00
|
|
|
save_bus = bus.Bus(500)
|
2020-10-04 12:58:15 -04:00
|
|
|
library_paths = [ ]
|
2020-10-10 20:07:53 -04:00
|
|
|
LibraryAdded = publisher.Publisher()
|
|
|
|
LibraryRemoved = publisher.Publisher()
|
2020-10-04 12:58:15 -04:00
|
|
|
|
|
|
|
def add_path(path):
|
2020-10-04 15:28:30 -04:00
|
|
|
if get_library(path) == None:
|
|
|
|
lib = library.LibraryPath(path)
|
|
|
|
library_paths.append(lib)
|
2020-10-10 20:07:53 -04:00
|
|
|
LibraryAdded.publish(lib)
|
2020-10-04 15:28:30 -04:00
|
|
|
return lib
|
|
|
|
|
|
|
|
def get_library(path):
|
|
|
|
for lib in library_paths:
|
2021-06-24 13:33:47 -04:00
|
|
|
if lib.name == pathlib.Path(path):
|
2020-10-04 15:28:30 -04:00
|
|
|
return lib
|
|
|
|
return None
|
2020-10-04 12:58:15 -04:00
|
|
|
|
2020-10-11 10:03:16 -04:00
|
|
|
def get_track(trackid):
|
2021-06-24 13:37:09 -04:00
|
|
|
return library.Tracks[trackid]
|
2020-10-11 10:03:16 -04:00
|
|
|
|
2020-10-04 12:58:15 -04:00
|
|
|
def remove_path(path):
|
2020-10-04 15:28:30 -04:00
|
|
|
lib = get_library(path)
|
|
|
|
library_paths.remove(lib)
|
2020-10-10 20:07:53 -04:00
|
|
|
LibraryRemoved.publish(lib)
|
2020-10-04 12:58:15 -04:00
|
|
|
|
2020-10-24 21:21:38 -04:00
|
|
|
def _do_save():
|
2021-06-17 13:38:20 -04:00
|
|
|
with data.DataFile(db_file, data.WRITE) as f:
|
2021-06-24 11:28:10 -04:00
|
|
|
f.pickle([ tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, library_paths ])
|
2020-10-24 21:21:38 -04:00
|
|
|
|
|
|
|
def save(*args):
|
2021-06-17 13:38:20 -04:00
|
|
|
save_bus.board(_do_save)
|
2020-10-24 21:21:38 -04:00
|
|
|
|
2020-10-25 09:02:19 -04:00
|
|
|
def load():
|
|
|
|
global library_paths
|
|
|
|
with data.DataFile(db_file, data.READ) as f:
|
2021-06-07 10:02:35 -04:00
|
|
|
if f.exists():
|
2021-06-24 11:28:10 -04:00
|
|
|
(tags.Artist, tags.Album, tags.Genre, tags.Decade, tags.Year, library.Tracks, library_paths) = f.unpickle()
|
2020-10-25 09:02:19 -04:00
|
|
|
|
2020-10-24 21:21:38 -04:00
|
|
|
def __register_callbacks():
|
|
|
|
LibraryAdded.register(save)
|
|
|
|
LibraryRemoved.register(save)
|
2021-06-24 13:47:51 -04:00
|
|
|
library.Tracks.Added.register(save)
|
|
|
|
library.Tracks.Removed.register(save)
|
2020-10-24 21:21:38 -04:00
|
|
|
track.TrackUpdated.register(save)
|
|
|
|
__register_callbacks()
|
|
|
|
|
2020-10-04 12:58:15 -04:00
|
|
|
def reset():
|
|
|
|
library_paths.clear()
|
2020-10-10 20:07:53 -04:00
|
|
|
LibraryAdded.reset()
|
|
|
|
LibraryRemoved.reset()
|
2021-06-23 16:48:10 -04:00
|
|
|
tags.reset()
|
2020-10-10 20:23:28 -04:00
|
|
|
library.reset()
|
2020-10-20 11:10:04 -04:00
|
|
|
track.reset()
|
2021-06-17 13:38:20 -04:00
|
|
|
save_bus.clear()
|
2020-10-24 21:21:38 -04:00
|
|
|
|
|
|
|
data.DataFile(db_file, data.READ).remove()
|
|
|
|
__register_callbacks()
|