This commit is contained in:
Tim Bentley 2011-08-20 12:46:18 +01:00
commit 9e6d05098b
11 changed files with 206 additions and 364 deletions

View File

@ -28,6 +28,7 @@
import logging import logging
import os import os
import sys import sys
import shutil
from tempfile import gettempdir from tempfile import gettempdir
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
@ -726,11 +727,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
plugin.firstTime() plugin.firstTime()
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
temp_dir = os.path.join(unicode(gettempdir()), u'openlp') temp_dir = os.path.join(unicode(gettempdir()), u'openlp')
if not os.path.exists(temp_dir): shutil.rmtree(temp_dir, True)
return
for filename in os.listdir(temp_dir):
delete_file(os.path.join(temp_dir, filename))
os.removedirs(temp_dir)
def onFirstTimeWizardClicked(self): def onFirstTimeWizardClicked(self):
""" """

View File

@ -386,6 +386,17 @@ def split_filename(path):
else: else:
return os.path.split(path) return os.path.split(path)
def clean_filename(filename):
"""
Removes invalid characters from the given ``filename``.
``filename``
The "dirty" file name to clean.
"""
if not isinstance(filename, unicode):
filename = unicode(filename, u'utf-8')
return re.sub(r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_')
def delete_file(file_path_name): def delete_file(file_path_name):
""" """
Deletes a file from the system. Deletes a file from the system.
@ -492,4 +503,4 @@ from actions import ActionList
__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', __all__ = [u'AppLocation', u'get_application_version', u'check_latest_version',
u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'add_actions', u'get_filesystem_encoding', u'LanguageManager',
u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command', u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command',
u'get_uno_instance', u'delete_file'] u'get_uno_instance', u'delete_file', u'clean_filename']

View File

