示例#1
0
    def merge_books(self, safe_merge=False, merge_only_formats=False):
        '''
        Merge selected books in library.
        '''
        from calibre.gui2.dialogs.confirm_merge import confirm_merge
        if self.gui.current_view() is not self.gui.library_view:
            return
        rows = self.gui.library_view.indices_for_merge()
        if not rows or len(rows) == 0:
            return error_dialog(self.gui,
                                _('Cannot merge books'),
                                _('No books selected'),
                                show=True)
        if len(rows) < 2:
            return error_dialog(
                self.gui,
                _('Cannot merge books'),
                _('At least two books must be selected for merging'),
                show=True)
        if not self.confirm_large_merge(len(rows)):
            return

        dest_id, src_ids = self.books_to_merge(rows)
        mi = self.gui.current_db.new_api.get_proxy_metadata(dest_id)
        title = mi.title
        hpos = self.gui.library_view.horizontalScrollBar().value()
        if safe_merge:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats and metadata from the selected books '
                      'will be added to the <b>first selected book</b> (%s).<br> '
                      'The second and subsequently selected books will not '
                      'be deleted or changed.<br><br>'
                      'Please confirm you want to proceed.') % title + '</p>',
                    'merge_books_safe', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
        elif merge_only_formats:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats from the selected books will be merged '
                      'into the <b>first selected book</b> (%s). '
                      'Metadata in the first selected book will not be changed. '
                      'Author, Title and all other metadata will <i>not</i> be merged.<br><br>'
                      'After being merged, the second and subsequently '
                      'selected books, with any metadata they have will be <b>deleted</b>. <br><br>'
                      'All book formats of the first selected book will be kept '
                      'and any duplicate formats in the second and subsequently selected books '
                      'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                      'Are you <b>sure</b> you want to proceed?') % title +
                    '</p>', 'merge_only_formats', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.delete_books_after_merge(src_ids)
        else:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats and metadata from the selected books will be merged '
                      'into the <b>first selected book</b> (%s).<br><br>'
                      'After being merged, the second and '
                      'subsequently selected books will be <b>deleted</b>. <br><br>'
                      'All book formats of the first selected book will be kept '
                      'and any duplicate formats in the second and subsequently selected books '
                      'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                      'Are you <b>sure</b> you want to proceed?') % title +
                    '</p>', 'merge_books', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
            self.delete_books_after_merge(src_ids)
            # leave the selection highlight on first selected book
            dest_row = rows[0].row()
            for row in rows:
                if row.row() < rows[0].row():
                    dest_row -= 1
            self.gui.library_view.set_current_row(dest_row)
        cr = self.gui.library_view.currentIndex().row()
        self.gui.library_view.model().refresh_ids((dest_id, ), cr)
        self.gui.library_view.horizontalScrollBar().setValue(hpos)
