tagdb: Have Tracks schedule an ImportTask when loading

And a CommitTask when we're done. Note: we only load and import the
tagdb if we are creating a new database.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-09-11 13:05:15 -04:00
parent 2f1b7b397f
commit 52415cf4da
3 changed files with 13 additions and 0 deletions

View File

@ -3,8 +3,10 @@ from . import allocator
from . import stack
from . import tags
from . import track
import db
import lib
import pathlib
import scanner
import threading
File = "tagdb.pickle"
@ -78,6 +80,8 @@ def load():
global Library
global Tracks
global Stack
if not db.new_db():
return
with lib.data.DataFile(File, lib.data.READ) as f:
if f.exists():
(tagstate, Tracks, Library, Stack) = f.unpickle()
@ -85,6 +89,7 @@ def load():
Tracks.load_tags()
Library.fix_tracks()
__register_callbacks()
scanner.Queue.push(scanner.task.CommitTask())
def __register_callbacks():
for store in [ Library, tags.User, Tracks ]:

View File

@ -1,4 +1,5 @@
# Copyright 2020 (c) Anna Schumaker.
import db
import lib
import pathlib
import tagdb
@ -8,6 +9,7 @@ test_tracks = pathlib.Path("./data/Test Album")
class TestLibraryTag(unittest.TestCase):
def tearDown(self):
db.NewDatabase = True
tagdb.reset()
def test_library_tag_init(self):
@ -122,6 +124,7 @@ class TestTrackDB(unittest.TestCase):
tagdb.Bus.complete()
self.assertTrue(db_file.exists())
db.reset()
tagdb.tags.reset()
tagdb.Library.reset()
tagdb.Tracks.reset()

View File

@ -4,6 +4,8 @@ from lib import publisher
from . import tags
from gi.repository import GObject
import datetime
import db
import scanner
class Track(GObject.Object):
def __init__(self, trackid, filepath, library):
@ -66,6 +68,9 @@ class Track(GObject.Object):
self.decade = tags.Decade.init_track(self.decade, self)
self.year = tags.Year.init_track(self.decade, self.year, self)
self.playlists = [ tags.User.init_track(p, self) for p in self.playlists ]
scanner.import_track(db.library.Table.find(self.library.name),
self.filepath(), self.playcount, self.lastplayed,
[ p.name for p in self.playlists ])
def about_to_remove(self):
tags.Artist.remove(self.artist, self)