mirror of
https://github.com/beetbox/beets.git
synced 2025-12-08 01:23:09 +01:00
Fix album store method to cascade flex field deletions to items
This commit is contained in:
parent
cc33c9c8b8
commit
2c43adf463
3 changed files with 26 additions and 2 deletions
|
|
@ -1355,9 +1355,12 @@ class Album(LibModel):
|
|||
"""
|
||||
# Get modified track fields.
|
||||
track_updates = {}
|
||||
for key in self.item_keys:
|
||||
if key in self._dirty:
|
||||
track_deletes = set()
|
||||
for key in self._dirty:
|
||||
if key in self.item_keys:
|
||||
track_updates[key] = self[key]
|
||||
elif key not in self:
|
||||
track_deletes.add(key);
|
||||
|
||||
with self._db.transaction():
|
||||
super().store(fields)
|
||||
|
|
@ -1366,6 +1369,12 @@ class Album(LibModel):
|
|||
for key, value in track_updates.items():
|
||||
item[key] = value
|
||||
item.store()
|
||||
if track_deletes:
|
||||
for item in self.items():
|
||||
for key in track_deletes:
|
||||
if key in item:
|
||||
del item[key]
|
||||
item.store()
|
||||
|
||||
def try_sync(self, write, move):
|
||||
"""Synchronize the album and its items with the database.
|
||||
|
|
|
|||
|
|
@ -133,6 +133,8 @@ Bug fixes:
|
|||
* :doc:`/plugins/fromfilename`: Fix failed detection of <track> <title>
|
||||
filename patterns.
|
||||
:bug:`4561` :bug:`4600`
|
||||
* Fix issue where deletion of flexible fields on an album doesn't cascade to items
|
||||
:bug:`4662`
|
||||
|
||||
For packagers:
|
||||
|
||||
|
|
|
|||
|
|
@ -77,6 +77,19 @@ class StoreTest(_common.LibTestCase):
|
|||
self.i.store()
|
||||
self.assertTrue('composer' not in self.i._dirty)
|
||||
|
||||
def test_store_album_cascades_flex_deletes(self):
|
||||
album = _common.album()
|
||||
album.flex1="Flex-1"
|
||||
self.lib.add(album)
|
||||
item = _common.item()
|
||||
item.album_id = album.id
|
||||
item.flex1="Flex-1"
|
||||
self.lib.add(item)
|
||||
del album.flex1
|
||||
album.store()
|
||||
self.assertNotIn('flex1', album)
|
||||
self.assertNotIn('flex1', album.items()[0])
|
||||
|
||||
|
||||
class AddTest(_common.TestCase):
|
||||
def setUp(self):
|
||||
|
|
|
|||
Loading…
Reference in a new issue