scanner: Add a CheckTask for checking if tracks still exist

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-08-25 16:09:18 -04:00
parent 7ea14392ec
commit 8946df3ce4
2 changed files with 38 additions and 0 deletions

View File

@ -61,3 +61,18 @@ class DirectoryTask(Task):
res.append(DirectoryTask(self.library, f))
res.append(CommitTask())
return res
class CheckTask(Task):
def __init__(self, tracks):
Task.__init__(self)
self.tracks = tracks
def run_task(self):
need_commit = False
for track in self.tracks:
if not track.path.exists():
db.track.Table.delete(track)
need_commit = True
if need_commit:
db.commit()

View File

@ -107,3 +107,26 @@ class TestScannerDirectoryTask(unittest.TestCase):
self.assertEqual(len(file_tasks), 13)
self.assertEqual(len(dir_tasks), 1)
self.assertEqual(len(commit_task), 1)
class TestScannerCheckTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_scanner_check_task(self):
lib = db.library.Table.find(test_tracks)
for i in [ 1, 2, 3 ]:
db.make_fake_track(i, i, f"Test Track {i}", f"{lib.path}/{i}.ogg", lib.path)
track = db.make_fake_track(4, 4, "data/Test Album/04 - Test (Disc Two).ogg", lib.path)
tracks = [ db.track.Table.get(i) for i in [ 1, 2, 3, 4 ] ]
ct = task.CheckTask(tracks)
self.assertIsInstance(ct, task.Task)
self.assertEqual(ct.tracks, tracks)
self.assertIsNone(ct.run_task())
self.assertIsNone(db.track.Table.get(1))
self.assertIsNone(db.track.Table.get(2))
self.assertIsNone(db.track.Table.get(3))
self.assertEqual(db.track.Table.get(4), track)