Faster Multiple Event delete
This commit is contained in:
parent
31bf3edf17
commit
dd63d479cd
@ -41,6 +41,7 @@ from gramps.gen.const import GRAMPS_LOCALE as glocale
|
|||||||
_ = glocale.translation.sgettext
|
_ = glocale.translation.sgettext
|
||||||
|
|
||||||
from gramps.gui.dialog import ErrorDialog, MultiSelectDialog, QuestionDialog
|
from gramps.gui.dialog import ErrorDialog, MultiSelectDialog, QuestionDialog
|
||||||
|
from gramps.gen.db import DbTxn
|
||||||
from gramps.gen.errors import WindowActiveError
|
from gramps.gen.errors import WindowActiveError
|
||||||
from gramps.gen.lib import Event
|
from gramps.gen.lib import Event
|
||||||
from gramps.gen.utils.string import data_recover_msg
|
from gramps.gen.utils.string import data_recover_msg
|
||||||
@ -391,6 +392,7 @@ class EventView(ListView):
|
|||||||
handles,
|
handles,
|
||||||
self.dbstate.db.get_event_from_handle,
|
self.dbstate.db.get_event_from_handle,
|
||||||
yes_func=self.delete_event_response,
|
yes_func=self.delete_event_response,
|
||||||
|
multi_yes_func=self.delete_multi_event_response,
|
||||||
parent=self.uistate.window)
|
parent=self.uistate.window)
|
||||||
|
|
||||||
def _message1_format(self, event):
|
def _message1_format(self, event):
|
||||||
@ -419,6 +421,48 @@ class EventView(ListView):
|
|||||||
person_list, family_list)
|
person_list, family_list)
|
||||||
query.query_response()
|
query.query_response()
|
||||||
|
|
||||||
|
def delete_multi_event_response(self, handles=None):
|
||||||
|
"""
|
||||||
|
Deletes multiple events from the database.
|
||||||
|
"""
|
||||||
|
# set the busy cursor, so the user knows that we are working
|
||||||
|
self.uistate.set_busy_cursor(True)
|
||||||
|
self.uistate.progress.show()
|
||||||
|
self.uistate.push_message(self.dbstate, _("Processing..."))
|
||||||
|
hndl_cnt = len(handles) / 100
|
||||||
|
_db = self.dbstate.db
|
||||||
|
_db.disable_signals()
|
||||||
|
|
||||||
|
# create the transaction
|
||||||
|
with DbTxn('', _db) as trans:
|
||||||
|
for (indx, handle) in enumerate(handles):
|
||||||
|
ev_handle_list = [handle]
|
||||||
|
|
||||||
|
person_list = [
|
||||||
|
item[1] for item in
|
||||||
|
_db.find_backlink_handles(handle, ['Person'])]
|
||||||
|
for hndl in person_list:
|
||||||
|
person = _db.get_person_from_handle(hndl)
|
||||||
|
person.remove_handle_references('Event', ev_handle_list)
|
||||||
|
_db.commit_person(person, trans)
|
||||||
|
|
||||||
|
family_list = [
|
||||||
|
item[1] for item in
|
||||||
|
_db.find_backlink_handles(handle, ['Family'])]
|
||||||
|
for hndl in family_list:
|
||||||
|
family = _db.get_family_from_handle(hndl)
|
||||||
|
family.remove_handle_references('Event', ev_handle_list)
|
||||||
|
_db.commit_family(family, trans)
|
||||||
|
|
||||||
|
_db.remove_event(handle, trans)
|
||||||
|
self.uistate.pulse_progressbar(indx / hndl_cnt)
|
||||||
|
trans.set_description(_("Multiple Selection Delete"))
|
||||||
|
|
||||||
|
_db.enable_signals()
|
||||||
|
_db.request_rebuild()
|
||||||
|
self.uistate.progress.hide()
|
||||||
|
self.uistate.set_busy_cursor(False)
|
||||||
|
|
||||||
def remove_object_from_handle(self, handle):
|
def remove_object_from_handle(self, handle):
|
||||||
"""
|
"""
|
||||||
The remove_selected_objects method is not called in this view.
|
The remove_selected_objects method is not called in this view.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user