scanner: Add a CheckTask for checking if tracks still exist
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
7ea14392ec
commit
8946df3ce4
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue