Fix Find Duplicate People; exception when deleting someone shown (#728)

outside of the tool
Fixes #10875
This commit is contained in:
Paul Culley 2018-11-28 16:42:03 -06:00 committed by Sam Manzi
parent dd43cde20e
commit a99c02d9a7

View File

@ -540,7 +540,7 @@ class DuplicatePeopleToolMatches(ManagedWindow):
def __init__(self, dbstate, uistate, track, the_list, the_map, callback): def __init__(self, dbstate, uistate, track, the_list, the_map, callback):
ManagedWindow.__init__(self,uistate,track,self.__class__) ManagedWindow.__init__(self,uistate,track,self.__class__)
self.dellist = {} self.dellist = set()
self.list = the_list self.list = the_list
self.map = the_map self.map = the_map
self.length = len(self.list) self.length = len(self.list)
@ -566,6 +566,7 @@ class DuplicatePeopleToolMatches(ManagedWindow):
"on_delete_merge_event" : self.__dummy, "on_delete_merge_event" : self.__dummy,
"on_delete_event" : self.__dummy, "on_delete_event" : self.__dummy,
}) })
self.db.connect("person-delete", self.person_delete)
mtitles = [ mtitles = [
(_('Rating'),3,75), (_('Rating'),3,75),
@ -621,16 +622,10 @@ class DuplicatePeopleToolMatches(ManagedWindow):
def on_update(self): def on_update(self):
if self.db.has_person_handle(self.p1): if self.db.has_person_handle(self.p1):
phoenix = self.p1
titanic = self.p2 titanic = self.p2
else: else:
phoenix = self.p2
titanic = self.p1 titanic = self.p1
self.dellist.add(titanic)
self.dellist[titanic] = phoenix
for key, data in self.dellist.items():
if data == titanic:
self.dellist[key] = phoenix
self.update() self.update()
self.redraw() self.redraw()
@ -638,6 +633,11 @@ class DuplicatePeopleToolMatches(ManagedWindow):
self.update(1) self.update(1)
self.close() self.close()
def person_delete(self, handle_list):
""" deal with person deletes outside of the tool """
self.dellist.update(handle_list)
self.redraw()
def __dummy(self, obj): def __dummy(self, obj):
"""dummy callback, needed because a shared glade file is used for """dummy callback, needed because a shared glade file is used for
both toplevel windows and all signals must be handled. both toplevel windows and all signals must be handled.