def remove_matching_books_from_device(self, *args): if not self.gui.device_manager.is_device_present: d = error_dialog(self.gui, _('Cannot delete books'), _('No device is connected')) d.exec_() return ids = self._get_selected_ids() if not ids: # _get_selected_ids shows a dialog box if nothing is selected, so we # do not need to show one here return to_delete = {} some_to_delete = False for model, name in ((self.gui.memory_view.model(), _('Main memory')), (self.gui.card_a_view.model(), _('Storage Card A')), (self.gui.card_b_view.model(), _('Storage Card B'))): to_delete[name] = (model, model.paths_for_db_ids(ids)) if len(to_delete[name][1]) > 0: some_to_delete = True if not some_to_delete: d = error_dialog(self.gui, _('No books to delete'), _('None of the selected books are on the device')) d.exec_() return d = DeleteMatchingFromDeviceDialog(self.gui, to_delete) if d.exec_(): paths = {} ids = {} for (model, id, path) in d.result: if model not in paths: paths[model] = [] ids[model] = [] paths[model].append(path) ids[model].append(id) cv, row = self.gui.current_view(), -1 if cv is not self.gui.library_view: row = cv.currentIndex().row() for model in paths: job = self.gui.remove_paths(paths[model]) self.delete_memory[job] = (paths[model], model) model.mark_for_deletion(job, ids[model], rows_are_ids=True) self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) if row > -1: nrow = row - 1 if row > 0 else row + 1 cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow)))
def remove_matching_books_from_device(self, *args): if not self.gui.device_manager.is_device_present: d = error_dialog(self.gui, _('Cannot delete books'), _('No device is connected')) d.exec_() return ids = self._get_selected_ids() if not ids: # _get_selected_ids shows a dialog box if nothing is selected, so we # do not need to show one here return to_delete = {} some_to_delete = False for model,name in ((self.gui.memory_view.model(), _('Main memory')), (self.gui.card_a_view.model(), _('Storage Card A')), (self.gui.card_b_view.model(), _('Storage Card B'))): to_delete[name] = (model, model.paths_for_db_ids(ids)) if len(to_delete[name][1]) > 0: some_to_delete = True if not some_to_delete: d = error_dialog(self.gui, _('No books to delete'), _('None of the selected books are on the device')) d.exec_() return d = DeleteMatchingFromDeviceDialog(self.gui, to_delete) if d.exec_(): paths = {} ids = {} for (model, id, path) in d.result: if model not in paths: paths[model] = [] ids[model] = [] paths[model].append(path) ids[model].append(id) cv, row = self.gui.current_view(), -1 if cv is not self.gui.library_view: row = cv.currentIndex().row() for model in paths: job = self.gui.remove_paths(paths[model]) self.delete_memory[job] = (paths[model], model) model.mark_for_deletion(job, ids[model], rows_are_ids=True) self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) if row > -1: nrow = row - 1 if row > 0 else row + 1 cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow)))