mirror of
https://github.com/beetbox/beets.git
synced 2025-12-28 19:42:42 +01:00
Merge pull request #676 from geigerzaehler/item-try-write
Add item.try_write() to log errors
This commit is contained in:
commit
4c9daa12cc
12 changed files with 26 additions and 28 deletions
|
|
@ -895,10 +895,7 @@ def manipulate_files(session):
|
|||
item.move(True)
|
||||
|
||||
if config['import']['write'] and task.should_write_tags():
|
||||
try:
|
||||
item.write()
|
||||
except library.FileOperationError as exc:
|
||||
log.error(exc)
|
||||
item.try_write()
|
||||
|
||||
# Save new paths.
|
||||
with session.lib.transaction():
|
||||
|
|
|
|||
|
|
@ -388,6 +388,18 @@ class Item(LibModel):
|
|||
self.mtime = self.current_mtime()
|
||||
plugins.send('after_write', item=self, path=path)
|
||||
|
||||
def try_write(self, path=None):
|
||||
"""Calls `write()` but catches and logs `FileOperationError`s.
|
||||
|
||||
Returns `False` an exception was caught and `True` otherwise.
|
||||
"""
|
||||
try:
|
||||
self.write(path)
|
||||
return True
|
||||
except FileOperationError as exc:
|
||||
log.error(exc)
|
||||
return False
|
||||
|
||||
|
||||
# Files themselves.
|
||||
|
||||
|
|
|
|||
|
|
@ -1135,10 +1135,7 @@ def modify_items(lib, mods, dels, query, write, move, album, confirm):
|
|||
else:
|
||||
changed_items = changed
|
||||
for item in changed_items:
|
||||
try:
|
||||
item.write()
|
||||
except library.FileOperationError as exc:
|
||||
log.error(exc)
|
||||
item.try_write()
|
||||
|
||||
modify_cmd = ui.Subcommand('modify',
|
||||
help='change metadata fields', aliases=('mod',))
|
||||
|
|
@ -1249,10 +1246,7 @@ def write_items(lib, query, pretend):
|
|||
library.Item._media_fields,
|
||||
always=True)
|
||||
if changed and not pretend:
|
||||
try:
|
||||
item.write()
|
||||
except library.FileOperationError as exc:
|
||||
log.error(exc)
|
||||
item.try_write()
|
||||
|
||||
write_cmd = ui.Subcommand('write', help='write tag information to files')
|
||||
write_cmd.parser.add_option('-p', '--pretend', action='store_true',
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ def fingerprint_item(item, write=False):
|
|||
log.info(u'{0}: writing fingerprint'.format(
|
||||
util.displayable_path(item.path)
|
||||
))
|
||||
item.write()
|
||||
item.try_write()
|
||||
if item._db:
|
||||
item.store()
|
||||
return item.acoustid_fingerprint
|
||||
|
|
|
|||
|
|
@ -414,7 +414,7 @@ class EchonestMetadataPlugin(plugins.BeetsPlugin):
|
|||
|
||||
# Write and save.
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
item.store()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ def fetch_item_tempo(lib, loglevel, item, write):
|
|||
(item.artist, item.title))
|
||||
item.bpm = int(tempo)
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
item.store()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -121,6 +121,6 @@ class FtInTitlePlugin(BeetsPlugin):
|
|||
ft_in_title(item)
|
||||
item.store()
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
cmd.func = func
|
||||
return [cmd]
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
|||
))
|
||||
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
|
||||
lastgenre_cmd.func = lastgenre_func
|
||||
return [lastgenre_cmd]
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ class LyricsPlugin(BeetsPlugin):
|
|||
item.lyrics = lyrics
|
||||
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
item.store()
|
||||
|
||||
def get_lyrics(self, artist, title):
|
||||
|
|
|
|||
|
|
@ -38,13 +38,8 @@ def _print_and_apply_changes(lib, item, old_data, move, pretend, write):
|
|||
if move and lib.directory in util.ancestry(item.path):
|
||||
item.move(with_album=False)
|
||||
|
||||
if write:
|
||||
try:
|
||||
item.write()
|
||||
except Exception as exc:
|
||||
log.error(u'could not sync {0}: {1}'.format(
|
||||
util.displayable_path(item.path), exc))
|
||||
return False
|
||||
if write and not item.try_write():
|
||||
return False
|
||||
item.store()
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -547,7 +547,7 @@ class ReplayGainPlugin(BeetsPlugin):
|
|||
album_gain.track_gains):
|
||||
self.store_track_gain(item, track_gain)
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
except ReplayGainError as e:
|
||||
log.warn(u"ReplayGain error: {1}".format(e))
|
||||
except FatalReplayGainError as e:
|
||||
|
|
@ -581,7 +581,7 @@ class ReplayGainPlugin(BeetsPlugin):
|
|||
|
||||
self.store_track_gain(item, track_gains[0])
|
||||
if write:
|
||||
item.write()
|
||||
item.try_write()
|
||||
except ReplayGainError as e:
|
||||
log.warn(u"ReplayGain error: {1}".format(e))
|
||||
except FatalReplayGainError as e:
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class ScrubPlugin(BeetsPlugin):
|
|||
# Restore tags, if enabled.
|
||||
if opts.write:
|
||||
log.debug(u'writing new tags after scrub')
|
||||
item.write()
|
||||
item.try_write()
|
||||
if art:
|
||||
log.info('restoring art')
|
||||
mf = mediafile.MediaFile(item.path)
|
||||
|
|
|
|||
Loading…
Reference in a new issue