def addScrollArea(self): """ Add the content to the scrollArea. """ self.checkBox = {} for number, filename in enumerate(self.files): bible = OldBibleDB(self.media_item, path=self.path, file=filename[0]) self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents) self.checkBox[number].setObjectName('checkBox[%d]' % number) self.checkBox[number].setText(bible.get_name()) self.checkBox[number].setCheckState(QtCore.Qt.Checked) self.formLayout.addWidget(self.checkBox[number]) self.spacer_item = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.formLayout.addItem(self.spacer_item) self.scrollArea.setWidget(self.scrollAreaContents)
def performWizard(self): """ Perform the actual upgrade. """ self.includeWebBible = False proxy_server = None if not self.files: self.progress_label.setText(translate('BiblesPlugin.UpgradeWizardForm', 'There are no Bibles that need to be upgraded.')) self.progress_bar.hide() return max_bibles = 0 for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 old_bible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. if old_bible is not None: old_bible.close_connection() # Set to None to make obvious that we have already closed the # database. old_bible = None if self.stop_import_flag: self.success[number] = False break if not self.checkBox[number].checkState() == QtCore.Qt.Checked: self.success[number] = False continue self.progress_bar.reset() old_bible = OldBibleDB(self.media_item, path=self.temp_dir, file=filename[0]) name = filename[1] self.progress_label.setText(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...') % (number + 1, max_bibles, name)) self.new_bibles[number] = BibleDB(self.media_item, path=self.path, name=name, file=filename[0]) self.new_bibles[number].register(self.plugin.upgrade_wizard) metadata = old_bible.get_metadata() web_bible = False meta_data = {} for meta in metadata: # Upgrade the names of the metadata keys if meta['key'] == 'Version': meta['key'] = 'name' if meta['key'] == 'Bookname language': meta['key'] = 'book_name_language' meta['key'] = meta['key'].lower().replace(' ', '_') # Copy the metadata meta_data[meta['key']] = meta['value'] if meta['key'] != 'name' and meta['key'] != 'dbversion': self.new_bibles[number].save_meta(meta['key'], meta['value']) if meta['key'] == 'download_source': web_bible = True self.includeWebBible = True proxy_server = meta.get('proxy_server') if web_bible: if meta_data['download_source'].lower() == 'crosswalk': handler = CWExtract(proxy_server) elif meta_data['download_source'].lower() == 'biblegateway': handler = BGExtract(proxy_server) elif meta_data['download_source'].lower() == 'bibleserver': handler = BSExtract(proxy_server) books = handler.get_books_from_http(meta_data['download_name']) if not books: log.error('Upgrading books from %s - download name: "%s" failed' % ( meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', 'Download Error'), translate('BiblesPlugin.UpgradeWizardForm', 'To upgrade your Web Bibles an Internet connection is required.')) self.increment_progress_bar(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( meta_data['download_name'], meta_data['download_source'].lower()) if bible and bible['language_id']: language_id = bible['language_id'] self.new_bibles[number].save_meta('language_id', language_id) else: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warn('Upgrading from "%s" failed' % filename[0]) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book)) book_ref_id = self.new_bibles[number].\ get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: log.warn('Upgrading books from %s - download name: "%s" aborted by user' % ( meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.new_bibles[number].create_book(book, book_ref_id, book_details['testament_id']) # Try to import already downloaded verses. oldbook = old_bible.get_book(book) if oldbook: verses = old_bible.get_verses(oldbook['id']) if not verses: log.warn('No verses found to import for book "%s"', book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse(db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() else: language_id = self.new_bibles[number].get_object(BibleMeta, 'language_id') if not language_id: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warn('Upgrading books from "%s" failed' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue books = old_bible.get_books() self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book['name'])) book_ref_id = self.new_bibles[number].get_book_ref_id_by_name(book['name'], len(books), language_id) if not book_ref_id: log.warn('Upgrading books from %s " failed - aborted by user' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.new_bibles[number].create_book(book['name'], book_ref_id, book_details['testament_id']) verses = old_bible.get_verses(book['id']) if not verses: log.warn('No verses found to import for book "%s"', book['name']) self.new_bibles[number].delete_book(db_book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse(db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() if not self.success.get(number, True): self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) else: self.success[number] = True self.new_bibles[number].save_meta('name', name) self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nComplete') % (number + 1, max_bibles, name)) if number in self.new_bibles: self.new_bibles[number].session.close() # Close the last bible's connection if possible. if old_bible is not None: old_bible.close_connection()
def perform_wizard(self): """ Perform the actual upgrade. """ self.includeWebBible = False proxy_server = None if not self.files: self.progress_label.setText( translate('BiblesPlugin.UpgradeWizardForm', 'There are no Bibles that need to be upgraded.')) self.progress_bar.hide() return max_bibles = 0 for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 old_bible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. if old_bible is not None: old_bible.close_connection() # Set to None to make obvious that we have already closed the # database. old_bible = None if self.stop_import_flag: self.success[number] = False break if not self.checkBox[number].checkState() == QtCore.Qt.Checked: self.success[number] = False continue self.progress_bar.reset() old_bible = OldBibleDB(self.media_item, path=self.temp_dir, file=filename[0]) name = filename[1] self.progress_label.setText( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...') % (number + 1, max_bibles, name)) self.new_bibles[number] = BibleDB(self.media_item, path=self.path, name=name, file=filename[0]) self.new_bibles[number].register(self.plugin.upgrade_wizard) metadata = old_bible.get_metadata() web_bible = False meta_data = {} for meta in metadata: # Upgrade the names of the metadata keys if meta['key'] == 'Version': meta['key'] = 'name' if meta['key'] == 'Bookname language': meta['key'] = 'book_name_language' meta['key'] = meta['key'].lower().replace(' ', '_') # Copy the metadata meta_data[meta['key']] = meta['value'] if meta['key'] != 'name' and meta['key'] != 'dbversion': self.new_bibles[number].save_meta(meta['key'], meta['value']) if meta['key'] == 'download_source': web_bible = True self.includeWebBible = True proxy_server = meta.get('proxy_server') if web_bible: if meta_data['download_source'].lower() == 'crosswalk': handler = CWExtract(proxy_server) elif meta_data['download_source'].lower() == 'biblegateway': handler = BGExtract(proxy_server) elif meta_data['download_source'].lower() == 'bibleserver': handler = BSExtract(proxy_server) books = handler.get_books_from_http(meta_data['download_name']) if not books: log.error( 'Upgrading books from %s - download name: "%s" failed' % (meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', 'Download Error'), translate( 'BiblesPlugin.UpgradeWizardForm', 'To upgrade your Web Bibles an Internet connection is required.' )) self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( meta_data['download_name'], meta_data['download_source'].lower()) if bible and bible['language_id']: language_id = bible['language_id'] self.new_bibles[number].save_meta('language_id', language_id) else: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warning('Upgrading from "%s" failed' % filename[0]) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar( translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book)) book_ref_id = self.new_bibles[number].\ get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: log.warning( 'Upgrading books from %s - download name: "%s" aborted by user' % (meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id( book_ref_id) db_book = self.new_bibles[number].create_book( book, book_ref_id, book_details['testament_id']) # Try to import already downloaded verses. oldbook = old_bible.get_book(book) if oldbook: verses = old_bible.get_verses(oldbook['id']) if not verses: log.warning( 'No verses found to import for book "%s"', book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse( db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() else: language_id = self.new_bibles[number].get_object( BibleMeta, 'language_id') if not language_id: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warning('Upgrading books from "%s" failed' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue books = old_bible.get_books() self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar( translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book['name'])) book_ref_id = self.new_bibles[ number].get_book_ref_id_by_name( book['name'], len(books), language_id) if not book_ref_id: log.warning( 'Upgrading books from %s " failed - aborted by user' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id( book_ref_id) db_book = self.new_bibles[number].create_book( book['name'], book_ref_id, book_details['testament_id']) verses = old_bible.get_verses(book['id']) if not verses: log.warning('No verses found to import for book "%s"', book['name']) self.new_bibles[number].delete_book(db_book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse( db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() if not self.success.get(number, True): self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) else: self.success[number] = True self.new_bibles[number].save_meta('name', name) self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nComplete') % (number + 1, max_bibles, name)) if number in self.new_bibles: self.new_bibles[number].session.close() # Close the last bible's connection if possible. if old_bible is not None: old_bible.close_connection()