Merge lp:~googol-deactivatedaccount/openlp/bug-804747 into lp:openlp

Proposed by Andreas Preikschat
Status: Merged
Approved by: Raoul Snyman
Approved revision: 1724
Merged at revision: 1714
Proposed branch: lp:~googol-deactivatedaccount/openlp/bug-804747
Merge into: lp:openlp
Diff against target: 983 lines (+137/-296)
8 files modified
openlp/core/ui/mainwindow.py (+2/-5)
openlp/core/utils/__init__.py (+12/-1)
openlp/plugins/bibles/forms/bibleupgradeform.py (+79/-233)
openlp/plugins/bibles/forms/languageform.py (+5/-6)
openlp/plugins/bibles/lib/db.py (+30/-43)
openlp/plugins/bibles/lib/manager.py (+6/-5)
openlp/plugins/bibles/lib/mediaitem.py (+1/-1)
openlp/plugins/songs/lib/openlyricsexport.py (+2/-2)
To merge this branch: bzr merge lp:~googol-deactivatedaccount/openlp/bug-804747
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Tim Bentley Approve
Review via email: mp+71841@code.launchpad.net

This proposal supersedes a proposal from 2011-08-15.

Commit message

- Fixed bug #804747 (Bible disappear after upgrade)
- Fixed bug Bug #824129 (Bibles plugin does not always delete corrupted bibles from falied imports)
- Removed not needed or redundant variables.
- Removed not needed code.
- When upgrading bibles move the files to the temp directory.
- clean ups

Description of the change

Hello,

1) Fixed bug #804747 (Bible disappear after upgrade)
The fix is in line 303. We did not pass the file name, that means that we used the version name. If you do not pass the file name the file name is crated from the version name (and since this contained Japanese characters) they were removed (so the file name was ".sqlite")
Furthermore, I changed the way we clean the file name and move the function to utils.
2) Fixed bug Bug #824129 (Bibles plugin does not always delete corrupted bibles from falied imports)
We did not close the session. If you do not close the session, the file cannot be deleted on windows.
3) Removed not needed or redundant variables.
4) Removed not needed code.
I removed the code which allowed you to change the version name in some *rare* (!) circumstances. I do not see why the upgrade wizard should take care of any of this.
5) When upgrading bibles move the files to the temp directory.
6) clean ups

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote : Posted in a previous version of this proposal

Creation of temp dir name shouls be common to easy for one to be changed and rest missed

review: Needs Fixing
Revision history for this message
Andreas Preikschat (googol-deactivatedaccount) wrote : Posted in a previous version of this proposal

Note: Especially testing on Windows is requested.

Revision history for this message
Tim Bentley (trb143) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

At a glance looks fine to me.

review: Approve
Revision history for this message
Andreas Preikschat (googol-deactivatedaccount) wrote :

Fixed a traceback on windows and fixed bug #824129 (there might still be cases where corrupted bibles were not removed, but this fixes this for windows).

Revision history for this message
Tim Bentley (trb143) :
review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2011-08-16 21:19:57 +0000
+++ openlp/core/ui/mainwindow.py 2011-08-17 10:17:27 +0000
@@ -28,6 +28,7 @@
28import logging28import logging
29import os29import os
30import sys30import sys
31import shutil
31from tempfile import gettempdir32from tempfile import gettempdir
3233
33from PyQt4 import QtCore, QtGui34from PyQt4 import QtCore, QtGui
@@ -726,11 +727,7 @@
726 plugin.firstTime()727 plugin.firstTime()
727 Receiver.send_message(u'openlp_process_events')728 Receiver.send_message(u'openlp_process_events')
728 temp_dir = os.path.join(unicode(gettempdir()), u'openlp')729 temp_dir = os.path.join(unicode(gettempdir()), u'openlp')
729 if not os.path.exists(temp_dir):730 shutil.rmtree(temp_dir, True)
730 return
731 for filename in os.listdir(temp_dir):
732 delete_file(os.path.join(temp_dir, filename))
733 os.removedirs(temp_dir)
734731
735 def onFirstTimeWizardClicked(self):732 def onFirstTimeWizardClicked(self):
736 """733 """
737734
=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py 2011-07-17 15:09:30 +0000
+++ openlp/core/utils/__init__.py 2011-08-17 10:17:27 +0000
@@ -386,6 +386,17 @@
386 else:386 else:
387 return os.path.split(path)387 return os.path.split(path)
388388
389def clean_filename(filename):
390 """
391 Removes invalid characters from the given ``filename``.
392
393 ``filename``
394 The "dirty" file name to clean.
395 """
396 if not isinstance(filename, unicode):
397 filename = unicode(filename, u'utf-8')
398 return re.sub(r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_')
399
389def delete_file(file_path_name):400def delete_file(file_path_name):
390 """401 """
391 Deletes a file from the system.402 Deletes a file from the system.
@@ -492,4 +503,4 @@
492__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version',503__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version',
493 u'add_actions', u'get_filesystem_encoding', u'LanguageManager',504 u'add_actions', u'get_filesystem_encoding', u'LanguageManager',
494 u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command',505 u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command',
495 u'get_uno_instance', u'delete_file']506 u'get_uno_instance', u'delete_file', u'clean_filename']
496507
=== modified file 'openlp/plugins/bibles/forms/bibleupgradeform.py'
--- openlp/plugins/bibles/forms/bibleupgradeform.py 2011-07-14 18:42:38 +0000
+++ openlp/plugins/bibles/forms/bibleupgradeform.py 2011-08-17 10:17:27 +0000
@@ -29,17 +29,17 @@
29import logging29import logging
30import os30import os
31import shutil31import shutil
32from tempfile import gettempdir
3233
33from PyQt4 import QtCore, QtGui34from PyQt4 import QtCore, QtGui
3435
35from openlp.core.lib import Receiver, SettingsManager, translate, \36from openlp.core.lib import Receiver, SettingsManager, translate, \
36 check_directory_exists37 check_directory_exists
37from openlp.core.lib.db import delete_database
38from openlp.core.lib.ui import UiStrings, critical_error_message_box38from openlp.core.lib.ui import UiStrings, critical_error_message_box
39from openlp.core.ui.wizard import OpenLPWizard, WizardStrings39from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
40from openlp.core.utils import AppLocation, delete_file40from openlp.core.utils import AppLocation, delete_file
41from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \41from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \
42 BiblesResourcesDB, clean_filename42 BiblesResourcesDB
43from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract43from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract
4444
45log = logging.getLogger(__name__)45log = logging.getLogger(__name__)
@@ -70,6 +70,7 @@
70 self.suffix = u'.sqlite'70 self.suffix = u'.sqlite'
71 self.settingsSection = u'bibles'71 self.settingsSection = u'bibles'
72 self.path = AppLocation.get_section_data_path(self.settingsSection)72 self.path = AppLocation.get_section_data_path(self.settingsSection)
73 self.temp_dir = os.path.join(gettempdir(), u'openlp')
73 self.files = self.manager.old_bible_databases74 self.files = self.manager.old_bible_databases
74 self.success = {}75 self.success = {}
75 self.newbibles = {}76 self.newbibles = {}
@@ -91,20 +92,6 @@
91 log.debug(u'Stopping import')92 log.debug(u'Stopping import')
92 self.stop_import_flag = True93 self.stop_import_flag = True
9394
94 def onCheckBoxIndexChanged(self, index):
95 """
96 Show/Hide warnings if CheckBox state has changed
97 """
98 for number, filename in enumerate(self.files):
99 if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
100 self.verticalWidget[number].hide()
101 self.formWidget[number].hide()
102 else:
103 version_name = unicode(self.versionNameEdit[number].text())
104 if self.manager.exists(version_name):
105 self.verticalWidget[number].show()
106 self.formWidget[number].show()
107
108 def reject(self):95 def reject(self):
109 """96 """
110 Stop the wizard on cancel button, close button or ESC key.97 Stop the wizard on cancel button, close button or ESC key.
@@ -113,8 +100,6 @@
113 self.stop_import_flag = True100 self.stop_import_flag = True
114 if not self.currentPage() == self.progressPage:101 if not self.currentPage() == self.progressPage:
115 self.done(QtGui.QDialog.Rejected)102 self.done(QtGui.QDialog.Rejected)
116 else:
117 self.postWizard()
118103
119 def onCurrentIdChanged(self, pageId):104 def onCurrentIdChanged(self, pageId):
120 """105 """
@@ -124,7 +109,7 @@
124 self.preWizard()109 self.preWizard()
125 self.performWizard()110 self.performWizard()
126 self.postWizard()111 self.postWizard()
127 elif self.page(pageId) == self.selectPage and self.maxBibles == 0:112 elif self.page(pageId) == self.selectPage and not self.files:
128 self.next()113 self.next()
129114
130 def onBackupBrowseButtonClicked(self):115 def onBackupBrowseButtonClicked(self):
@@ -243,78 +228,13 @@
243 Add the content to the scrollArea.228 Add the content to the scrollArea.
244 """229 """
245 self.checkBox = {}230 self.checkBox = {}
246 self.versionNameEdit = {}
247 self.versionNameLabel = {}
248 self.versionInfoLabel = {}
249 self.versionInfoPixmap = {}
250 self.verticalWidget = {}
251 self.horizontalLayout = {}
252 self.formWidget = {}
253 self.formLayoutAttention = {}
254 for number, filename in enumerate(self.files):231 for number, filename in enumerate(self.files):
255 bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0])232 bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0])
256 self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents)233 self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents)
257 checkBoxName = u'checkBox[%d]' % number234 self.checkBox[number].setObjectName(u'checkBox[%d]' % number)
258 self.checkBox[number].setObjectName(checkBoxName)
259 self.checkBox[number].setText(bible.get_name())235 self.checkBox[number].setText(bible.get_name())
260 self.checkBox[number].setCheckState(QtCore.Qt.Checked)236 self.checkBox[number].setCheckState(QtCore.Qt.Checked)
261 self.formLayout.addWidget(self.checkBox[number])237 self.formLayout.addWidget(self.checkBox[number])
262 self.verticalWidget[number] = QtGui.QWidget(self.scrollAreaContents)
263 verticalWidgetName = u'verticalWidget[%d]' % number
264 self.verticalWidget[number].setObjectName(verticalWidgetName)
265 self.horizontalLayout[number] = QtGui.QHBoxLayout(
266 self.verticalWidget[number])
267 self.horizontalLayout[number].setContentsMargins(25, 0, 0, 0)
268 horizontalLayoutName = u'horizontalLayout[%d]' % number
269 self.horizontalLayout[number].setObjectName(horizontalLayoutName)
270 self.versionInfoPixmap[number] = QtGui.QLabel(
271 self.verticalWidget[number])
272 versionInfoPixmapName = u'versionInfoPixmap[%d]' % number
273 self.versionInfoPixmap[number].setObjectName(versionInfoPixmapName)
274 self.versionInfoPixmap[number].setPixmap(QtGui.QPixmap(
275 u':/bibles/bibles_upgrade_alert.png'))
276 self.versionInfoPixmap[number].setAlignment(QtCore.Qt.AlignRight)
277 self.horizontalLayout[number].addWidget(
278 self.versionInfoPixmap[number])
279 self.versionInfoLabel[number] = QtGui.QLabel(
280 self.verticalWidget[number])
281 versionInfoLabelName = u'versionInfoLabel[%d]' % number
282 self.versionInfoLabel[number].setObjectName(versionInfoLabelName)
283 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
284 QtGui.QSizePolicy.Preferred)
285 sizePolicy.setHorizontalStretch(0)
286 sizePolicy.setVerticalStretch(0)
287 sizePolicy.setHeightForWidth(
288 self.versionInfoLabel[number].sizePolicy().hasHeightForWidth())
289 self.versionInfoLabel[number].setSizePolicy(sizePolicy)
290 self.horizontalLayout[number].addWidget(
291 self.versionInfoLabel[number])
292 self.formLayout.addWidget(self.verticalWidget[number])
293 self.formWidget[number] = QtGui.QWidget(self.scrollAreaContents)
294 formWidgetName = u'formWidget[%d]' % number
295 self.formWidget[number].setObjectName(formWidgetName)
296 self.formLayoutAttention[number] = QtGui.QFormLayout(
297 self.formWidget[number])
298 self.formLayoutAttention[number].setContentsMargins(25, 0, 0, 5)
299 formLayoutAttentionName = u'formLayoutAttention[%d]' % number
300 self.formLayoutAttention[number].setObjectName(
301 formLayoutAttentionName)
302 self.versionNameLabel[number] = QtGui.QLabel(
303 self.formWidget[number])
304 self.versionNameLabel[number].setObjectName(u'VersionNameLabel')
305 self.formLayoutAttention[number].setWidget(0,
306 QtGui.QFormLayout.LabelRole, self.versionNameLabel[number])
307 self.versionNameEdit[number] = QtGui.QLineEdit(
308 self.formWidget[number])
309 self.versionNameEdit[number].setObjectName(u'VersionNameEdit')
310 self.formLayoutAttention[number].setWidget(0,
311 QtGui.QFormLayout.FieldRole, self.versionNameEdit[number])
312 self.versionNameEdit[number].setText(bible.get_name())
313 self.formLayout.addWidget(self.formWidget[number])
314 # Set up the Signal for the checkbox.
315 QtCore.QObject.connect(self.checkBox[number],
316 QtCore.SIGNAL(u'stateChanged(int)'),
317 self.onCheckBoxIndexChanged)
318 self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum,238 self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum,
319 QtGui.QSizePolicy.Expanding)239 QtGui.QSizePolicy.Expanding)
320 self.formLayout.addItem(self.spacerItem)240 self.formLayout.addItem(self.spacerItem)
@@ -327,23 +247,6 @@
327 for number, filename in enumerate(self.files):247 for number, filename in enumerate(self.files):
328 self.formLayout.removeWidget(self.checkBox[number])248 self.formLayout.removeWidget(self.checkBox[number])
329 self.checkBox[number].setParent(None)249 self.checkBox[number].setParent(None)
330 self.horizontalLayout[number].removeWidget(
331 self.versionInfoPixmap[number])
332 self.versionInfoPixmap[number].setParent(None)
333 self.horizontalLayout[number].removeWidget(
334 self.versionInfoLabel[number])
335 self.versionInfoLabel[number].setParent(None)
336 self.formLayout.removeWidget(self.verticalWidget[number])
337 self.verticalWidget[number].setParent(None)
338 self.formLayoutAttention[number].removeWidget(
339 self.versionNameLabel[number])
340 self.versionNameLabel[number].setParent(None)
341 self.formLayoutAttention[number].removeWidget(
342 self.versionNameEdit[number])
343 self.formLayoutAttention[number].deleteLater()
344 self.versionNameEdit[number].setParent(None)
345 self.formLayout.removeWidget(self.formWidget[number])
346 self.formWidget[number].setParent(None)
347 self.formLayout.removeItem(self.spacerItem)250 self.formLayout.removeItem(self.spacerItem)
348251
349 def retranslateUi(self):252 def retranslateUi(self):
@@ -385,12 +288,6 @@
385 self.selectPage.setSubTitle(288 self.selectPage.setSubTitle(
386 translate('BiblesPlugin.UpgradeWizardForm',289 translate('BiblesPlugin.UpgradeWizardForm',
387 'Please select the Bibles to upgrade'))290 'Please select the Bibles to upgrade'))
388 for number, bible in enumerate(self.files):
389 self.versionNameLabel[number].setText(
390 translate('BiblesPlugin.UpgradeWizardForm', 'Version name:'))
391 self.versionInfoLabel[number].setText(
392 translate('BiblesPlugin.UpgradeWizardForm', 'This '
393 'Bible still exists. Please change the name or uncheck it.'))
394 self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm',291 self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm',
395 'Upgrading'))292 'Upgrading'))
396 self.progressPage.setSubTitle(293 self.progressPage.setSubTitle(
@@ -425,58 +322,16 @@
425 return False322 return False
426 return True323 return True
427 elif self.currentPage() == self.selectPage:324 elif self.currentPage() == self.selectPage:
325 check_directory_exists(self.temp_dir)
428 for number, filename in enumerate(self.files):326 for number, filename in enumerate(self.files):
429 if not self.checkBox[number].checkState() == QtCore.Qt.Checked:327 if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
430 continue328 continue
431 version_name = unicode(self.versionNameEdit[number].text())329 # Move bibles to temp dir.
432 if not version_name:330 if not os.path.exists(os.path.join(self.temp_dir, filename[0])):
433 critical_error_message_box(UiStrings().EmptyField,331 shutil.move(
434 translate('BiblesPlugin.UpgradeWizardForm',332 os.path.join(self.path, filename[0]), self.temp_dir)
435 'You need to specify a version name for your Bible.'))333 else:
436 self.versionNameEdit[number].setFocus()334 delete_file(os.path.join(self.path, filename[0]))
437 return False
438 elif self.manager.exists(version_name):
439 critical_error_message_box(
440 translate('BiblesPlugin.UpgradeWizardForm',
441 'Bible Exists'),
442 translate('BiblesPlugin.UpgradeWizardForm',
443 'This Bible already exists. Please upgrade '
444 'a different Bible, delete the existing one or '
445 'uncheck.'))
446 self.versionNameEdit[number].setFocus()
447 return False
448 elif os.path.exists(os.path.join(self.path, clean_filename(
449 version_name))) and version_name == filename[1]:
450 newfilename = u'old_database_%s' % filename[0]
451 if not os.path.exists(os.path.join(self.path,
452 newfilename)):
453 os.rename(os.path.join(self.path, filename[0]),
454 os.path.join(self.path, newfilename))
455 self.files[number] = [newfilename, filename[1]]
456 continue
457 else:
458 critical_error_message_box(
459 translate('BiblesPlugin.UpgradeWizardForm',
460 'Bible Exists'),
461 translate('BiblesPlugin.UpgradeWizardForm',
462 'This Bible already exists. Please upgrade '
463 'a different Bible, delete the existing one or '
464 'uncheck.'))
465 self.verticalWidget[number].show()
466 self.formWidget[number].show()
467 self.versionNameEdit[number].setFocus()
468 return False
469 elif os.path.exists(os.path.join(self.path,
470 clean_filename(version_name))):
471 critical_error_message_box(
472 translate('BiblesPlugin.UpgradeWizardForm',
473 'Bible Exists'),
474 translate('BiblesPlugin.UpgradeWizardForm',
475 'This Bible already exists. Please upgrade '
476 'a different Bible, delete the existing one or '
477 'uncheck.'))
478 self.versionNameEdit[number].setFocus()
479 return False
480 return True335 return True
481 if self.currentPage() == self.progressPage:336 if self.currentPage() == self.progressPage:
482 return True337 return True
@@ -495,16 +350,8 @@
495 self.files = self.manager.old_bible_databases350 self.files = self.manager.old_bible_databases
496 self.addScrollArea()351 self.addScrollArea()
497 self.retranslateUi()352 self.retranslateUi()
498 self.maxBibles = len(self.files)
499 for number, filename in enumerate(self.files):353 for number, filename in enumerate(self.files):
500 self.checkBox[number].setCheckState(QtCore.Qt.Checked)354 self.checkBox[number].setCheckState(QtCore.Qt.Checked)
501 oldname = filename[1]
502 if self.manager.exists(oldname):
503 self.verticalWidget[number].show()
504 self.formWidget[number].show()
505 else:
506 self.verticalWidget[number].hide()
507 self.formWidget[number].hide()
508 self.progressBar.show()355 self.progressBar.show()
509 self.restart()356 self.restart()
510 self.finishButton.setVisible(False)357 self.finishButton.setVisible(False)
@@ -516,9 +363,8 @@
516 Prepare the UI for the upgrade.363 Prepare the UI for the upgrade.
517 """364 """
518 OpenLPWizard.preWizard(self)365 OpenLPWizard.preWizard(self)
519 self.progressLabel.setText(translate(366 self.progressLabel.setText(
520 'BiblesPlugin.UpgradeWizardForm',367 translate('BiblesPlugin.UpgradeWizardForm', 'Starting upgrade...'))
521 'Starting upgrade...'))
522 Receiver.send_message(u'openlp_process_events')368 Receiver.send_message(u'openlp_process_events')
523369
524 def performWizard(self):370 def performWizard(self):
@@ -527,48 +373,42 @@
527 """373 """
528 self.include_webbible = False374 self.include_webbible = False
529 proxy_server = None375 proxy_server = None
530 if self.maxBibles == 0:376 if not self.files:
531 self.progressLabel.setText(377 self.progressLabel.setText(
532 translate('BiblesPlugin.UpgradeWizardForm', 'There are no '378 translate('BiblesPlugin.UpgradeWizardForm', 'There are no '
533 'Bibles that need to be upgraded.'))379 'Bibles that need to be upgraded.'))
534 self.progressBar.hide()380 self.progressBar.hide()
535 return381 return
536 self.maxBibles = 0382 max_bibles = 0
537 for number, file in enumerate(self.files):383 for number, file in enumerate(self.files):
538 if self.checkBox[number].checkState() == QtCore.Qt.Checked:384 if self.checkBox[number].checkState() == QtCore.Qt.Checked:
539 self.maxBibles += 1385 max_bibles += 1
540 number = 0386 oldBible = None
541 for biblenumber, filename in enumerate(self.files):387 for number, filename in enumerate(self.files):
388 # Close the previous bible's connection.
389 if oldBible is not None:
390 oldBible.close_connection()
391 # Set to None to make obvious that we have already closed the
392 # database.
393 oldBible = None
542 if self.stop_import_flag:394 if self.stop_import_flag:
543 bible_failed = True395 self.success[number] = False
544 break396 break
545 bible_failed = False397 if not self.checkBox[number].checkState() == QtCore.Qt.Checked:
546 self.success[biblenumber] = False398 self.success[number] = False
547 if not self.checkBox[biblenumber].checkState() == QtCore.Qt.Checked:
548 continue399 continue
549 self.progressBar.reset()400 self.progressBar.reset()
550 oldbible = OldBibleDB(self.mediaItem, path=self.path,401 oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir,
551 file=filename[0])402 file=filename[0])
552 name = filename[1]403 name = filename[1]
553 if name is None:
554 delete_file(os.path.join(self.path, filename[0]))
555 self.incrementProgressBar(unicode(translate(
556 'BiblesPlugin.UpgradeWizardForm',
557 'Upgrading Bible %s of %s: "%s"\nFailed')) %
558 (number + 1, self.maxBibles, name),
559 self.progressBar.maximum() - self.progressBar.value())
560 number += 1
561 continue
562 self.progressLabel.setText(unicode(translate(404 self.progressLabel.setText(unicode(translate(
563 'BiblesPlugin.UpgradeWizardForm',405 'BiblesPlugin.UpgradeWizardForm',
564 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) %406 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) %
565 (number + 1, self.maxBibles, name))407 (number + 1, max_bibles, name))
566 if os.path.exists(os.path.join(self.path, filename[0])):
567 name = unicode(self.versionNameEdit[biblenumber].text())
568 self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,408 self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,
569 name=name)409 name=name, file=filename[0])
570 self.newbibles[number].register(self.plugin.upgrade_wizard)410 self.newbibles[number].register(self.plugin.upgrade_wizard)
571 metadata = oldbible.get_metadata()411 metadata = oldBible.get_metadata()
572 webbible = False412 webbible = False
573 meta_data = {}413 meta_data = {}
574 for meta in metadata:414 for meta in metadata:
@@ -595,7 +435,7 @@
595 u'name: "%s" failed' % (435 u'name: "%s" failed' % (
596 meta_data[u'download source'],436 meta_data[u'download source'],
597 meta_data[u'download name']))437 meta_data[u'download name']))
598 delete_database(self.path, clean_filename(name))438 self.newbibles[number].session.close()
599 del self.newbibles[number]439 del self.newbibles[number]
600 critical_error_message_box(440 critical_error_message_box(
601 translate('BiblesPlugin.UpgradeWizardForm',441 translate('BiblesPlugin.UpgradeWizardForm',
@@ -606,9 +446,9 @@
606 self.incrementProgressBar(unicode(translate(446 self.incrementProgressBar(unicode(translate(
607 'BiblesPlugin.UpgradeWizardForm',447 'BiblesPlugin.UpgradeWizardForm',
608 'Upgrading Bible %s of %s: "%s"\nFailed')) %448 'Upgrading Bible %s of %s: "%s"\nFailed')) %
609 (number + 1, self.maxBibles, name),449 (number + 1, max_bibles, name),
610 self.progressBar.maximum() - self.progressBar.value())450 self.progressBar.maximum() - self.progressBar.value())
611 number += 1451 self.success[number] = False
612 continue452 continue
613 bible = BiblesResourcesDB.get_webbible(453 bible = BiblesResourcesDB.get_webbible(
614 meta_data[u'download name'],454 meta_data[u'download name'],
@@ -621,25 +461,25 @@
621 language_id = self.newbibles[number].get_language(name)461 language_id = self.newbibles[number].get_language(name)
622 if not language_id:462 if not language_id:
623 log.warn(u'Upgrading from "%s" failed' % filename[0])463 log.warn(u'Upgrading from "%s" failed' % filename[0])
624 delete_database(self.path, clean_filename(name))464 self.newbibles[number].session.close()
625 del self.newbibles[number]465 del self.newbibles[number]
626 self.incrementProgressBar(unicode(translate(466 self.incrementProgressBar(unicode(translate(
627 'BiblesPlugin.UpgradeWizardForm',467 'BiblesPlugin.UpgradeWizardForm',
628 'Upgrading Bible %s of %s: "%s"\nFailed')) %468 'Upgrading Bible %s of %s: "%s"\nFailed')) %
629 (number + 1, self.maxBibles, name),469 (number + 1, max_bibles, name),
630 self.progressBar.maximum() - self.progressBar.value())470 self.progressBar.maximum() - self.progressBar.value())
631 number += 1471 self.success[number] = False
632 continue472 continue
633 self.progressBar.setMaximum(len(books))473 self.progressBar.setMaximum(len(books))
634 for book in books:474 for book in books:
635 if self.stop_import_flag:475 if self.stop_import_flag:
636 bible_failed = True476 self.success[number] = False
637 break477 break
638 self.incrementProgressBar(unicode(translate(478 self.incrementProgressBar(unicode(translate(
639 'BiblesPlugin.UpgradeWizardForm',479 'BiblesPlugin.UpgradeWizardForm',
640 'Upgrading Bible %s of %s: "%s"\n'480 'Upgrading Bible %s of %s: "%s"\n'
641 'Upgrading %s ...')) %481 'Upgrading %s ...')) %
642 (number + 1, self.maxBibles, name, book))482 (number + 1, max_bibles, name, book))
643 book_ref_id = self.newbibles[number].\483 book_ref_id = self.newbibles[number].\
644 get_book_ref_id_by_name(book, len(books), language_id)484 get_book_ref_id_by_name(book, len(books), language_id)
645 if not book_ref_id:485 if not book_ref_id:
@@ -647,24 +487,24 @@
647 u'name: "%s" aborted by user' % (487 u'name: "%s" aborted by user' % (
648 meta_data[u'download source'],488 meta_data[u'download source'],
649 meta_data[u'download name']))489 meta_data[u'download name']))
650 delete_database(self.path, clean_filename(name))490 self.newbibles[number].session.close()
651 del self.newbibles[number]491 del self.newbibles[number]
652 bible_failed = True492 self.success[number] = False
653 break493 break
654 book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)494 book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
655 db_book = self.newbibles[number].create_book(book,495 db_book = self.newbibles[number].create_book(book,
656 book_ref_id, book_details[u'testament_id'])496 book_ref_id, book_details[u'testament_id'])
657 # Try to import still downloaded verses497 # Try to import already downloaded verses.
658 oldbook = oldbible.get_book(book)498 oldbook = oldBible.get_book(book)
659 if oldbook:499 if oldbook:
660 verses = oldbible.get_verses(oldbook[u'id'])500 verses = oldBible.get_verses(oldbook[u'id'])
661 if not verses:501 if not verses:
662 log.warn(u'No verses found to import for book '502 log.warn(u'No verses found to import for book '
663 u'"%s"', book)503 u'"%s"', book)
664 continue504 continue
665 for verse in verses:505 for verse in verses:
666 if self.stop_import_flag:506 if self.stop_import_flag:
667 bible_failed = True507 self.success[number] = False
668 break508 break
669 self.newbibles[number].create_verse(db_book.id,509 self.newbibles[number].create_verse(db_book.id,
670 int(verse[u'chapter']),510 int(verse[u'chapter']),
@@ -678,40 +518,40 @@
678 language_id = self.newbibles[number].get_language(name)518 language_id = self.newbibles[number].get_language(name)
679 if not language_id:519 if not language_id:
680 log.warn(u'Upgrading books from "%s" failed' % name)520 log.warn(u'Upgrading books from "%s" failed' % name)
681 delete_database(self.path, clean_filename(name))521 self.newbibles[number].session.close()
682 del self.newbibles[number]522 del self.newbibles[number]
683 self.incrementProgressBar(unicode(translate(523 self.incrementProgressBar(unicode(translate(
684 'BiblesPlugin.UpgradeWizardForm',524 'BiblesPlugin.UpgradeWizardForm',
685 'Upgrading Bible %s of %s: "%s"\nFailed')) %525 'Upgrading Bible %s of %s: "%s"\nFailed')) %
686 (number + 1, self.maxBibles, name),526 (number + 1, max_bibles, name),
687 self.progressBar.maximum() - self.progressBar.value())527 self.progressBar.maximum() - self.progressBar.value())
688 number += 1528 self.success[number] = False
689 continue529 continue
690 books = oldbible.get_books()530 books = oldBible.get_books()
691 self.progressBar.setMaximum(len(books))531 self.progressBar.setMaximum(len(books))
692 for book in books:532 for book in books:
693 if self.stop_import_flag:533 if self.stop_import_flag:
694 bible_failed = True534 self.success[number] = False
695 break535 break
696 self.incrementProgressBar(unicode(translate(536 self.incrementProgressBar(unicode(translate(
697 'BiblesPlugin.UpgradeWizardForm',537 'BiblesPlugin.UpgradeWizardForm',
698 'Upgrading Bible %s of %s: "%s"\n'538 'Upgrading Bible %s of %s: "%s"\n'
699 'Upgrading %s ...')) %539 'Upgrading %s ...')) %
700 (number + 1, self.maxBibles, name, book[u'name']))540 (number + 1, max_bibles, name, book[u'name']))
701 book_ref_id = self.newbibles[number].\541 book_ref_id = self.newbibles[number].\
702 get_book_ref_id_by_name(book[u'name'], len(books),542 get_book_ref_id_by_name(book[u'name'], len(books),
703 language_id)543 language_id)
704 if not book_ref_id:544 if not book_ref_id:
705 log.warn(u'Upgrading books from %s " '\545 log.warn(u'Upgrading books from %s " '\
706 'failed - aborted by user' % name)546 'failed - aborted by user' % name)
707 delete_database(self.path, clean_filename(name))547 self.newbibles[number].session.close()
708 del self.newbibles[number]548 del self.newbibles[number]
709 bible_failed = True549 self.success[number] = False
710 break550 break
711 book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)551 book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
712 db_book = self.newbibles[number].create_book(book[u'name'],552 db_book = self.newbibles[number].create_book(book[u'name'],
713 book_ref_id, book_details[u'testament_id'])553 book_ref_id, book_details[u'testament_id'])
714 verses = oldbible.get_verses(book[u'id'])554 verses = oldBible.get_verses(book[u'id'])
715 if not verses:555 if not verses:
716 log.warn(u'No verses found to import for book '556 log.warn(u'No verses found to import for book '
717 u'"%s"', book[u'name'])557 u'"%s"', book[u'name'])
@@ -719,31 +559,32 @@
719 continue559 continue
720 for verse in verses:560 for verse in verses:
721 if self.stop_import_flag:561 if self.stop_import_flag:
722 bible_failed = True562 self.success[number] = False
723 break563 break
724 self.newbibles[number].create_verse(db_book.id,564 self.newbibles[number].create_verse(db_book.id,
725 int(verse[u'chapter']),565 int(verse[u'chapter']),
726 int(verse[u'verse']), unicode(verse[u'text']))566 int(verse[u'verse']), unicode(verse[u'text']))
727 Receiver.send_message(u'openlp_process_events')567 Receiver.send_message(u'openlp_process_events')
728 self.newbibles[number].session.commit()568 self.newbibles[number].session.commit()
729 if not bible_failed:569 if self.success.has_key(number) and not self.success[number]:
570 self.incrementProgressBar(unicode(translate(
571 'BiblesPlugin.UpgradeWizardForm',
572 'Upgrading Bible %s of %s: "%s"\nFailed')) %
573 (number + 1, max_bibles, name),
574 self.progressBar.maximum() - self.progressBar.value())
575 else:
576 self.success[number] = True
730 self.newbibles[number].create_meta(u'Version', name)577 self.newbibles[number].create_meta(u'Version', name)
731 oldbible.close_connection()
732 delete_file(os.path.join(self.path, filename[0]))
733 self.incrementProgressBar(unicode(translate(578 self.incrementProgressBar(unicode(translate(
734 'BiblesPlugin.UpgradeWizardForm',579 'BiblesPlugin.UpgradeWizardForm',
735 'Upgrading Bible %s of %s: "%s"\n'580 'Upgrading Bible %s of %s: "%s"\n'
736 'Complete')) %581 'Complete')) %
737 (number + 1, self.maxBibles, name))582 (number + 1, max_bibles, name))
738 self.success[biblenumber] = True583 if self.newbibles.has_key(number):
739 else:584 self.newbibles[number].session.close()
740 self.incrementProgressBar(unicode(translate(585 # Close the last bible's connection if possible.
741 'BiblesPlugin.UpgradeWizardForm',586 if oldBible is not None:
742 'Upgrading Bible %s of %s: "%s"\nFailed')) %587 oldBible.close_connection()
743 (number + 1, self.maxBibles, name),
744 self.progressBar.maximum() - self.progressBar.value())
745 delete_database(self.path, clean_filename(name))
746 number += 1
747588
748 def postWizard(self):589 def postWizard(self):
749 """590 """
@@ -752,10 +593,14 @@
752 successful_import = 0593 successful_import = 0
753 failed_import = 0594 failed_import = 0
754 for number, filename in enumerate(self.files):595 for number, filename in enumerate(self.files):
755 if number in self.success and self.success[number] == True:596 if self.success.has_key(number) and self.success[number]:
756 successful_import += 1597 successful_import += 1
757 elif self.checkBox[number].checkState() == QtCore.Qt.Checked:598 elif self.checkBox[number].checkState() == QtCore.Qt.Checked:
758 failed_import += 1599 failed_import += 1
600 # Delete upgraded (but not complete, corrupted, ...) bible.
601 delete_file(os.path.join(self.path, filename[0]))
602 # Copy not upgraded bible back.
603 shutil.move(os.path.join(self.temp_dir, filename[0]), self.path)
759 if failed_import > 0:604 if failed_import > 0:
760 failed_import_text = unicode(translate(605 failed_import_text = unicode(translate(
761 'BiblesPlugin.UpgradeWizardForm',606 'BiblesPlugin.UpgradeWizardForm',
@@ -776,7 +621,8 @@
776 'Bible(s): %s successful%s')) % (successful_import,621 'Bible(s): %s successful%s')) % (successful_import,
777 failed_import_text))622 failed_import_text))
778 else:623 else:
779 self.progressLabel.setText(624 self.progressLabel.setText(translate(
780 translate('BiblesPlugin.UpgradeWizardForm', 'Upgrade '625 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.'))
781 'failed.'))626 # Remove temp directory.
627 shutil.rmtree(self.temp_dir, True)
782 OpenLPWizard.postWizard(self)628 OpenLPWizard.postWizard(self)
783629
=== modified file 'openlp/plugins/bibles/forms/languageform.py'
--- openlp/plugins/bibles/forms/languageform.py 2011-05-26 19:13:11 +0000
+++ openlp/plugins/bibles/forms/languageform.py 2011-08-17 10:17:27 +0000
@@ -44,8 +44,8 @@
44 Class to manage a dialog which ask the user for a language.44 Class to manage a dialog which ask the user for a language.
45 """45 """
46 log.info(u'LanguageForm loaded')46 log.info(u'LanguageForm loaded')
47 47
48 def __init__(self, parent = None):48 def __init__(self, parent=None):
49 """49 """
50 Constructor50 Constructor
51 """51 """
@@ -57,12 +57,11 @@
57 if bible_name:57 if bible_name:
58 self.bibleLabel.setText(unicode(bible_name))58 self.bibleLabel.setText(unicode(bible_name))
59 items = BiblesResourcesDB.get_languages()59 items = BiblesResourcesDB.get_languages()
60 for item in items:60 self.languageComboBox.addItems([item[u'name'] for item in items])
61 self.languageComboBox.addItem(item[u'name'])
62 return QDialog.exec_(self)61 return QDialog.exec_(self)
63 62
64 def accept(self):63 def accept(self):
65 if self.languageComboBox.currentText() == u'':64 if not self.languageComboBox.currentText():
66 critical_error_message_box(65 critical_error_message_box(
67 message=translate('BiblesPlugin.LanguageForm',66 message=translate('BiblesPlugin.LanguageForm',
68 'You need to choose a language.'))67 'You need to choose a language.'))
6968
=== modified file 'openlp/plugins/bibles/lib/db.py'
--- openlp/plugins/bibles/lib/db.py 2011-07-07 18:03:12 +0000
+++ openlp/plugins/bibles/lib/db.py 2011-08-17 10:17:27 +0000
@@ -39,7 +39,7 @@
39from openlp.core.lib import Receiver, translate39from openlp.core.lib import Receiver, translate
40from openlp.core.lib.db import BaseModel, init_db, Manager40from openlp.core.lib.db import BaseModel, init_db, Manager
41from openlp.core.lib.ui import critical_error_message_box41from openlp.core.lib.ui import critical_error_message_box
42from openlp.core.utils import AppLocation42from openlp.core.utils import AppLocation, clean_filename
4343
44log = logging.getLogger(__name__)44log = logging.getLogger(__name__)
4545
@@ -63,19 +63,6 @@
63 """63 """
64 pass64 pass
6565
66def clean_filename(filename):
67 """
68 Clean up the version name of the Bible and convert it into a valid
69 file name.
70
71 ``filename``
72 The "dirty" file name or version name.
73 """
74 if not isinstance(filename, unicode):
75 filename = unicode(filename, u'utf-8')
76 filename = re.sub(r'[^\w]+', u'_', filename).strip(u'_')
77 return filename + u'.sqlite'
78
79def init_schema(url):66def init_schema(url):
80 """67 """
81 Setup a bible database connection and initialise the database schema.68 Setup a bible database connection and initialise the database schema.
@@ -158,7 +145,7 @@
158 self.name = kwargs[u'name']145 self.name = kwargs[u'name']
159 if not isinstance(self.name, unicode):146 if not isinstance(self.name, unicode):
160 self.name = unicode(self.name, u'utf-8')147 self.name = unicode(self.name, u'utf-8')
161 self.file = clean_filename(self.name)148 self.file = clean_filename(self.name) + u'.sqlite'
162 if u'file' in kwargs:149 if u'file' in kwargs:
163 self.file = kwargs[u'file']150 self.file = kwargs[u'file']
164 Manager.__init__(self, u'bibles', init_schema, self.file)151 Manager.__init__(self, u'bibles', init_schema, self.file)
@@ -210,7 +197,7 @@
210 The book_reference_id from bibles_resources.sqlite of the book.197 The book_reference_id from bibles_resources.sqlite of the book.
211198
212 ``testament``199 ``testament``
213 *Defaults to 1.* The testament_reference_id from 200 *Defaults to 1.* The testament_reference_id from
214 bibles_resources.sqlite of the testament this book belongs to.201 bibles_resources.sqlite of the testament this book belongs to.
215 """202 """
216 log.debug(u'BibleDB.create_book("%s", "%s")', name, bk_ref_id)203 log.debug(u'BibleDB.create_book("%s", "%s")', name, bk_ref_id)
@@ -329,7 +316,7 @@
329 return self.get_object_filtered(Book, Book.book_reference_id.like(id))316 return self.get_object_filtered(Book, Book.book_reference_id.like(id))
330317
331 def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):318 def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):
332 log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book, 319 log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book,
333 language_id)320 language_id)
334 if BiblesResourcesDB.get_book(book, True):321 if BiblesResourcesDB.get_book(book, True):
335 book_temp = BiblesResourcesDB.get_book(book, True)322 book_temp = BiblesResourcesDB.get_book(book, True)
@@ -471,7 +458,7 @@
471458
472 def get_language(self, bible_name=None):459 def get_language(self, bible_name=None):
473 """460 """
474 If no language is given it calls a dialog window where the user could 461 If no language is given it calls a dialog window where the user could
475 select the bible language.462 select the bible language.
476 Return the language id of a bible.463 Return the language id of a bible.
477464
@@ -521,9 +508,9 @@
521 some resources which are used in the Bibles plugin.508 some resources which are used in the Bibles plugin.
522 A wrapper class around a small SQLite database which contains the download509 A wrapper class around a small SQLite database which contains the download
523 resources, a biblelist from the different download resources, the books,510 resources, a biblelist from the different download resources, the books,
524 chapter counts and verse counts for the web download Bibles, a language 511 chapter counts and verse counts for the web download Bibles, a language
525 reference, the testament reference and some alternative book names. This 512 reference, the testament reference and some alternative book names. This
526 class contains a singleton "cursor" so that only one connection to the 513 class contains a singleton "cursor" so that only one connection to the
527 SQLite database is ever used.514 SQLite database is ever used.
528 """515 """
529 cursor = None516 cursor = None
@@ -582,7 +569,7 @@
582569
583 ``name``570 ``name``
584 The name or abbreviation of the book.571 The name or abbreviation of the book.
585 572
586 ``lower``573 ``lower``
587 True if the comparsion should be only lowercase574 True if the comparsion should be only lowercase
588 """575 """
@@ -592,7 +579,7 @@
592 if lower:579 if lower:
593 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '580 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '
594 u'abbreviation, chapters FROM book_reference WHERE '581 u'abbreviation, chapters FROM book_reference WHERE '
595 u'LOWER(name) = ? OR LOWER(abbreviation) = ?', 582 u'LOWER(name) = ? OR LOWER(abbreviation) = ?',
596 (name.lower(), name.lower()))583 (name.lower(), name.lower()))
597 else:584 else:
598 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '585 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '
@@ -621,7 +608,7 @@
621 if not isinstance(id, int):608 if not isinstance(id, int):
622 id = int(id)609 id = int(id)
623 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '610 books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '
624 u'abbreviation, chapters FROM book_reference WHERE id = ?', 611 u'abbreviation, chapters FROM book_reference WHERE id = ?',
625 (id, ))612 (id, ))
626 if books:613 if books:
627 return {614 return {
@@ -645,12 +632,12 @@
645 ``chapter``632 ``chapter``
646 The chapter number.633 The chapter number.
647 """634 """
648 log.debug(u'BiblesResourcesDB.get_chapter("%s", "%s")', book_id, 635 log.debug(u'BiblesResourcesDB.get_chapter("%s", "%s")', book_id,
649 chapter)636 chapter)
650 if not isinstance(chapter, int):637 if not isinstance(chapter, int):
651 chapter = int(chapter)638 chapter = int(chapter)
652 chapters = BiblesResourcesDB.run_sql(u'SELECT id, book_reference_id, '639 chapters = BiblesResourcesDB.run_sql(u'SELECT id, book_reference_id, '
653 u'chapter, verse_count FROM chapters WHERE book_reference_id = ?', 640 u'chapter, verse_count FROM chapters WHERE book_reference_id = ?',
654 (book_id,))641 (book_id,))
655 if chapters:642 if chapters:
656 return {643 return {
@@ -687,7 +674,7 @@
687 ``chapter``674 ``chapter``
688 The number of the chapter.675 The number of the chapter.
689 """676 """
690 log.debug(u'BiblesResourcesDB.get_verse_count("%s", "%s")', book_id, 677 log.debug(u'BiblesResourcesDB.get_verse_count("%s", "%s")', book_id,
691 chapter)678 chapter)
692 details = BiblesResourcesDB.get_chapter(book_id, chapter)679 details = BiblesResourcesDB.get_chapter(book_id, chapter)
693 if details:680 if details:
@@ -715,7 +702,7 @@
715 }702 }
716 else:703 else:
717 return None704 return None
718 705
719 @staticmethod706 @staticmethod
720 def get_webbibles(source):707 def get_webbibles(source):
721 """708 """
@@ -737,7 +724,7 @@
737 u'id': bible[0],724 u'id': bible[0],
738 u'name': bible[1],725 u'name': bible[1],
739 u'abbreviation': bible[2],726 u'abbreviation': bible[2],
740 u'language_id': bible[3], 727 u'language_id': bible[3],
741 u'download_source_id': bible[4]728 u'download_source_id': bible[4]
742 }729 }
743 for bible in bibles730 for bible in bibles
@@ -752,11 +739,11 @@
752739
753 ``abbreviation``740 ``abbreviation``
754 The abbreviation of the webbible.741 The abbreviation of the webbible.
755 742
756 ``source``743 ``source``
757 The source of the webbible.744 The source of the webbible.
758 """745 """
759 log.debug(u'BiblesResourcesDB.get_webbibles("%s", "%s")', abbreviation, 746 log.debug(u'BiblesResourcesDB.get_webbibles("%s", "%s")', abbreviation,
760 source)747 source)
761 if not isinstance(abbreviation, unicode):748 if not isinstance(abbreviation, unicode):
762 abbreviation = unicode(abbreviation)749 abbreviation = unicode(abbreviation)
@@ -765,14 +752,14 @@
765 source = BiblesResourcesDB.get_download_source(source)752 source = BiblesResourcesDB.get_download_source(source)
766 bible = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, '753 bible = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, '
767 u'language_id, download_source_id FROM webbibles WHERE '754 u'language_id, download_source_id FROM webbibles WHERE '
768 u'download_source_id = ? AND abbreviation = ?', (source[u'id'], 755 u'download_source_id = ? AND abbreviation = ?', (source[u'id'],
769 abbreviation))756 abbreviation))
770 if bible:757 if bible:
771 return {758 return {
772 u'id': bible[0][0],759 u'id': bible[0][0],
773 u'name': bible[0][1],760 u'name': bible[0][1],
774 u'abbreviation': bible[0][2],761 u'abbreviation': bible[0][2],
775 u'language_id': bible[0][3], 762 u'language_id': bible[0][3],
776 u'download_source_id': bible[0][4]763 u'download_source_id': bible[0][4]
777 }764 }
778 else:765 else:
@@ -785,11 +772,11 @@
785772
786 ``name``773 ``name``
787 The name to search the id.774 The name to search the id.
788 775
789 ``language_id``776 ``language_id``
790 The language_id for which language should be searched777 The language_id for which language should be searched
791 """778 """
792 log.debug(u'BiblesResourcesDB.get_alternative_book_name("%s", "%s")', 779 log.debug(u'BiblesResourcesDB.get_alternative_book_name("%s", "%s")',
793 name, language_id)780 name, language_id)
794 if language_id:781 if language_id:
795 books = BiblesResourcesDB.run_sql(u'SELECT book_reference_id, name '782 books = BiblesResourcesDB.run_sql(u'SELECT book_reference_id, name '
@@ -806,7 +793,7 @@
806 @staticmethod793 @staticmethod
807 def get_language(name):794 def get_language(name):
808 """795 """
809 Return a dict containing the language id, name and code by name or 796 Return a dict containing the language id, name and code by name or
810 abbreviation.797 abbreviation.
811798
812 ``name``799 ``name``
@@ -865,7 +852,7 @@
865852
866class AlternativeBookNamesDB(QtCore.QObject, Manager):853class AlternativeBookNamesDB(QtCore.QObject, Manager):
867 """854 """
868 This class represents a database-bound alternative book names system. 855 This class represents a database-bound alternative book names system.
869 """856 """
870 cursor = None857 cursor = None
871 conn = None858 conn = None
@@ -874,7 +861,7 @@
874 def get_cursor():861 def get_cursor():
875 """862 """
876 Return the cursor object. Instantiate one if it doesn't exist yet.863 Return the cursor object. Instantiate one if it doesn't exist yet.
877 If necessary loads up the database and creates the tables if the 864 If necessary loads up the database and creates the tables if the
878 database doesn't exist.865 database doesn't exist.
879 """866 """
880 if AlternativeBookNamesDB.cursor is None:867 if AlternativeBookNamesDB.cursor is None:
@@ -904,7 +891,7 @@
904891
905 ``parameters``892 ``parameters``
906 Any variable parameters to add to the query893 Any variable parameters to add to the query
907 894
908 ``commit``895 ``commit``
909 If a commit statement is necessary this should be True.896 If a commit statement is necessary this should be True.
910 """897 """
@@ -921,11 +908,11 @@
921908
922 ``name``909 ``name``
923 The name to search the id.910 The name to search the id.
924 911
925 ``language_id``912 ``language_id``
926 The language_id for which language should be searched913 The language_id for which language should be searched
927 """914 """
928 log.debug(u'AlternativeBookNamesDB.get_book_reference_id("%s", "%s")', 915 log.debug(u'AlternativeBookNamesDB.get_book_reference_id("%s", "%s")',
929 name, language_id)916 name, language_id)
930 if language_id:917 if language_id:
931 books = AlternativeBookNamesDB.run_sql(u'SELECT book_reference_id, '918 books = AlternativeBookNamesDB.run_sql(u'SELECT book_reference_id, '
@@ -962,11 +949,11 @@
962949
963class OldBibleDB(QtCore.QObject, Manager):950class OldBibleDB(QtCore.QObject, Manager):
964 """951 """
965 This class conects to the old bible databases to reimport them to the new 952 This class conects to the old bible databases to reimport them to the new
966 database scheme.953 database scheme.
967 """954 """
968 cursor = None955 cursor = None
969 956
970 def __init__(self, parent, **kwargs):957 def __init__(self, parent, **kwargs):
971 """958 """
972 The constructor loads up the database and creates and initialises the959 The constructor loads up the database and creates and initialises the
973960
=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py 2011-07-07 18:03:12 +0000
+++ openlp/plugins/bibles/lib/manager.py 2011-08-17 10:17:27 +0000
@@ -151,9 +151,10 @@
151 name = bible.get_name()151 name = bible.get_name()
152 # Remove corrupted files.152 # Remove corrupted files.
153 if name is None:153 if name is None:
154 bible.session.close()
154 delete_file(os.path.join(self.path, filename))155 delete_file(os.path.join(self.path, filename))
155 continue156 continue
156 # Find old database versions157 # Find old database versions.
157 if bible.is_old_database():158 if bible.is_old_database():
158 self.old_bible_databases.append([filename, name])159 self.old_bible_databases.append([filename, name])
159 bible.session.close()160 bible.session.close()
@@ -220,7 +221,7 @@
220 return [221 return [
221 {222 {
222 u'name': book.name,223 u'name': book.name,
223 u'book_reference_id': book.book_reference_id, 224 u'book_reference_id': book.book_reference_id,
224 u'chapters': self.db_cache[bible].get_chapter_count(book)225 u'chapters': self.db_cache[bible].get_chapter_count(book)
225 }226 }
226 for book in self.db_cache[bible].get_books()227 for book in self.db_cache[bible].get_books()
@@ -229,10 +230,10 @@
229 def get_chapter_count(self, bible, book):230 def get_chapter_count(self, bible, book):
230 """231 """
231 Returns the number of Chapters for a given book.232 Returns the number of Chapters for a given book.
232 233
233 ``bible``234 ``bible``
234 Unicode. The Bible to get the list of books from.235 Unicode. The Bible to get the list of books from.
235 236
236 ``book``237 ``book``
237 The book object to get the chapter count for.238 The book object to get the chapter count for.
238 """239 """
@@ -295,7 +296,7 @@
295 if db_book:296 if db_book:
296 book_id = db_book.book_reference_id297 book_id = db_book.book_reference_id
297 log.debug(u'Book name corrected to "%s"', db_book.name)298 log.debug(u'Book name corrected to "%s"', db_book.name)
298 new_reflist.append((book_id, item[1], item[2], 299 new_reflist.append((book_id, item[1], item[2],
299 item[3]))300 item[3]))
300 else:301 else:
301 log.debug(u'OpenLP failed to find book %s', item[0])302 log.debug(u'OpenLP failed to find book %s', item[0])
302303
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2011-08-13 10:49:53 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2011-08-17 10:17:27 +0000
@@ -613,7 +613,7 @@
613 if restore:613 if restore:
614 old_text = unicode(combo.currentText())614 old_text = unicode(combo.currentText())
615 combo.clear()615 combo.clear()
616 combo.addItems([unicode(i) for i in range(range_from, range_to + 1)])616 combo.addItems(map(unicode, range(range_from, range_to + 1)))
617 if restore and combo.findText(old_text) != -1:617 if restore and combo.findText(old_text) != -1:
618 combo.setCurrentIndex(combo.findText(old_text))618 combo.setCurrentIndex(combo.findText(old_text))
619619
620620
=== modified file 'openlp/plugins/songs/lib/openlyricsexport.py'
--- openlp/plugins/songs/lib/openlyricsexport.py 2011-06-19 21:11:29 +0000
+++ openlp/plugins/songs/lib/openlyricsexport.py 2011-08-17 10:17:27 +0000
@@ -35,6 +35,7 @@
35from lxml import etree35from lxml import etree
3636
37from openlp.core.lib import check_directory_exists, Receiver, translate37from openlp.core.lib import check_directory_exists, Receiver, translate
38from openlp.core.utils import clean_filename
38from openlp.plugins.songs.lib import OpenLyrics39from openlp.plugins.songs.lib import OpenLyrics
3940
40log = logging.getLogger(__name__)41log = logging.getLogger(__name__)
@@ -72,8 +73,7 @@
72 tree = etree.ElementTree(etree.fromstring(xml))73 tree = etree.ElementTree(etree.fromstring(xml))
73 filename = u'%s (%s)' % (song.title,74 filename = u'%s (%s)' % (song.title,
74 u', '.join([author.display_name for author in song.authors]))75 u', '.join([author.display_name for author in song.authors]))
75 filename = re.sub(76 filename = clean_filename(filename)
76 r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_')
77 # Ensure the filename isn't too long for some filesystems77 # Ensure the filename isn't too long for some filesystems
78 filename = u'%s.xml' % filename[0:250 - len(self.save_path)]78 filename = u'%s.xml' % filename[0:250 - len(self.save_path)]
79 # Pass a file object, because lxml does not cope with some special79 # Pass a file object, because lxml does not cope with some special