mirror of
https://github.com/beetbox/beets.git
synced 2025-12-07 09:04:33 +01:00
fixed handling of misnumbered tracks during ordering
This commit is contained in:
parent
67bfa2275f
commit
85b4d9a129
2 changed files with 36 additions and 1 deletions
|
|
@ -130,12 +130,17 @@ def _order_items_meta(items):
|
||||||
for item in items:
|
for item in items:
|
||||||
if item.track:
|
if item.track:
|
||||||
index = item.track - 1
|
index = item.track - 1
|
||||||
ordered_items[index] = item
|
|
||||||
|
# Make sure the index is valid.
|
||||||
if index in available_indices:
|
if index in available_indices:
|
||||||
available_indices.remove(index)
|
available_indices.remove(index)
|
||||||
else:
|
else:
|
||||||
# Same index used twice.
|
# Same index used twice.
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# Apply index.
|
||||||
|
ordered_items[index] = item
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# If we have any item without an index, give up.
|
# If we have any item without an index, give up.
|
||||||
return None
|
return None
|
||||||
|
|
@ -143,6 +148,8 @@ def _order_items_meta(items):
|
||||||
if available_indices:
|
if available_indices:
|
||||||
# Not all indices were used.
|
# Not all indices were used.
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
return ordered_items
|
||||||
|
|
||||||
def _order_items_match(items, trackinfo):
|
def _order_items_match(items, trackinfo):
|
||||||
"""Orders the items based on how they match some canonical track
|
"""Orders the items based on how they match some canonical track
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,34 @@ class AlbumsInDirTest(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
self.assertEqual(len(album), 1)
|
self.assertEqual(len(album), 1)
|
||||||
|
|
||||||
|
class OrderingTest(unittest.TestCase):
|
||||||
|
def test_metaorder_fails_on_duplicated_tracknum(self):
|
||||||
|
items = []
|
||||||
|
items.append(Item({'title': 'two', 'track': 2}))
|
||||||
|
items.append(Item({'title': 'one', 'track': 1}))
|
||||||
|
items.append(Item({'title': 'twoagain', 'track': 2}))
|
||||||
|
ordered = autotag._order_items_meta(items)
|
||||||
|
self.assertEqual(ordered, None)
|
||||||
|
|
||||||
|
def test_metaorder_fails_on_too_high_tracknum(self):
|
||||||
|
items = []
|
||||||
|
items.append(Item({'title': 'four', 'track': 4}))
|
||||||
|
items.append(Item({'title': 'one', 'track': 1}))
|
||||||
|
items.append(Item({'title': 'two', 'track': 2}))
|
||||||
|
ordered = autotag._order_items_meta(items)
|
||||||
|
self.assertEqual(ordered, None)
|
||||||
|
|
||||||
|
def test_metaorder_correct(self):
|
||||||
|
items = []
|
||||||
|
items.append(Item({'title': 'three', 'track': 3}))
|
||||||
|
items.append(Item({'title': 'one', 'track': 1}))
|
||||||
|
items.append(Item({'title': 'two', 'track': 2}))
|
||||||
|
ordered = autotag._order_items_meta(items)
|
||||||
|
self.assertEqual(ordered[0].title, 'one')
|
||||||
|
self.assertEqual(ordered[1].title, 'two')
|
||||||
|
self.assertEqual(ordered[2].title, 'three')
|
||||||
|
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
return unittest.TestLoader().loadTestsFromName(__name__)
|
return unittest.TestLoader().loadTestsFromName(__name__)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue