def cb_merge(self, obj): """ Performs the merge of the citations when the merge button is clicked. """ self.uistate.set_busy_cursor(True) use_handle1 = self.get_widget("handle_btn1").get_active() if use_handle1: phoenix = self.citation1 titanic = self.citation2 else: phoenix = self.citation2 titanic = self.citation1 # Add second handle to history so that when merge is complete, # phoenix is the selected row. self.uistate.set_active(phoenix.get_handle(), 'Citation') if self.get_widget("page_btn1").get_active() ^ use_handle1: phoenix.set_page(titanic.get_page()) if self.get_widget("date_btn1").get_active() ^ use_handle1: phoenix.set_date_object(titanic.get_date_object()) if self.get_widget("confidence_btn1").get_active() ^ use_handle1: phoenix.set_confidence_level(titanic.get_confidence_level()) if self.get_widget("gramps_btn1").get_active() ^ use_handle1: phoenix.set_gramps_id(titanic.get_gramps_id()) query = MergeCitationQuery(self.dbstate, phoenix, titanic) query.execute() self.uistate.set_busy_cursor(False) self.close()
def cb_merge(self, obj): """ Performs the merge of the citations when the merge button is clicked. """ self.uistate.set_busy_cursor(True) use_handle1 = self.get_widget("handle_btn1").get_active() if use_handle1: phoenix = self.citation1 titanic = self.citation2 else: phoenix = self.citation2 titanic = self.citation1 # Add second handle to history so that when merge is complete, # phoenix is the selected row. self.uistate.set_active(phoenix.get_handle(), 'Citation') if self.get_widget("page_btn1").get_active() ^ use_handle1: phoenix.set_page(titanic.get_page()) if self.get_widget("date_btn1").get_active() ^ use_handle1: phoenix.set_date_object(titanic.get_date_object()) if self.get_widget("confidence_btn1").get_active() ^ use_handle1: phoenix.set_confidence_level(titanic.get_confidence_level()) if self.get_widget("gramps_btn1").get_active() ^ use_handle1: phoenix.set_gramps_id(titanic.get_gramps_id()) query = MergeCitationQuery(self.dbstate, phoenix, titanic) query.execute() self.uistate.set_busy_cursor(False) self.close()
def on_merge_ok_clicked(self, obj): """ Performs the actual merge of citations (Derived from ExtractCity) """ fields = self.menu.get_model()[self.menu.get_active()][1] dont_merge_notes = int(self.notes_obj.get_active()) LOG.debug("fields %d dont_merge_notes %d" % (fields, dont_merge_notes)) self.options.handler.options_dict['fields'] = fields self.options.handler.options_dict[ 'dont_merge_notes'] = dont_merge_notes # Save options self.options.handler.save_options() self.progress = ProgressMeter(_('Checking Sources'), '') self.progress.set_pass(_('Looking for citation fields'), self.db.get_number_of_citations()) db = self.dbstate.db db.disable_signals() num_merges = 0 for handle in db.iter_source_handles(): dict = {} citation_handle_list = list(db.find_backlink_handles(handle)) for (class_name, citation_handle) in citation_handle_list: if class_name != Citation.__name__: raise MergeError("Encountered an object of type %s " "that has a citation reference." % class_name) citation = db.get_citation_from_handle(citation_handle) if citation is None: continue key = citation.get_page() if fields != IGNORE_DATE and fields != IGNORE_BOTH: key += "\n" + get_date(citation) if fields != IGNORE_CONFIDENCE and fields != IGNORE_BOTH: key += "\n" + \ conf_strings[citation.get_confidence_level()] if key in dict and \ (not dont_merge_notes or len(citation.note_list) == 0): citation_match_handle = dict[key] citation_match = \ db.get_citation_from_handle(citation_match_handle) try: query = MergeCitationQuery(self.dbstate, citation_match, citation) query.execute() except AssertionError: print("Tool/Family Tree processing/MergeCitations", \ "citation1 gramps_id", citation_match.get_gramps_id(), \ "citation2 gramps_id", citation.get_gramps_id() , \ "citation backlink handles", \ list(db.find_backlink_handles(citation.get_handle()))) num_merges += 1 elif (not dont_merge_notes or len(citation.note_list) == 0): dict[key] = citation_handle self.progress.step() db.enable_signals() db.request_rebuild() self.progress.close() OkDialog( _("Number of merges done"), # translators: leave all/any {...} untranslated ngettext("{number_of} citation merged", "{number_of} citations merged", num_merges).format(number_of=num_merges)) self.close(obj)
def run_tool(self): try: obj_type = self.options.handler.options_dict['type'] primary_id = self.options.handler.options_dict['primary'] secondary_id = self.options.handler.options_dict['secondary'] if not primary_id or not secondary_id: raise MergeError( "Both primary and secondary object IDs need to " "be specified.") if not obj_type: id2type = { 'I': 'Person', 'F': 'Family', 'E': 'Event', 'P': 'Place', 'C': 'Citation', 'S': 'Source', 'R': 'Repository', 'O': 'Media', 'N': 'Note' } obj_type = id2type[primary_id[0]] database = self.dbstate.db primary = database.get_from_name_and_gramps_id( obj_type, primary_id) secondary = database.get_from_name_and_gramps_id( obj_type, secondary_id) if not primary or not secondary: raise MergeError("Can't get object from ID.") if type(primary) != type(secondary): raise MergeError("Primary and secondary object need to be of " "the same type.") if obj_type == 'Person': from gramps.gen.merge import MergePersonQuery query = MergePersonQuery(database, primary, secondary) elif obj_type == 'Family': # TODO make sure father_handle is in phoenix or titanic father_handle = self.options.handler.options_dict['father_h'] mother_handle = self.options.handler.options_dict['mother_h'] from gramps.gen.merge import MergeFamilyQuery query = MergeFamilyQuery(database, primary, secondary, father_handle, mother_handle) elif obj_type == 'Event': from gramps.gen.merge import MergeEventQuery query = MergeEventQuery(self.dbstate, primary, secondary) elif obj_type == 'Place': from gramps.gen.merge import MergePlaceQuery query = MergePlaceQuery(self.dbstate, primary, secondary) elif obj_type == 'Citation': from gramps.gen.merge import MergeCitationQuery query = MergeCitationQuery(self.dbstate, primary, secondary) elif obj_type == 'Source': from gramps.gen.merge import MergeSourceQuery query = MergeSourceQuery(self.dbstate, primary, secondary) elif obj_type == 'Repository': from gramps.gen.merge import MergeRepositoryQuery query = MergeRepositoryQuery(self.dbstate, primary, secondary) elif obj_type == 'Media': from gramps.gen.merge import MergeMediaQuery query = MergeMediaQuery(self.dbstate, primary, secondary) elif obj_type == 'Note': from gramps.gen.merge import MergeNoteQuery query = MergeNoteQuery(self.dbstate, primary, secondary) else: raise MergeError(("Merge for %s not implemented.") % \ str(type(primary))) query.execute() except MergeError as err: print(err, file=sys.stderr)
def on_merge_ok_clicked(self, obj): """ Performs the actual merge of citations (Derived from ExtractCity) """ fields = self.menu.get_model()[self.menu.get_active()][1] dont_merge_notes = int(self.notes_obj.get_active()) LOG.debug("fields %d dont_merge_notes %d" % (fields, dont_merge_notes)) self.options.handler.options_dict['fields'] = fields self.options.handler.options_dict['dont_merge_notes'] = dont_merge_notes # Save options self.options.handler.save_options() self.progress = ProgressMeter(_('Checking Sources'), '', parent=self.window) self.progress.set_pass(_('Looking for citation fields'), self.db.get_number_of_citations()) db = self.dbstate.db db.disable_signals() num_merges = 0 for handle in db.iter_source_handles(): dict = {} citation_handle_list = list(db.find_backlink_handles(handle)) for (class_name, citation_handle) in citation_handle_list: if class_name != Citation.__name__: raise MergeError("Encountered an object of type %s " "that has a citation reference." % class_name) citation = db.get_citation_from_handle(citation_handle) if citation is None: continue key = citation.get_page() if fields != IGNORE_DATE and fields != IGNORE_BOTH: key += "\n" + get_date(citation) if fields != IGNORE_CONFIDENCE and fields != IGNORE_BOTH: key += "\n" + \ conf_strings[citation.get_confidence_level()] if key in dict and \ (not dont_merge_notes or len(citation.note_list) == 0): citation_match_handle = dict[key] citation_match = \ db.get_citation_from_handle(citation_match_handle) try: query = MergeCitationQuery( self.dbstate, citation_match, citation) query.execute() except AssertionError: print("Tool/Family Tree processing/MergeCitations", \ "citation1 gramps_id", citation_match.get_gramps_id(), \ "citation2 gramps_id", citation.get_gramps_id() , \ "citation backlink handles", \ list(db.find_backlink_handles(citation.get_handle()))) num_merges += 1 elif (not dont_merge_notes or len(citation.note_list) == 0): dict[key] = citation_handle self.progress.step() db.enable_signals() db.request_rebuild() self.progress.close() OkDialog(_("Number of merges done"), # translators: leave all/any {...} untranslated ngettext("{number_of} citation merged", "{number_of} citations merged", num_merges ).format(number_of=num_merges), parent=self.window) self.close(obj)