mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +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:
|
||||
if item.track:
|
||||
index = item.track - 1
|
||||
ordered_items[index] = item
|
||||
|
||||
# Make sure the index is valid.
|
||||
if index in available_indices:
|
||||
available_indices.remove(index)
|
||||
else:
|
||||
# Same index used twice.
|
||||
return None
|
||||
|
||||
# Apply index.
|
||||
ordered_items[index] = item
|
||||
|
||||
else:
|
||||
# If we have any item without an index, give up.
|
||||
return None
|
||||
|
|
@ -144,6 +149,8 @@ def _order_items_meta(items):
|
|||
# Not all indices were used.
|
||||
return None
|
||||
|
||||
return ordered_items
|
||||
|
||||
def _order_items_match(items, trackinfo):
|
||||
"""Orders the items based on how they match some canonical track
|
||||
information. This always produces a result if the numbers of tracks
|
||||
|
|
|
|||
|
|
@ -193,6 +193,34 @@ class AlbumsInDirTest(unittest.TestCase):
|
|||
else:
|
||||
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():
|
||||
return unittest.TestLoader().loadTestsFromName(__name__)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue