scanner: Give ImportTasks a "playlists" argument

So users don't need to re-create their playlists when switching over to
the sqlite database.

Implements: #10 (Import user playlists)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-11 11:10:43 -05:00
parent 2ab67258e9
commit 3d77e8cd2a
4 changed files with 23 additions and 9 deletions

View File

@ -29,8 +29,8 @@ def EnableSwitch(library):
def commit():
Queue.push(task.CommitTask())
def import_track(lib, track, playcount, lastplayed):
Queue.push(task.ImportTask(lib, track, playcount, lastplayed))
def import_track(lib, track, playcount, lastplayed, playlists):
Queue.push(task.ImportTask(lib, track, playcount, lastplayed, playlists))
def update_library(lib):
Queue.push(task.CheckSchedulerTask(lib))

View File

@ -37,7 +37,7 @@ class FileTask(Task):
class ImportTask(FileTask):
def __init__(self, library, filepath, playcount, lastplayed):
def __init__(self, library, filepath, playcount, lastplayed, playlists):
FileTask.__init__(self, library, filepath)
self.playcount = playcount
if isinstance(lastplayed, datetime.datetime):
@ -46,13 +46,20 @@ class ImportTask(FileTask):
self.lastplayed = datetime.datetime.combine(lastplayed,
datetime.time())
exclude = set([ "Collection", "New Tracks", "Previous" ])
self.playlists = [ p for p in playlists if p not in exclude ]
if "Up Next" in self.playlists:
self.playlists[self.playlists.index("Up Next")] = "Queued Tracks"
def run_task(self):
FileTask.run_task(self)
if self.playcount == 0:
return
if track := db.track.Table.lookup(self.filepath):
track.playcount = self.playcount
track.lastplayed = self.lastplayed
db.user.Table.find("New Tracks").remove_track(track)
for plist in self.playlists:
db.user.Table.find(plist).add_track(track)
if self.playcount > 0:
track.playcount = self.playcount
track.lastplayed = self.lastplayed
class DirectoryTask(Task):

View File

@ -17,7 +17,7 @@ class TestScanner(unittest.TestCase):
def test_scanner_import_track(self):
lib = db.library.Table.find(test_album)
scanner.import_track(lib, test_track, 2, datetime.date.today())
scanner.import_track(lib, test_track, 2, datetime.date.today(), [ ])
self.assertIsInstance(scanner.Queue.tasks[0], scanner.task.ImportTask)
def test_scanner_update_library(self):

View File

@ -69,9 +69,11 @@ class TestScannerImportTask(unittest.TestCase):
db.reset()
def test_scanner_import_task(self):
playlists = [ "Collection", "Favorites", "New Tracks",
"Previous", "Up Next", "Test Playlist" ]
today = datetime.date.today()
lib = db.library.Table.find(test_tracks)
it = task.ImportTask(lib, test_track01, 4, today)
it = task.ImportTask(lib, test_track01, 4, today, playlists)
self.assertIsInstance(it, task.FileTask)
self.assertEqual(it.library, lib)
@ -79,6 +81,7 @@ class TestScannerImportTask(unittest.TestCase):
self.assertEqual(it.playcount, 4)
self.assertEqual(it.lastplayed,
datetime.datetime.combine(today, datetime.time()))
self.assertEqual(it.playlists, ["Favorites", "Queued Tracks", "Test Playlist" ])
self.assertIsNone(it.run_task())
@ -86,6 +89,10 @@ class TestScannerImportTask(unittest.TestCase):
self.assertEqual(track.playcount, 4)
self.assertEqual(track.lastplayed,
datetime.datetime.combine(today, datetime.time()))
self.assertEqual(db.user.Table.lookup("Favorites").get_track(0), track)
self.assertEqual(db.user.Table.lookup("Queued Tracks").get_track(0), track)
self.assertEqual(db.user.Table.lookup("Test Playlist").get_track(0), track)
self.assertEqual(db.user.Table.lookup("New Tracks").get_n_tracks(), 0)
class TestScannerDirectoryTask(unittest.TestCase):