def __save_files(self, parent, model, library): win = WritingWindow(parent, len(model)) was_changed = set() all_done = False for entry in model.values(): song, track = entry.song, entry.tracknumber if song.get("tracknumber") == track: win.step() continue if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break song["tracknumber"] = track try: song.write() except AudioFileError: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True library.changed(was_changed) win.destroy() self.save.set_sensitive(not all_done) self.revert.set_sensitive(not all_done)
def __save_files(self, parent, model, library): win = WritingWindow(parent, len(model)) was_changed = set() all_done = False for entry in model.itervalues(): song, track = entry.song, entry.tracknumber if song.get("tracknumber") == track: win.step() continue if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break song["tracknumber"] = track try: song.write() except AudioFileError: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True library.changed(was_changed) win.destroy() self.save.set_sensitive(not all_done) self.revert.set_sensitive(not all_done)
def __save(self, addreplace, library): pattern_text = self.combo.get_child().get_text().decode('utf-8') pattern = TagsFromPattern(pattern_text) model = self.view.get_model() add = bool(addreplace.get_active()) win = WritingWindow(self, len(model)) win.show() was_changed = set() all_done = False for entry in ((model and model.itervalues()) or []): song = entry.song changed = False if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break for i, h in enumerate(pattern.headers): text = entry.get_match(h) if text: can_multiple = song.can_multiple_values(h) if not add or h not in song or not can_multiple: song[h] = text changed = True else: for val in text.split("\n"): if val not in song.list(h): song.add(h, val) changed = True if changed: try: song.write() except: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True win.destroy() library.changed(was_changed) self.save.set_sensitive(not all_done)
def __save(self, addreplace, library): pattern_text = gdecode(self.combo.get_child().get_text()) pattern = TagsFromPattern(pattern_text) model = self.view.get_model() add = bool(addreplace.get_active()) win = WritingWindow(self, len(model)) win.show() was_changed = set() all_done = False for entry in ((model and model.itervalues()) or []): song = entry.song changed = False if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break for i, h in enumerate(pattern.headers): text = entry.get_match(h) if text: can_multiple = song.can_multiple_values(h) if not add or h not in song or not can_multiple: song[h] = text changed = True else: for val in text.split("\n"): if val not in song.list(h): song.add(h, val) changed = True if changed: try: song.write() except AudioFileError: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True win.destroy() library.changed(was_changed) self.save.set_sensitive(not all_done)
def __save_files(self, save, revert, model, library): updated = {} deleted = {} added = {} renamed = {} for entry in model.values(): if entry.edited and not (entry.deleted or entry.renamed): if entry.origvalue is not None: l = updated.setdefault(entry.tag, []) l.append((entry.value, entry.origvalue)) else: l = added.setdefault(entry.tag, []) l.append(entry.value) if entry.edited and entry.deleted: if entry.origvalue is not None: l = deleted.setdefault(entry.tag, []) l.append(entry.origvalue) if entry.edited and entry.renamed and not entry.deleted: l = renamed.setdefault(entry.tag, []) l.append((entry.origtag, entry.value, entry.origvalue)) was_changed = set() songs = self.__songinfo.songs win = WritingWindow(self, len(songs)) win.show() all_done = False for song in songs: if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break changed = False for key, values in updated.items(): for (new_value, old_value) in values: if song.can_change(key): if old_value is None: song.add(key, new_value.text) else: song.change(key, old_value.text, new_value.text) changed = True for key, values in added.items(): for value in values: if song.can_change(key): song.add(key, value.text) changed = True for key, values in deleted.items(): for value in values: if not value.shared: # In case it isn't shared we don't know the actual # values to remove. But we know that in that case # we merge all values into one Comment so just removing # everything for that key is OK. song.remove(key, None) changed = True elif key in song: song.remove(key, value.text) changed = True save_rename = [] for new_tag, values in renamed.items(): for old_tag, new_value, old_value in values: if (song.can_change(new_tag) and old_tag in song): if not new_value.is_special(): song.remove(old_tag, old_value.text) save_rename.append((new_tag, new_value)) elif new_value.is_missing(): song.remove(old_tag, old_value) save_rename.append((new_tag, new_value)) else: save_rename.append( (new_tag, Comment(song[old_tag]))) song.remove(old_tag, None) changed = True for tag, value in save_rename: song.add(tag, value.text) if changed: try: song.write() except AudioFileError: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True win.destroy() library.changed(was_changed) for b in [save, revert]: b.set_sensitive(not all_done)
def test_overwrite(self): OverwriteWarning(None, DUMMY_SONG).destroy()
def __save_files(self, save, revert, model, library): updated = {} deleted = {} added = {} renamed = {} for entry in itervalues(model): if entry.edited and not (entry.deleted or entry.renamed): if entry.origvalue is not None: l = updated.setdefault(entry.tag, []) l.append((entry.value, entry.origvalue)) else: l = added.setdefault(entry.tag, []) l.append(entry.value) if entry.edited and entry.deleted: if entry.origvalue is not None: l = deleted.setdefault(entry.tag, []) l.append(entry.origvalue) if entry.edited and entry.renamed and not entry.deleted: l = renamed.setdefault(entry.tag, []) l.append((entry.origtag, entry.value, entry.origvalue)) was_changed = set() songs = self.__songinfo.songs win = WritingWindow(self, len(songs)) win.show() all_done = False for song in songs: if not song.valid(): win.hide() dialog = OverwriteWarning(self, song) resp = dialog.run() win.show() if resp != OverwriteWarning.RESPONSE_SAVE: break changed = False for key, values in iteritems(updated): for (new_value, old_value) in values: if song.can_change(key): if old_value is None: song.add(key, new_value.text) else: song.change(key, old_value.text, new_value.text) changed = True for key, values in iteritems(added): for value in values: if song.can_change(key): song.add(key, value.text) changed = True for key, values in iteritems(deleted): for value in values: if not value.shared: # In case it isn't shared we don't know the actual # values to remove. But we know that in that case # we merge all values into one Comment so just removing # everything for that key is OK. song.remove(key, None) changed = True elif key in song: song.remove(key, value.text) changed = True save_rename = [] for new_tag, values in iteritems(renamed): for old_tag, new_value, old_value in values: if (song.can_change(new_tag) and old_tag in song): if not new_value.is_special(): song.remove(old_tag, old_value.text) save_rename.append((new_tag, new_value)) elif new_value.is_missing(): song.remove(old_tag, old_value) save_rename.append((new_tag, new_value)) else: save_rename.append( (new_tag, Comment(song[old_tag]))) song.remove(old_tag, None) changed = True for tag, value in save_rename: song.add(tag, value.text) if changed: try: song.write() except AudioFileError: util.print_exc() WriteFailedError(self, song).run() library.reload(song, changed=was_changed) break was_changed.add(song) if win.step(): break else: all_done = True win.destroy() library.changed(was_changed) for b in [save, revert]: b.set_sensitive(not all_done)