Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)