Device view: Preserve position in list of books when deleting books from the device view

This commit is contained in:
Kovid Goyal 2015-04-09 12:06:02 +05:30
parent 3450e3109d
commit b4c01accb1
2 changed files with 13 additions and 2 deletions

View File

@ -302,7 +302,7 @@ class DeleteAction(InterfaceAction):
self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) self.gui.status_bar.show_message(_('Deleting books from device.'), 1000)
if row > -1: if row > -1:
nrow = row - 1 if row > 0 else row + 1 nrow = row - 1 if row > 0 else row + 1
cv.set_current_row(max(0, nrow)) cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow)))
def delete_covers(self, *args): def delete_covers(self, *args):
ids = self._get_selected_ids() ids = self._get_selected_ids()
@ -421,4 +421,4 @@ class DeleteAction(InterfaceAction):
self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) self.gui.status_bar.show_message(_('Deleting books from device.'), 1000)
if row > -1: if row > -1:
nrow = row - 1 if row > 0 else row + 1 nrow = row - 1 if row > 0 else row + 1
cv.set_current_row(max(0, nrow)) cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow)))

View File

@ -1168,6 +1168,9 @@ class DeviceMixin(object): # {{{
''' '''
Called once deletion is done on the device Called once deletion is done on the device
''' '''
cv, row = self.current_view(), -1
if cv is not self.library_view:
row = cv.currentIndex().row()
for view in (self.memory_view, self.card_a_view, self.card_b_view): for view in (self.memory_view, self.card_a_view, self.card_b_view):
view.model().deletion_done(job, job.failed) view.model().deletion_done(job, job.failed)
if job.failed: if job.failed:
@ -1186,11 +1189,14 @@ class DeviceMixin(object): # {{{
# if set_books_in_library did not. # if set_books_in_library did not.
if not self.set_books_in_library(self.booklists(), reset=True, if not self.set_books_in_library(self.booklists(), reset=True,
add_as_step_to_job=job, do_device_sync=False): add_as_step_to_job=job, do_device_sync=False):
self.upload_booklists(job) self.upload_booklists(job)
# We need to reset the ondevice flags in the library. Use a big hammer, # We need to reset the ondevice flags in the library. Use a big hammer,
# so we don't need to worry about whether some succeeded or not. # so we don't need to worry about whether some succeeded or not.
self.refresh_ondevice() self.refresh_ondevice()
if row > -1:
cv.set_current_row(row)
try: try:
if not self.current_view().currentIndex().isValid(): if not self.current_view().currentIndex().isValid():
self.current_view().set_current_row() self.current_view().set_current_row()
@ -1568,9 +1574,14 @@ class DeviceMixin(object): # {{{
self.device_manager.device.icon) self.device_manager.device.icon)
# reset the views so that up-to-date info is shown. These need to be # reset the views so that up-to-date info is shown. These need to be
# here because some drivers update collections in sync_booklists # here because some drivers update collections in sync_booklists
cv, row = self.current_view(), -1
if cv is not self.library_view:
row = cv.currentIndex().row()
self.memory_view.reset() self.memory_view.reset()
self.card_a_view.reset() self.card_a_view.reset()
self.card_b_view.reset() self.card_b_view.reset()
if row > -1:
cv.set_current_row(row)
def _upload_collections(self, job): def _upload_collections(self, job):
if job.failed: if job.failed: