=== modified file 'xl/trax/track.py' --- xl/trax/track.py 2011-10-31 05:43:29 +0000 +++ xl/trax/track.py 2011-10-31 06:08:28 +0000 @@ -309,6 +309,10 @@ return False # not a supported type f.write_tags(self.__tags) return f + except IOError, e: + # error writing to the file, probably + logger.warning( "Could not write tags to file: %s" % e ) + return False except Exception: common.log_exception(logger) return False === modified file 'xlgui/properties.py' --- xlgui/properties.py 2011-10-31 05:43:29 +0000 +++ xlgui/properties.py 2011-10-31 06:02:58 +0000 @@ -38,6 +38,8 @@ from xl.common import clamp from xl.nls import gettext as _ +from xlgui.widgets import dialogs + IGNORE = (None, None) dialog_tags = { 'originalalbum': (_('Original album'), 'text'), @@ -180,6 +182,7 @@ return l def _tags_write(self, data): + errors = [] dialog = SavingProgressWindow(self.dialog, len(data)) for n, track in data: poplist = [] @@ -208,9 +211,16 @@ for tag in poplist: self.track_refs[n].set_tag_raw(tag, None) - self.track_refs[n].write_tags() + if not self.track_refs[n].write_tags(): + errors.append( self.track_refs[n].get_loc_for_io() ); + dialog.step() dialog.destroy() + + if len(errors) > 0: + dialog = dialogs.ListDialog( "ERROR: Tags could not be written to these files", write_only=True ) + dialog.set_items( errors ) + dialog.run() def _build_from_track(self, track): === modified file 'xlgui/widgets/dialogs.py' --- xlgui/widgets/dialogs.py 2011-06-13 08:45:30 +0000 +++ xlgui/widgets/dialogs.py 2011-10-31 06:01:55 +0000 @@ -337,7 +337,7 @@ Items must define a __str__ method, or be a string """ - def __init__(self, title, parent=None, multiple=False): + def __init__(self, title, parent=None, multiple=False, write_only=False): """ Initializes the dialog """ @@ -355,8 +355,11 @@ scroll.set_shadow_type(gtk.SHADOW_IN) self.vbox.pack_start(scroll, True, True) - self.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_OK, gtk.RESPONSE_OK) + if write_only: + self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK) + else: + self.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK) self.selection = self.list.get_selection()