@ -44,85 +44,85 @@ class AlertsTab(SettingsTab):
self.fontGroupBox.setObjectName(u'fontGroupBox') self.fontGroupBox.setObjectName(u'fontGroupBox')
self.fontLayout = QtGui.QFormLayout(self.fontGroupBox) self.fontLayout = QtGui.QFormLayout(self.fontGroupBox)
self.fontLayout.setObjectName(u'fontLayout') self.fontLayout.setObjectName(u'fontLayout')
self.FontLabel = QtGui.QLabel(self.fontGroupBox) self.fontLabel = QtGui.QLabel(self.fontGroupBox)
self.FontLabel.setObjectName(u'FontLabel') self.fontLabel.setObjectName(u'fontLabel')
self.FontComboBox = QtGui.QFontComboBox(self.fontGroupBox) self.fontComboBox = QtGui.QFontComboBox(self.fontGroupBox)
self.FontComboBox.setObjectName(u'FontComboBox') self.fontComboBox.setObjectName(u'fontComboBox')
self.fontLayout.addRow(self.FontLabel, self.FontComboBox) self.fontLayout.addRow(self.fontLabel, self.fontComboBox)
self.FontColorLabel = QtGui.QLabel(self.fontGroupBox) self.fontColorLabel = QtGui.QLabel(self.fontGroupBox)
self.FontColorLabel.setObjectName(u'FontColorLabel') self.fontColorLabel.setObjectName(u'fontColorLabel')
self.ColorLayout = QtGui.QHBoxLayout() self.colorLayout = QtGui.QHBoxLayout()
self.ColorLayout.setObjectName(u'ColorLayout') self.colorLayout.setObjectName(u'colorLayout')
self.FontColorButton = QtGui.QPushButton(self.fontGroupBox) self.fontColorButton = QtGui.QPushButton(self.fontGroupBox)
self.FontColorButton.setObjectName(u'FontColorButton') self.fontColorButton.setObjectName(u'fontColorButton')
self.ColorLayout.addWidget(self.FontColorButton) self.colorLayout.addWidget(self.fontColorButton)
self.ColorLayout.addSpacing(20) self.colorLayout.addSpacing(20)
self.BackgroundColorLabel = QtGui.QLabel(self.fontGroupBox) self.backgroundColorLabel = QtGui.QLabel(self.fontGroupBox)
self.BackgroundColorLabel.setObjectName(u'BackgroundColorLabel') self.backgroundColorLabel.setObjectName(u'backgroundColorLabel')
self.ColorLayout.addWidget(self.BackgroundColorLabel) self.colorLayout.addWidget(self.backgroundColorLabel)
self.BackgroundColorButton = QtGui.QPushButton(self.fontGroupBox) self.backgroundColorButton = QtGui.QPushButton(self.fontGroupBox)
self.BackgroundColorButton.setObjectName(u'BackgroundColorButton') self.backgroundColorButton.setObjectName(u'backgroundColorButton')
self.ColorLayout.addWidget(self.BackgroundColorButton) self.colorLayout.addWidget(self.backgroundColorButton)
self.fontLayout.addRow(self.FontColorLabel, self.ColorLayout) self.fontLayout.addRow(self.fontColorLabel, self.colorLayout)
self.FontSizeLabel = QtGui.QLabel(self.fontGroupBox) self.fontSizeLabel = QtGui.QLabel(self.fontGroupBox)
self.FontSizeLabel.setObjectName(u'FontSizeLabel') self.fontSizeLabel.setObjectName(u'fontSizeLabel')
self.FontSizeSpinBox = QtGui.QSpinBox(self.fontGroupBox) self.fontSizeSpinBox = QtGui.QSpinBox(self.fontGroupBox)
self.FontSizeSpinBox.setObjectName(u'FontSizeSpinBox') self.fontSizeSpinBox.setObjectName(u'fontSizeSpinBox')
self.fontLayout.addRow(self.FontSizeLabel, self.FontSizeSpinBox) self.fontLayout.addRow(self.fontSizeLabel, self.fontSizeSpinBox)
self.TimeoutLabel = QtGui.QLabel(self.fontGroupBox) self.timeoutLabel = QtGui.QLabel(self.fontGroupBox)
self.TimeoutLabel.setObjectName(u'TimeoutLabel') self.timeoutLabel.setObjectName(u'timeoutLabel')
self.TimeoutSpinBox = QtGui.QSpinBox(self.fontGroupBox) self.timeoutSpinBox = QtGui.QSpinBox(self.fontGroupBox)
self.TimeoutSpinBox.setMaximum(180) self.timeoutSpinBox.setMaximum(180)
self.TimeoutSpinBox.setObjectName(u'TimeoutSpinBox') self.timeoutSpinBox.setObjectName(u'timeoutSpinBox')
self.fontLayout.addRow(self.TimeoutLabel, self.TimeoutSpinBox) self.fontLayout.addRow(self.timeoutLabel, self.timeoutSpinBox)
create_valign_combo(self, self.fontGroupBox, self.fontLayout) create_valign_combo(self, self.fontGroupBox, self.fontLayout)
self.leftLayout.addWidget(self.fontGroupBox) self.leftLayout.addWidget(self.fontGroupBox)
self.leftLayout.addStretch() self.leftLayout.addStretch()
self.PreviewGroupBox = QtGui.QGroupBox(self.rightColumn) self.previewGroupBox = QtGui.QGroupBox(self.rightColumn)
self.PreviewGroupBox.setObjectName(u'PreviewGroupBox') self.previewGroupBox.setObjectName(u'previewGroupBox')
self.PreviewLayout = QtGui.QVBoxLayout(self.PreviewGroupBox) self.previewLayout = QtGui.QVBoxLayout(self.previewGroupBox)
self.PreviewLayout.setObjectName(u'PreviewLayout') self.previewLayout.setObjectName(u'previewLayout')
self.FontPreview = QtGui.QLineEdit(self.PreviewGroupBox) self.fontPreview = QtGui.QLineEdit(self.previewGroupBox)
self.FontPreview.setObjectName(u'FontPreview') self.fontPreview.setObjectName(u'fontPreview')
self.PreviewLayout.addWidget(self.FontPreview) self.previewLayout.addWidget(self.fontPreview)
self.rightLayout.addWidget(self.PreviewGroupBox) self.rightLayout.addWidget(self.previewGroupBox)
self.rightLayout.addStretch() self.rightLayout.addStretch()
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.BackgroundColorButton, QtCore.QObject.connect(self.backgroundColorButton,
QtCore.SIGNAL(u'pressed()'), self.onBackgroundColorButtonClicked) QtCore.SIGNAL(u'pressed()'), self.onBackgroundColorButtonClicked)
QtCore.QObject.connect(self.FontColorButton, QtCore.QObject.connect(self.fontColorButton,
QtCore.SIGNAL(u'pressed()'), self.onFontColorButtonClicked) QtCore.SIGNAL(u'pressed()'), self.onFontColorButtonClicked)
QtCore.QObject.connect(self.FontComboBox, QtCore.QObject.connect(self.fontComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onFontComboBoxClicked) QtCore.SIGNAL(u'activated(int)'), self.onFontComboBoxClicked)
QtCore.QObject.connect(self.TimeoutSpinBox, QtCore.QObject.connect(self.timeoutSpinBox,
QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged) QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged)
QtCore.QObject.connect(self.FontSizeSpinBox, QtCore.QObject.connect(self.fontSizeSpinBox,
QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged) QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged)
def retranslateUi(self): def retranslateUi(self):
self.fontGroupBox.setTitle( self.fontGroupBox.setTitle(
translate('AlertsPlugin.AlertsTab', 'Font')) translate('AlertsPlugin.AlertsTab', 'Font'))
self.FontLabel.setText( self.fontLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Font name:')) translate('AlertsPlugin.AlertsTab', 'Font name:'))
self.FontColorLabel.setText( self.fontColorLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Font color:')) translate('AlertsPlugin.AlertsTab', 'Font color:'))
self.BackgroundColorLabel.setText( self.backgroundColorLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Background color:')) translate('AlertsPlugin.AlertsTab', 'Background color:'))
self.FontSizeLabel.setText( self.fontSizeLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Font size:')) translate('AlertsPlugin.AlertsTab', 'Font size:'))
self.FontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.fontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.TimeoutLabel.setText( self.timeoutLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Alert timeout:')) translate('AlertsPlugin.AlertsTab', 'Alert timeout:'))
self.TimeoutSpinBox.setSuffix(UiStrings().Seconds) self.timeoutSpinBox.setSuffix(UiStrings().Seconds)
self.PreviewGroupBox.setTitle(UiStrings().Preview) self.previewGroupBox.setTitle(UiStrings().Preview)
self.FontPreview.setText(UiStrings().OLPV2) self.fontPreview.setText(UiStrings().OLPV2)
def onBackgroundColorButtonClicked(self): def onBackgroundColorButtonClicked(self):
new_color = QtGui.QColorDialog.getColor( new_color = QtGui.QColorDialog.getColor(
QtGui.QColor(self.bg_color), self) QtGui.QColor(self.bg_color), self)
if new_color.isValid(): if new_color.isValid():
self.bg_color = new_color.name() self.bg_color = new_color.name()
self.BackgroundColorButton.setStyleSheet( self.backgroundColorButton.setStyleSheet(
u'background-color: %s' % self.bg_color) u'background-color: %s' % self.bg_color)
self.updateDisplay() self.updateDisplay()
@ -134,15 +134,15 @@ class AlertsTab(SettingsTab):
QtGui.QColor(self.font_color), self) QtGui.QColor(self.font_color), self)
if new_color.isValid(): if new_color.isValid():
self.font_color = new_color.name() self.font_color = new_color.name()
self.FontColorButton.setStyleSheet( self.fontColorButton.setStyleSheet(
u'background-color: %s' % self.font_color) u'background-color: %s' % self.font_color)
self.updateDisplay() self.updateDisplay()
def onTimeoutSpinBoxChanged(self): def onTimeoutSpinBoxChanged(self):
self.timeout = self.TimeoutSpinBox.value() self.timeout = self.timeoutSpinBox.value()
def onFontSizeSpinBoxChanged(self): def onFontSizeSpinBoxChanged(self):
self.font_size = self.FontSizeSpinBox.value() self.font_size = self.fontSizeSpinBox.value()
self.updateDisplay() self.updateDisplay()
def load(self): def load(self):
@ -160,16 +160,16 @@ class AlertsTab(SettingsTab):
self.location = settings.value( self.location = settings.value(
u'location', QtCore.QVariant(1)).toInt()[0] u'location', QtCore.QVariant(1)).toInt()[0]
settings.endGroup() settings.endGroup()
self.FontSizeSpinBox.setValue(self.font_size) self.fontSizeSpinBox.setValue(self.font_size)
self.TimeoutSpinBox.setValue(self.timeout) self.timeoutSpinBox.setValue(self.timeout)
self.FontColorButton.setStyleSheet( self.fontColorButton.setStyleSheet(
u'background-color: %s' % self.font_color) u'background-color: %s' % self.font_color)
self.BackgroundColorButton.setStyleSheet( self.backgroundColorButton.setStyleSheet(
u'background-color: %s' % self.bg_color) u'background-color: %s' % self.bg_color)
self.verticalComboBox.setCurrentIndex(self.location) self.verticalComboBox.setCurrentIndex(self.location)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily(self.font_face) font.setFamily(self.font_face)
self.FontComboBox.setCurrentFont(font) self.fontComboBox.setCurrentFont(font)
self.updateDisplay() self.updateDisplay()
def save(self): def save(self):
@ -178,7 +178,7 @@ class AlertsTab(SettingsTab):
settings.setValue(u'background color', QtCore.QVariant(self.bg_color)) settings.setValue(u'background color', QtCore.QVariant(self.bg_color))
settings.setValue(u'font color', QtCore.QVariant(self.font_color)) settings.setValue(u'font color', QtCore.QVariant(self.font_color))
settings.setValue(u'font size', QtCore.QVariant(self.font_size)) settings.setValue(u'font size', QtCore.QVariant(self.font_size))
self.font_face = self.FontComboBox.currentFont().family() self.font_face = self.fontComboBox.currentFont().family()
settings.setValue(u'font face', QtCore.QVariant(self.font_face)) settings.setValue(u'font face', QtCore.QVariant(self.font_face))
settings.setValue(u'timeout', QtCore.QVariant(self.timeout)) settings.setValue(u'timeout', QtCore.QVariant(self.timeout))
self.location = self.verticalComboBox.currentIndex() self.location = self.verticalComboBox.currentIndex()
@ -187,10 +187,10 @@ class AlertsTab(SettingsTab):
def updateDisplay(self): def updateDisplay(self):
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily(self.FontComboBox.currentFont().family()) font.setFamily(self.fontComboBox.currentFont().family())
font.setBold(True) font.setBold(True)
font.setPointSize(self.font_size) font.setPointSize(self.font_size)
self.FontPreview.setFont(font) self.fontPreview.setFont(font)
self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % self.fontPreview.setStyleSheet(u'background-color: %s; color: %s' %
(self.bg_color, self.font_color)) (self.bg_color, self.font_color))

View File

@ -29,17 +29,17 @@ The bible import functions for OpenLP
import logging import logging
import os import os
import shutil import shutil
from tempfile import gettempdir
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import Receiver, SettingsManager, translate, \ from openlp.core.lib import Receiver, SettingsManager, translate, \
check_directory_exists check_directory_exists
from openlp.core.lib.db import delete_database
from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.lib.ui import UiStrings, critical_error_message_box
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
from openlp.core.utils import AppLocation, delete_file from openlp.core.utils import AppLocation, delete_file
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \ from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \
BiblesResourcesDB, clean_filename BiblesResourcesDB
from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -70,6 +70,7 @@ class BibleUpgradeForm(OpenLPWizard):
self.suffix = u'.sqlite' self.suffix = u'.sqlite'
self.settingsSection = u'bibles' self.settingsSection = u'bibles'
self.path = AppLocation.get_section_data_path(self.settingsSection) self.path = AppLocation.get_section_data_path(self.settingsSection)
self.temp_dir = os.path.join(gettempdir(), u'openlp')
self.files = self.manager.old_bible_databases self.files = self.manager.old_bible_databases
self.success = {} self.success = {}
self.newbibles = {} self.newbibles = {}
@ -91,20 +92,6 @@ class BibleUpgradeForm(OpenLPWizard):
log.debug(u'Stopping import') log.debug(u'Stopping import')
self.stop_import_flag = True self.stop_import_flag = True
def onCheckBoxIndexChanged(self, index):
"""
Show/Hide warnings if CheckBox state has changed
"""
for number, filename in enumerate(self.files):
if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
self.verticalWidget[number].hide()
self.formWidget[number].hide()
else:
version_name = unicode(self.versionNameEdit[number].text())
if self.manager.exists(version_name):
self.verticalWidget[number].show()
self.formWidget[number].show()
def reject(self): def reject(self):
""" """
Stop the wizard on cancel button, close button or ESC key. Stop the wizard on cancel button, close button or ESC key.
@ -113,8 +100,6 @@ class BibleUpgradeForm(OpenLPWizard):
self.stop_import_flag = True self.stop_import_flag = True
if not self.currentPage() == self.progressPage: if not self.currentPage() == self.progressPage:
self.done(QtGui.QDialog.Rejected) self.done(QtGui.QDialog.Rejected)
else:
self.postWizard()
def onCurrentIdChanged(self, pageId): def onCurrentIdChanged(self, pageId):
""" """
@ -124,7 +109,7 @@ class BibleUpgradeForm(OpenLPWizard):
self.preWizard() self.preWizard()
self.performWizard() self.performWizard()
self.postWizard() self.postWizard()
elif self.page(pageId) == self.selectPage and self.maxBibles == 0: elif self.page(pageId) == self.selectPage and not self.files:
self.next() self.next()
def onBackupBrowseButtonClicked(self): def onBackupBrowseButtonClicked(self):
@ -243,78 +228,13 @@ class BibleUpgradeForm(OpenLPWizard):
Add the content to the scrollArea. Add the content to the scrollArea.
""" """
self.checkBox = {} self.checkBox = {}
self.versionNameEdit = {}
self.versionNameLabel = {}
self.versionInfoLabel = {}
self.versionInfoPixmap = {}
self.verticalWidget = {}
self.horizontalLayout = {}
self.formWidget = {}
self.formLayoutAttention = {}
for number, filename in enumerate(self.files): for number, filename in enumerate(self.files):
bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0]) bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0])
self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents) self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents)
checkBoxName = u'checkBox[%d]' % number self.checkBox[number].setObjectName(u'checkBox[%d]' % number)
self.checkBox[number].setObjectName(checkBoxName)
self.checkBox[number].setText(bible.get_name()) self.checkBox[number].setText(bible.get_name())
self.checkBox[number].setCheckState(QtCore.Qt.Checked) self.checkBox[number].setCheckState(QtCore.Qt.Checked)
self.formLayout.addWidget(self.checkBox[number]) self.formLayout.addWidget(self.checkBox[number])
self.verticalWidget[number] = QtGui.QWidget(self.scrollAreaContents)
verticalWidgetName = u'verticalWidget[%d]' % number
self.verticalWidget[number].setObjectName(verticalWidgetName)
self.horizontalLayout[number] = QtGui.QHBoxLayout(
self.verticalWidget[number])
self.horizontalLayout[number].setContentsMargins(25, 0, 0, 0)
horizontalLayoutName = u'horizontalLayout[%d]' % number
self.horizontalLayout[number].setObjectName(horizontalLayoutName)
self.versionInfoPixmap[number] = QtGui.QLabel(
self.verticalWidget[number])
versionInfoPixmapName = u'versionInfoPixmap[%d]' % number
self.versionInfoPixmap[number].setObjectName(versionInfoPixmapName)
self.versionInfoPixmap[number].setPixmap(QtGui.QPixmap(
u':/bibles/bibles_upgrade_alert.png'))
self.versionInfoPixmap[number].setAlignment(QtCore.Qt.AlignRight)
self.horizontalLayout[number].addWidget(
self.versionInfoPixmap[number])
self.versionInfoLabel[number] = QtGui.QLabel(
self.verticalWidget[number])
versionInfoLabelName = u'versionInfoLabel[%d]' % number
self.versionInfoLabel[number].setObjectName(versionInfoLabelName)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(
self.versionInfoLabel[number].sizePolicy().hasHeightForWidth())
self.versionInfoLabel[number].setSizePolicy(sizePolicy)
self.horizontalLayout[number].addWidget(
self.versionInfoLabel[number])
self.formLayout.addWidget(self.verticalWidget[number])
self.formWidget[number] = QtGui.QWidget(self.scrollAreaContents)
formWidgetName = u'formWidget[%d]' % number
self.formWidget[number].setObjectName(formWidgetName)
self.formLayoutAttention[number] = QtGui.QFormLayout(
self.formWidget[number])
self.formLayoutAttention[number].setContentsMargins(25, 0, 0, 5)
formLayoutAttentionName = u'formLayoutAttention[%d]' % number
self.formLayoutAttention[number].setObjectName(
formLayoutAttentionName)
self.versionNameLabel[number] = QtGui.QLabel(
self.formWidget[number])
self.versionNameLabel[number].setObjectName(u'VersionNameLabel')
self.formLayoutAttention[number].setWidget(0,
QtGui.QFormLayout.LabelRole, self.versionNameLabel[number])
self.versionNameEdit[number] = QtGui.QLineEdit(
self.formWidget[number])
self.versionNameEdit[number].setObjectName(u'VersionNameEdit')
self.formLayoutAttention[number].setWidget(0,
QtGui.QFormLayout.FieldRole, self.versionNameEdit[number])
self.versionNameEdit[number].setText(bible.get_name())
self.formLayout.addWidget(self.formWidget[number])
# Set up the Signal for the checkbox.
QtCore.QObject.connect(self.checkBox[number],
QtCore.SIGNAL(u'stateChanged(int)'),
self.onCheckBoxIndexChanged)
self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Expanding)
self.formLayout.addItem(self.spacerItem) self.formLayout.addItem(self.spacerItem)
@ -327,23 +247,6 @@ class BibleUpgradeForm(OpenLPWizard):
for number, filename in enumerate(self.files): for number, filename in enumerate(self.files):
self.formLayout.removeWidget(self.checkBox[number]) self.formLayout.removeWidget(self.checkBox[number])
self.checkBox[number].setParent(None) self.checkBox[number].setParent(None)
self.horizontalLayout[number].removeWidget(
self.versionInfoPixmap[number])
self.versionInfoPixmap[number].setParent(None)
self.horizontalLayout[number].removeWidget(
self.versionInfoLabel[number])
self.versionInfoLabel[number].setParent(None)
self.formLayout.removeWidget(self.verticalWidget[number])
self.verticalWidget[number].setParent(None)
self.formLayoutAttention[number].removeWidget(
self.versionNameLabel[number])
self.versionNameLabel[number].setParent(None)
self.formLayoutAttention[number].removeWidget(
self.versionNameEdit[number])
self.formLayoutAttention[number].deleteLater()
self.versionNameEdit[number].setParent(None)
self.formLayout.removeWidget(self.formWidget[number])
self.formWidget[number].setParent(None)
self.formLayout.removeItem(self.spacerItem) self.formLayout.removeItem(self.spacerItem)
def retranslateUi(self): def retranslateUi(self):
@ -385,12 +288,6 @@ class BibleUpgradeForm(OpenLPWizard):
self.selectPage.setSubTitle( self.selectPage.setSubTitle(
translate('BiblesPlugin.UpgradeWizardForm', translate('BiblesPlugin.UpgradeWizardForm',
'Please select the Bibles to upgrade')) 'Please select the Bibles to upgrade'))
for number, bible in enumerate(self.files):
self.versionNameLabel[number].setText(
translate('BiblesPlugin.UpgradeWizardForm', 'Version name:'))
self.versionInfoLabel[number].setText(
translate('BiblesPlugin.UpgradeWizardForm', 'This '
'Bible still exists. Please change the name or uncheck it.'))
self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm', self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm',
'Upgrading')) 'Upgrading'))
self.progressPage.setSubTitle( self.progressPage.setSubTitle(
@ -425,58 +322,16 @@ class BibleUpgradeForm(OpenLPWizard):
return False return False
return True return True
elif self.currentPage() == self.selectPage: elif self.currentPage() == self.selectPage:
check_directory_exists(self.temp_dir)
for number, filename in enumerate(self.files): for number, filename in enumerate(self.files):
if not self.checkBox[number].checkState() == QtCore.Qt.Checked: if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
continue continue
version_name = unicode(self.versionNameEdit[number].text()) # Move bibles to temp dir.
if not version_name: if not os.path.exists(os.path.join(self.temp_dir, filename[0])):
critical_error_message_box(UiStrings().EmptyField, shutil.move(
translate('BiblesPlugin.UpgradeWizardForm', os.path.join(self.path, filename[0]), self.temp_dir)
'You need to specify a version name for your Bible.'))
self.versionNameEdit[number].setFocus()
return False
elif self.manager.exists(version_name):
critical_error_message_box(
translate('BiblesPlugin.UpgradeWizardForm',
'Bible Exists'),
translate('BiblesPlugin.UpgradeWizardForm',
'This Bible already exists. Please upgrade '
'a different Bible, delete the existing one or '
'uncheck.'))
self.versionNameEdit[number].setFocus()
return False
elif os.path.exists(os.path.join(self.path, clean_filename(
version_name))) and version_name == filename[1]:
newfilename = u'old_database_%s' % filename[0]
if not os.path.exists(os.path.join(self.path,
newfilename)):
os.rename(os.path.join(self.path, filename[0]),
os.path.join(self.path, newfilename))
self.files[number] = [newfilename, filename[1]]
continue
else: else:
critical_error_message_box( delete_file(os.path.join(self.path, filename[0]))
translate('BiblesPlugin.UpgradeWizardForm',
'Bible Exists'),
translate('BiblesPlugin.UpgradeWizardForm',
'This Bible already exists. Please upgrade '
'a different Bible, delete the existing one or '
'uncheck.'))
self.verticalWidget[number].show()
self.formWidget[number].show()
self.versionNameEdit[number].setFocus()
return False
elif os.path.exists(os.path.join(self.path,
clean_filename(version_name))):
critical_error_message_box(
translate('BiblesPlugin.UpgradeWizardForm',
'Bible Exists'),
translate('BiblesPlugin.UpgradeWizardForm',
'This Bible already exists. Please upgrade '
'a different Bible, delete the existing one or '
'uncheck.'))
self.versionNameEdit[number].setFocus()
return False
return True return True
if self.currentPage() == self.progressPage: if self.currentPage() == self.progressPage:
return True return True
@ -495,16 +350,8 @@ class BibleUpgradeForm(OpenLPWizard):
self.files = self.manager.old_bible_databases self.files = self.manager.old_bible_databases
self.addScrollArea() self.addScrollArea()
self.retranslateUi() self.retranslateUi()
self.maxBibles = len(self.files)
for number, filename in enumerate(self.files): for number, filename in enumerate(self.files):
self.checkBox[number].setCheckState(QtCore.Qt.Checked) self.checkBox[number].setCheckState(QtCore.Qt.Checked)
oldname = filename[1]
if self.manager.exists(oldname):
self.verticalWidget[number].show()
self.formWidget[number].show()
else:
self.verticalWidget[number].hide()
self.formWidget[number].hide()
self.progressBar.show() self.progressBar.show()
self.restart() self.restart()
self.finishButton.setVisible(False) self.finishButton.setVisible(False)
@ -516,9 +363,8 @@ class BibleUpgradeForm(OpenLPWizard):
Prepare the UI for the upgrade. Prepare the UI for the upgrade.
""" """
OpenLPWizard.preWizard(self) OpenLPWizard.preWizard(self)
self.progressLabel.setText(translate( self.progressLabel.setText(
'BiblesPlugin.UpgradeWizardForm', translate('BiblesPlugin.UpgradeWizardForm', 'Starting upgrade...'))
'Starting upgrade...'))
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
def performWizard(self): def performWizard(self):
@ -527,48 +373,42 @@ class BibleUpgradeForm(OpenLPWizard):
""" """
self.include_webbible = False self.include_webbible = False
proxy_server = None proxy_server = None
if self.maxBibles == 0: if not self.files:
self.progressLabel.setText( self.progressLabel.setText(
translate('BiblesPlugin.UpgradeWizardForm', 'There are no ' translate('BiblesPlugin.UpgradeWizardForm', 'There are no '
'Bibles that need to be upgraded.')) 'Bibles that need to be upgraded.'))
self.progressBar.hide() self.progressBar.hide()
return return
self.maxBibles = 0 max_bibles = 0
for number, file in enumerate(self.files): for number, file in enumerate(self.files):
if self.checkBox[number].checkState() == QtCore.Qt.Checked: if self.checkBox[number].checkState() == QtCore.Qt.Checked:
self.maxBibles += 1 max_bibles += 1
number = 0 oldBible = None
for biblenumber, filename in enumerate(self.files): for number, filename in enumerate(self.files):
# Close the previous bible's connection.
if oldBible is not None:
oldBible.close_connection()
# Set to None to make obvious that we have already closed the
# database.
oldBible = None
if self.stop_import_flag: if self.stop_import_flag:
bible_failed = True self.success[number] = False
break break
bible_failed = False if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
self.success[biblenumber] = False self.success[number] = False
if not self.checkBox[biblenumber].checkState() == QtCore.Qt.Checked:
continue continue
self.progressBar.reset() self.progressBar.reset()
oldbible = OldBibleDB(self.mediaItem, path=self.path, oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir,
file=filename[0]) file=filename[0])
name = filename[1] name = filename[1]
if name is None:
delete_file(os.path.join(self.path, filename[0]))
self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nFailed')) %
(number + 1, self.maxBibles, name),
self.progressBar.maximum() - self.progressBar.value())
number += 1
continue
self.progressLabel.setText(unicode(translate( self.progressLabel.setText(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) % 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) %
(number + 1, self.maxBibles, name)) (number + 1, max_bibles, name))
if os.path.exists(os.path.join(self.path, filename[0])):
name = unicode(self.versionNameEdit[biblenumber].text())
self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,
name=name) name=name, file=filename[0])
self.newbibles[number].register(self.plugin.upgrade_wizard) self.newbibles[number].register(self.plugin.upgrade_wizard)
metadata = oldbible.get_metadata() metadata = oldBible.get_metadata()
webbible = False webbible = False
meta_data = {} meta_data = {}
for meta in metadata: for meta in metadata:
@ -595,7 +435,7 @@ class BibleUpgradeForm(OpenLPWizard):
u'name: "%s" failed' % ( u'name: "%s" failed' % (
meta_data[u'download source'], meta_data[u'download source'],
meta_data[u'download name'])) meta_data[u'download name']))
delete_database(self.path, clean_filename(name)) self.newbibles[number].session.close()
del self.newbibles[number] del self.newbibles[number]
critical_error_message_box( critical_error_message_box(
translate('BiblesPlugin.UpgradeWizardForm', translate('BiblesPlugin.UpgradeWizardForm',
@ -606,9 +446,9 @@ class BibleUpgradeForm(OpenLPWizard):
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nFailed')) % 'Upgrading Bible %s of %s: "%s"\nFailed')) %
(number + 1, self.maxBibles, name), (number + 1, max_bibles, name),
self.progressBar.maximum() - self.progressBar.value()) self.progressBar.maximum() - self.progressBar.value())
number += 1 self.success[number] = False
continue continue
bible = BiblesResourcesDB.get_webbible( bible = BiblesResourcesDB.get_webbible(
meta_data[u'download name'], meta_data[u'download name'],
@ -621,25 +461,25 @@ class BibleUpgradeForm(OpenLPWizard):
language_id = self.newbibles[number].get_language(name) language_id = self.newbibles[number].get_language(name)
if not language_id: if not language_id:
log.warn(u'Upgrading from "%s" failed' % filename[0]) log.warn(u'Upgrading from "%s" failed' % filename[0])
delete_database(self.path, clean_filename(name)) self.newbibles[number].session.close()
del self.newbibles[number] del self.newbibles[number]
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nFailed')) % 'Upgrading Bible %s of %s: "%s"\nFailed')) %
(number + 1, self.maxBibles, name), (number + 1, max_bibles, name),
self.progressBar.maximum() - self.progressBar.value()) self.progressBar.maximum() - self.progressBar.value())
number += 1 self.success[number] = False
continue continue
self.progressBar.setMaximum(len(books)) self.progressBar.setMaximum(len(books))
for book in books: for book in books:
if self.stop_import_flag: if self.stop_import_flag:
bible_failed = True self.success[number] = False
break break
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\n' 'Upgrading Bible %s of %s: "%s"\n'
'Upgrading %s ...')) % 'Upgrading %s ...')) %
(number + 1, self.maxBibles, name, book)) (number + 1, max_bibles, name, book))
book_ref_id = self.newbibles[number].\ book_ref_id = self.newbibles[number].\
get_book_ref_id_by_name(book, len(books), language_id) get_book_ref_id_by_name(book, len(books), language_id)
if not book_ref_id: if not book_ref_id:
@ -647,24 +487,24 @@ class BibleUpgradeForm(OpenLPWizard):
u'name: "%s" aborted by user' % ( u'name: "%s" aborted by user' % (
meta_data[u'download source'], meta_data[u'download source'],
meta_data[u'download name'])) meta_data[u'download name']))
delete_database(self.path, clean_filename(name)) self.newbibles[number].session.close()
del self.newbibles[number] del self.newbibles[number]
bible_failed = True self.success[number] = False
break break
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
db_book = self.newbibles[number].create_book(book, db_book = self.newbibles[number].create_book(book,
book_ref_id, book_details[u'testament_id']) book_ref_id, book_details[u'testament_id'])
# Try to import still downloaded verses # Try to import already downloaded verses.
oldbook = oldbible.get_book(book) oldbook = oldBible.get_book(book)
if oldbook: if oldbook:
verses = oldbible.get_verses(oldbook[u'id']) verses = oldBible.get_verses(oldbook[u'id'])
if not verses: if not verses:
log.warn(u'No verses found to import for book ' log.warn(u'No verses found to import for book '
u'"%s"', book) u'"%s"', book)
continue continue
for verse in verses: for verse in verses:
if self.stop_import_flag: if self.stop_import_flag:
bible_failed = True self.success[number] = False
break break
self.newbibles[number].create_verse(db_book.id, self.newbibles[number].create_verse(db_book.id,
int(verse[u'chapter']), int(verse[u'chapter']),
@ -678,40 +518,40 @@ class BibleUpgradeForm(OpenLPWizard):
language_id = self.newbibles[number].get_language(name) language_id = self.newbibles[number].get_language(name)
if not language_id: if not language_id:
log.warn(u'Upgrading books from "%s" failed' % name) log.warn(u'Upgrading books from "%s" failed' % name)
delete_database(self.path, clean_filename(name)) self.newbibles[number].session.close()
del self.newbibles[number] del self.newbibles[number]
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nFailed')) % 'Upgrading Bible %s of %s: "%s"\nFailed')) %
(number + 1, self.maxBibles, name), (number + 1, max_bibles, name),
self.progressBar.maximum() - self.progressBar.value()) self.progressBar.maximum() - self.progressBar.value())
number += 1 self.success[number] = False
continue continue
books = oldbible.get_books() books = oldBible.get_books()
self.progressBar.setMaximum(len(books)) self.progressBar.setMaximum(len(books))
for book in books: for book in books:
if self.stop_import_flag: if self.stop_import_flag:
bible_failed = True self.success[number] = False
break break
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\n' 'Upgrading Bible %s of %s: "%s"\n'
'Upgrading %s ...')) % 'Upgrading %s ...')) %
(number + 1, self.maxBibles, name, book[u'name'])) (number + 1, max_bibles, name, book[u'name']))
book_ref_id = self.newbibles[number].\ book_ref_id = self.newbibles[number].\
get_book_ref_id_by_name(book[u'name'], len(books), get_book_ref_id_by_name(book[u'name'], len(books),
language_id) language_id)
if not book_ref_id: if not book_ref_id:
log.warn(u'Upgrading books from %s " '\ log.warn(u'Upgrading books from %s " '\
'failed - aborted by user' % name) 'failed - aborted by user' % name)
delete_database(self.path, clean_filename(name)) self.newbibles[number].session.close()
del self.newbibles[number] del self.newbibles[number]
bible_failed = True self.success[number] = False
break break
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
db_book = self.newbibles[number].create_book(book[u'name'], db_book = self.newbibles[number].create_book(book[u'name'],
book_ref_id, book_details[u'testament_id']) book_ref_id, book_details[u'testament_id'])
verses = oldbible.get_verses(book[u'id']) verses = oldBible.get_verses(book[u'id'])
if not verses: if not verses:
log.warn(u'No verses found to import for book ' log.warn(u'No verses found to import for book '
u'"%s"', book[u'name']) u'"%s"', book[u'name'])
@ -719,31 +559,32 @@ class BibleUpgradeForm(OpenLPWizard):
continue continue
for verse in verses: for verse in verses:
if self.stop_import_flag: if self.stop_import_flag:
bible_failed = True self.success[number] = False
break break
self.newbibles[number].create_verse(db_book.id, self.newbibles[number].create_verse(db_book.id,
int(verse[u'chapter']), int(verse[u'chapter']),
int(verse[u'verse']), unicode(verse[u'text'])) int(verse[u'verse']), unicode(verse[u'text']))
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
self.newbibles[number].session.commit() self.newbibles[number].session.commit()
if not bible_failed: if self.success.has_key(number) and not self.success[number]:
self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\nFailed')) %
(number + 1, max_bibles, name),
self.progressBar.maximum() - self.progressBar.value())
else:
self.success[number] = True
self.newbibles[number].create_meta(u'Version', name) self.newbibles[number].create_meta(u'Version', name)
oldbible.close_connection()
delete_file(os.path.join(self.path, filename[0]))
self.incrementProgressBar(unicode(translate( self.incrementProgressBar(unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
'Upgrading Bible %s of %s: "%s"\n' 'Upgrading Bible %s of %s: "%s"\n'
'Complete')) % 'Complete')) %
(number + 1, self.maxBibles, name)) (number + 1, max_bibles, name))
self.success[biblenumber] = True if self.newbibles.has_key(number):
else: self.newbibles[number].session.close()
self.incrementProgressBar(unicode(translate( # Close the last bible's connection if possible.
'BiblesPlugin.UpgradeWizardForm', if oldBible is not None:
'Upgrading Bible %s of %s: "%s"\nFailed')) % oldBible.close_connection()
(number + 1, self.maxBibles, name),
self.progressBar.maximum() - self.progressBar.value())
delete_database(self.path, clean_filename(name))
number += 1
def postWizard(self): def postWizard(self):
""" """
@ -752,10 +593,14 @@ class BibleUpgradeForm(OpenLPWizard):
successful_import = 0 successful_import = 0
failed_import = 0 failed_import = 0
for number, filename in enumerate(self.files): for number, filename in enumerate(self.files):
if number in self.success and self.success[number] == True: if self.success.has_key(number) and self.success[number]:
successful_import += 1 successful_import += 1
elif self.checkBox[number].checkState() == QtCore.Qt.Checked: elif self.checkBox[number].checkState() == QtCore.Qt.Checked:
failed_import += 1 failed_import += 1
# Delete upgraded (but not complete, corrupted, ...) bible.
delete_file(os.path.join(self.path, filename[0]))
# Copy not upgraded bible back.
shutil.move(os.path.join(self.temp_dir, filename[0]), self.path)
if failed_import > 0: if failed_import > 0:
failed_import_text = unicode(translate( failed_import_text = unicode(translate(
'BiblesPlugin.UpgradeWizardForm', 'BiblesPlugin.UpgradeWizardForm',
@ -776,7 +621,8 @@ class BibleUpgradeForm(OpenLPWizard):
'Bible(s): %s successful%s')) % (successful_import, 'Bible(s): %s successful%s')) % (successful_import,
failed_import_text)) failed_import_text))
else: else:
self.progressLabel.setText( self.progressLabel.setText(translate(
translate('BiblesPlugin.UpgradeWizardForm', 'Upgrade ' 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.'))
'failed.')) # Remove temp directory.
shutil.rmtree(self.temp_dir, True)
OpenLPWizard.postWizard(self) OpenLPWizard.postWizard(self)

View File

@ -57,12 +57,11 @@ class LanguageForm(QDialog, Ui_LanguageDialog):
if bible_name: if bible_name:
self.bibleLabel.setText(unicode(bible_name)) self.bibleLabel.setText(unicode(bible_name))
items = BiblesResourcesDB.get_languages() items = BiblesResourcesDB.get_languages()
for item in items: self.languageComboBox.addItems([item[u'name'] for item in items])
self.languageComboBox.addItem(item[u'name'])
return QDialog.exec_(self) return QDialog.exec_(self)
def accept(self): def accept(self):
if self.languageComboBox.currentText() == u'': if not self.languageComboBox.currentText():
critical_error_message_box( critical_error_message_box(
message=translate('BiblesPlugin.LanguageForm', message=translate('BiblesPlugin.LanguageForm',
'You need to choose a language.')) 'You need to choose a language.'))

View File

@ -39,7 +39,7 @@ from sqlalchemy.orm.exc import UnmappedClassError
from openlp.core.lib import Receiver, translate from openlp.core.lib import Receiver, translate
from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.db import BaseModel, init_db, Manager
from openlp.core.lib.ui import critical_error_message_box from openlp.core.lib.ui import critical_error_message_box
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation, clean_filename
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -63,19 +63,6 @@ class Verse(BaseModel):
""" """
pass pass
def clean_filename(filename):
"""
Clean up the version name of the Bible and convert it into a valid
file name.
``filename``
The "dirty" file name or version name.
"""
if not isinstance(filename, unicode):
filename = unicode(filename, u'utf-8')
filename = re.sub(r'[^\w]+', u'_', filename).strip(u'_')
return filename + u'.sqlite'
def init_schema(url): def init_schema(url):
""" """
Setup a bible database connection and initialise the database schema. Setup a bible database connection and initialise the database schema.
@ -158,7 +145,7 @@ class BibleDB(QtCore.QObject, Manager):
self.name = kwargs[u'name'] self.name = kwargs[u'name']
if not isinstance(self.name, unicode): if not isinstance(self.name, unicode):
self.name = unicode(self.name, u'utf-8') self.name = unicode(self.name, u'utf-8')
self.file = clean_filename(self.name) self.file = clean_filename(self.name) + u'.sqlite'
if u'file' in kwargs: if u'file' in kwargs:
self.file = kwargs[u'file'] self.file = kwargs[u'file']
Manager.__init__(self, u'bibles', init_schema, self.file) Manager.__init__(self, u'bibles', init_schema, self.file)

View File

@ -151,9 +151,10 @@ class BibleManager(object):
name = bible.get_name() name = bible.get_name()
# Remove corrupted files. # Remove corrupted files.
if name is None: if name is None:
bible.session.close()
delete_file(os.path.join(self.path, filename)) delete_file(os.path.join(self.path, filename))
continue continue
# Find old database versions # Find old database versions.
if bible.is_old_database(): if bible.is_old_database():
self.old_bible_databases.append([filename, name]) self.old_bible_databases.append([filename, name])
bible.session.close() bible.session.close()

View File

@ -613,7 +613,7 @@ class BibleMediaItem(MediaManagerItem):
if restore: if restore:
old_text = unicode(combo.currentText()) old_text = unicode(combo.currentText())
combo.clear() combo.clear()
combo.addItems([unicode(i) for i in range(range_from, range_to + 1)]) combo.addItems(map(unicode, range(range_from, range_to + 1)))
if restore and combo.findText(old_text) != -1: if restore and combo.findText(old_text) != -1:
combo.setCurrentIndex(combo.findText(old_text)) combo.setCurrentIndex(combo.findText(old_text))

View File

@ -35,6 +35,7 @@ import re
from lxml import etree from lxml import etree
from openlp.core.lib import check_directory_exists, Receiver, translate from openlp.core.lib import check_directory_exists, Receiver, translate
from openlp.core.utils import clean_filename
from openlp.plugins.songs.lib import OpenLyrics from openlp.plugins.songs.lib import OpenLyrics
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -72,8 +73,7 @@ class OpenLyricsExport(object):
tree = etree.ElementTree(etree.fromstring(xml)) tree = etree.ElementTree(etree.fromstring(xml))
filename = u'%s (%s)' % (song.title, filename = u'%s (%s)' % (song.title,
u', '.join([author.display_name for author in song.authors])) u', '.join([author.display_name for author in song.authors]))
filename = re.sub( filename = clean_filename(filename)
r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_')
# Ensure the filename isn't too long for some filesystems # Ensure the filename isn't too long for some filesystems
filename = u'%s.xml' % filename[0:250 - len(self.save_path)] filename = u'%s.xml' % filename[0:250 - len(self.save_path)]
# Pass a file object, because lxml does not cope with some special # Pass a file object, because lxml does not cope with some special

View File

@ -246,8 +246,9 @@ class OpenLyrics(object):
# Append the necessary meta data to the song. # Append the necessary meta data to the song.
song_xml.set(u'xmlns', u'http://openlyrics.info/namespace/2009/song') song_xml.set(u'xmlns', u'http://openlyrics.info/namespace/2009/song')
song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION) song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION)
song_xml.set(u'createdIn', get_application_version()[u'version']) application_name = u'OpenLP ' + get_application_version()[u'version']
song_xml.set(u'modifiedIn', get_application_version()[u'version']) song_xml.set(u'createdIn', application_name)
song_xml.set(u'modifiedIn', application_name)
song_xml.set(u'modifiedDate', song_xml.set(u'modifiedDate',
datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S')) datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S'))
properties = etree.SubElement(song_xml, u'properties') properties = etree.SubElement(song_xml, u'properties')