示例#2
0
    def merge_books(self, safe_merge=False, merge_only_formats=False):
        '''
        Merge selected books in library.
        '''
        from calibre.gui2.dialogs.confirm_merge import confirm_merge
        if self.gui.current_view() is not self.gui.library_view:
            return
        rows = self.gui.library_view.indices_for_merge()
        if not rows or len(rows) == 0:
            return error_dialog(self.gui, _('Cannot merge books'),
                                _('No books selected'), show=True)
        if len(rows) < 2:
            return error_dialog(self.gui, _('Cannot merge books'),
                        _('At least two books must be selected for merging'),
                        show=True)
        if not self.confirm_large_merge(len(rows)):
            return

        dest_id, src_ids = self.books_to_merge(rows)
        mi = self.gui.current_db.new_api.get_proxy_metadata(dest_id)
        title = mi.title
        hpos = self.gui.library_view.horizontalScrollBar().value()
        if safe_merge:
            if not confirm_merge('<p>'+_(
                'Book formats and metadata from the selected books '
                'will be added to the <b>first selected book</b> (%s).<br> '
                'The second and subsequently selected books will not '
                'be deleted or changed.<br><br>'
                'Please confirm you want to proceed.')%title + '</p>',
                'merge_books_safe', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
        elif merge_only_formats:
            if not confirm_merge('<p>'+_(
                'Book formats from the selected books will be merged '
                'into the <b>first selected book</b> (%s). '
                'Metadata in the first selected book will not be changed. '
                'Author, Title and all other metadata will <i>not</i> be merged.<br><br>'
                'After being merged, the second and subsequently '
                'selected books, with any metadata they have will be <b>deleted</b>. <br><br>'
                'All book formats of the first selected book will be kept '
                'and any duplicate formats in the second and subsequently selected books '
                'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                'Are you <b>sure</b> you want to proceed?')%title + '</p>',
                'merge_only_formats', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.delete_books_after_merge(src_ids)
        else:
            if not confirm_merge('<p>'+_(
                'Book formats and metadata from the selected books will be merged '
                'into the <b>first selected book</b> (%s).<br><br>'
                'After being merged, the second and '
                'subsequently selected books will be <b>deleted</b>. <br><br>'
                'All book formats of the first selected book will be kept '
                'and any duplicate formats in the second and subsequently selected books '
                'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                'Are you <b>sure</b> you want to proceed?')%title + '</p>',
                'merge_books', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
            self.delete_books_after_merge(src_ids)
            # leave the selection highlight on first selected book
            dest_row = rows[0].row()
            for row in rows:
                if row.row() < rows[0].row():
                    dest_row -= 1
            self.gui.library_view.set_current_row(dest_row)
        cr = self.gui.library_view.currentIndex().row()
        self.gui.library_view.model().refresh_ids((dest_id,), cr)
        self.gui.library_view.horizontalScrollBar().setValue(hpos)
示例#3
0
    def merge_books(self, safe_merge=False, merge_only_formats=False):
        '''
        Merge selected books in library.
        '''
        from calibre.gui2.dialogs.confirm_merge import confirm_merge
        if self.gui.stack.currentIndex() != 0:
            return
        rows = self.gui.library_view.selectionModel().selectedRows()
        if not rows or len(rows) == 0:
            return error_dialog(self.gui, _('Cannot merge books'),
                                _('No books selected'), show=True)
        if len(rows) < 2:
            return error_dialog(self.gui, _('Cannot merge books'),
                        _('At least two books must be selected for merging'),
                        show=True)
        if len(rows) > 5:
            if not confirm('<p>'+_('You are about to merge more than 5 books.  '
                                    'Are you <b>sure</b> you want to proceed?') +
                           '</p>', 'merge_too_many_books', self.gui):
                return

        dest_id, src_ids = self.books_to_merge(rows)
        mi = self.gui.current_db.new_api.get_proxy_metadata(dest_id)
        title = mi.title
        if safe_merge:
            if not confirm_merge('<p>'+_(
                'Book formats and metadata from the selected books '
                'will be added to the <b>first selected book</b> (%s).<br> '
                'The second and subsequently selected books will not '
                'be deleted or changed.<br><br>'
                'Please confirm you want to proceed.')%title +
                           '</p>', 'merge_books_safe', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
        elif merge_only_formats:
            if not confirm_merge('<p>'+_(
                'Book formats from the selected books will be merged '
                'into the <b>first selected book</b> (%s). '
                'Metadata in the first selected book will not be changed. '
                'Author, Title and all other metadata will <i>not</i> be merged.<br><br>'
                'After merger the second and subsequently '
                'selected books, with any metadata they have will be <b>deleted</b>. <br><br>'
                'All book formats of the first selected book will be kept '
                'and any duplicate formats in the second and subsequently selected books '
                'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                'Are you <b>sure</b> you want to proceed?')%title +
                           '</p>', 'merge_only_formats', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.delete_books_after_merge(src_ids)
        else:
            if not confirm_merge('<p>'+_(
                'Book formats and metadata from the selected books will be merged '
                'into the <b>first selected book</b> (%s).<br><br>'
                'After merger the second and '
                'subsequently selected books will be <b>deleted</b>. <br><br>'
                'All book formats of the first selected book will be kept '
                'and any duplicate formats in the second and subsequently selected books '
                'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                'Are you <b>sure</b> you want to proceed?')%title +
                           '</p>', 'merge_books', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
            self.delete_books_after_merge(src_ids)
            # leave the selection highlight on first selected book
            dest_row = rows[0].row()
            for row in rows:
                if row.row() < rows[0].row():
                    dest_row -= 1
            ci = self.gui.library_view.model().index(dest_row, 0)
            if ci.isValid():
                self.gui.library_view.setCurrentIndex(ci)
                self.gui.library_view.model().current_changed(ci, ci)
示例#4
0
    def merge_books(self, safe_merge=False, merge_only_formats=False):
        """
        Merge selected books in library.
        """
        from calibre.gui2.dialogs.confirm_merge import confirm_merge

        if self.gui.stack.currentIndex() != 0:
            return
        rows = self.gui.library_view.selectionModel().selectedRows()
        if not rows or len(rows) == 0:
            return error_dialog(self.gui, _("Cannot merge books"), _("No books selected"), show=True)
        if len(rows) < 2:
            return error_dialog(
                self.gui, _("Cannot merge books"), _("At least two books must be selected for merging"), show=True
            )
        if len(rows) > 5:
            if not confirm(
                "<p>"
                + _("You are about to merge more than 5 books.  " "Are you <b>sure</b> you want to proceed?")
                + "</p>",
                "merge_too_many_books",
                self.gui,
            ):
                return

        dest_id, src_ids = self.books_to_merge(rows)
        mi = self.gui.current_db.new_api.get_proxy_metadata(dest_id)
        title = mi.title
        hpos = self.gui.library_view.horizontalScrollBar().value()
        if safe_merge:
            if not confirm_merge(
                "<p>"
                + _(
                    "Book formats and metadata from the selected books "
                    "will be added to the <b>first selected book</b> (%s).<br> "
                    "The second and subsequently selected books will not "
                    "be deleted or changed.<br><br>"
                    "Please confirm you want to proceed."
                )
                % title
                + "</p>",
                "merge_books_safe",
                self.gui,
                mi,
            ):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
        elif merge_only_formats:
            if not confirm_merge(
                "<p>"
                + _(
                    "Book formats from the selected books will be merged "
                    "into the <b>first selected book</b> (%s). "
                    "Metadata in the first selected book will not be changed. "
                    "Author, Title and all other metadata will <i>not</i> be merged.<br><br>"
                    "After being merged, the second and subsequently "
                    "selected books, with any metadata they have will be <b>deleted</b>. <br><br>"
                    "All book formats of the first selected book will be kept "
                    "and any duplicate formats in the second and subsequently selected books "
                    "will be permanently <b>deleted</b> from your calibre library.<br><br>  "
                    "Are you <b>sure</b> you want to proceed?"
                )
                % title
                + "</p>",
                "merge_only_formats",
                self.gui,
                mi,
            ):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.delete_books_after_merge(src_ids)
        else:
            if not confirm_merge(
                "<p>"
                + _(
                    "Book formats and metadata from the selected books will be merged "
                    "into the <b>first selected book</b> (%s).<br><br>"
                    "After being merged, the second and "
                    "subsequently selected books will be <b>deleted</b>. <br><br>"
                    "All book formats of the first selected book will be kept "
                    "and any duplicate formats in the second and subsequently selected books "
                    "will be permanently <b>deleted</b> from your calibre library.<br><br>  "
                    "Are you <b>sure</b> you want to proceed?"
                )
                % title
                + "</p>",
                "merge_books",
                self.gui,
                mi,
            ):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
            self.delete_books_after_merge(src_ids)
            # leave the selection highlight on first selected book
            dest_row = rows[0].row()
            for row in rows:
                if row.row() < rows[0].row():
                    dest_row -= 1
            self.gui.library_view.set_current_row(dest_row)
        cr = self.gui.library_view.currentIndex().row()
        self.gui.library_view.model().refresh_ids((dest_id,), cr)
        self.gui.library_view.horizontalScrollBar().setValue(hpos)
示例#5
0
    def merge_books(self, safe_merge=False, merge_only_formats=False):
        '''
        Merge selected books in library.
        '''
        from calibre.gui2.dialogs.confirm_merge import confirm_merge
        if self.gui.stack.currentIndex() != 0:
            return
        rows = self.gui.library_view.selectionModel().selectedRows()
        if not rows or len(rows) == 0:
            return error_dialog(self.gui,
                                _('Cannot merge books'),
                                _('No books selected'),
                                show=True)
        if len(rows) < 2:
            return error_dialog(
                self.gui,
                _('Cannot merge books'),
                _('At least two books must be selected for merging'),
                show=True)
        if len(rows) > 5:
            if not confirm(
                    '<p>' + _('You are about to merge more than 5 books.  '
                              'Are you <b>sure</b> you want to proceed?') +
                    '</p>', 'merge_too_many_books', self.gui):
                return

        dest_id, src_ids = self.books_to_merge(rows)
        mi = self.gui.current_db.new_api.get_proxy_metadata(dest_id)
        title = mi.title
        if safe_merge:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats and metadata from the selected books '
                      'will be added to the <b>first selected book</b> (%s).<br> '
                      'The second and subsequently selected books will not '
                      'be deleted or changed.<br><br>'
                      'Please confirm you want to proceed.') % title + '</p>',
                    'merge_books_safe', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
        elif merge_only_formats:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats from the selected books will be merged '
                      'into the <b>first selected book</b> (%s). '
                      'Metadata in the first selected book will not be changed. '
                      'Author, Title and all other metadata will <i>not</i> be merged.<br><br>'
                      'After merger the second and subsequently '
                      'selected books, with any metadata they have will be <b>deleted</b>. <br><br>'
                      'All book formats of the first selected book will be kept '
                      'and any duplicate formats in the second and subsequently selected books '
                      'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                      'Are you <b>sure</b> you want to proceed?') % title +
                    '</p>', 'merge_only_formats', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.delete_books_after_merge(src_ids)
        else:
            if not confirm_merge(
                    '<p>' +
                    _('Book formats and metadata from the selected books will be merged '
                      'into the <b>first selected book</b> (%s).<br><br>'
                      'After merger the second and '
                      'subsequently selected books will be <b>deleted</b>. <br><br>'
                      'All book formats of the first selected book will be kept '
                      'and any duplicate formats in the second and subsequently selected books '
                      'will be permanently <b>deleted</b> from your calibre library.<br><br>  '
                      'Are you <b>sure</b> you want to proceed?') % title +
                    '</p>', 'merge_books', self.gui, mi):
                return
            self.add_formats(dest_id, self.formats_for_books(rows))
            self.merge_metadata(dest_id, src_ids)
            self.delete_books_after_merge(src_ids)
            # leave the selection highlight on first selected book
            dest_row = rows[0].row()
            for row in rows:
                if row.row() < rows[0].row():
                    dest_row -= 1
            ci = self.gui.library_view.model().index(dest_row, 0)
            if ci.isValid():
                self.gui.library_view.setCurrentIndex(ci)
                self.gui.library_view.model().current_changed(ci, ci)