Merge lp:~j-corwin/openlp/bug-1085921 into lp:openlp/2.0

Proposed by Jonathan Corwin
Status: Merged
Merged at revision: 2120
Proposed branch: lp:~j-corwin/openlp/bug-1085921
Merge into: lp:openlp/2.0
Diff against target: 146 lines (+41/-45)
3 files modified
openlp/plugins/songs/forms/songexportform.py (+3/-4)
openlp/plugins/songs/lib/__init__.py (+36/-2)
openlp/plugins/songs/lib/mediaitem.py (+2/-39)
To merge this branch: bzr merge lp:~j-corwin/openlp/bug-1085921
Reviewer Review Type Date Requested Status
Tim Bentley Approve
Review via email: mp+139549@code.launchpad.net

Description of the change

Fix song export (In 2.0)

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openlp/plugins/songs/forms/songexportform.py'
--- openlp/plugins/songs/forms/songexportform.py 2012-11-11 21:16:14 +0000
+++ openlp/plugins/songs/forms/songexportform.py 2012-12-12 19:23:23 +0000
@@ -34,11 +34,11 @@
3434
35from PyQt4 import QtCore, QtGui35from PyQt4 import QtCore, QtGui
3636
37from openlp.core.lib import build_icon, Receiver, SettingsManager, translate, \37from openlp.core.lib import build_icon, Receiver, translate, \
38 create_separated_list38 create_separated_list
39from openlp.core.lib.ui import UiStrings, critical_error_message_box39from openlp.core.lib.ui import UiStrings, critical_error_message_box
40from openlp.core.ui.wizard import OpenLPWizard, WizardStrings40from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
41from openlp.core.utils import locale_direct_compare41from openlp.plugins.songs.lib import natcmp
42from openlp.plugins.songs.lib.db import Song42from openlp.plugins.songs.lib.db import Song
43from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport43from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport
4444
@@ -253,8 +253,7 @@
253 # Load the list of songs.253 # Load the list of songs.
254 Receiver.send_message(u'cursor_busy')254 Receiver.send_message(u'cursor_busy')
255 songs = self.plugin.manager.get_all_objects(Song)255 songs = self.plugin.manager.get_all_objects(Song)
256 songs.sort(256 songs.sort(cmp=natcmp, key=lambda song: song.sort_key)
257 cmp=locale_direct_compare, key=lambda song: song.sort_string)
258 for song in songs:257 for song in songs:
259 # No need to export temporary songs.258 # No need to export temporary songs.
260 if song.temporary:259 if song.temporary:
261260
=== modified file 'openlp/plugins/songs/lib/__init__.py'
--- openlp/plugins/songs/lib/__init__.py 2012-11-11 21:16:14 +0000
+++ openlp/plugins/songs/lib/__init__.py 2012-12-12 19:23:23 +0000
@@ -28,10 +28,10 @@
28###############################################################################28###############################################################################
29import re29import re
3030
31from PyQt4 import QtGui31from PyQt4 import QtGui, QtCore
3232
33from openlp.core.lib import translate33from openlp.core.lib import translate
34from openlp.core.utils import CONTROL_CHARS34from openlp.core.utils import CONTROL_CHARS, locale_direct_compare
35from db import Author35from db import Author
36from ui import SongStrings36from ui import SongStrings
3737
@@ -594,6 +594,40 @@
594 text = u''.join(out)594 text = u''.join(out)
595 return text, default_encoding595 return text, default_encoding
596596
597def natcmp(a, b):
598 """
599 Natural string comparison which mimics the behaviour of Python's internal
600 cmp function.
601 """
602 if len(a) <= len(b):
603 for i, key in enumerate(a):
604 if isinstance(key, int) and isinstance(b[i], int):
605 result = cmp(key, b[i])
606 elif isinstance(key, int) and not isinstance(b[i], int):
607 result = locale_direct_compare(QtCore.QString(str(key)), b[i])
608 elif not isinstance(key, int) and isinstance(b[i], int):
609 result = locale_direct_compare(key, QtCore.QString(str(b[i])))
610 else:
611 result = locale_direct_compare(key, b[i])
612 if result != 0:
613 return result
614 if len(a) == len(b):
615 return 0
616 else:
617 return -1
618 else:
619 for i, key in enumerate(b):
620 if isinstance(a[i], int) and isinstance(key, int):
621 result = cmp(a[i], key)
622 elif isinstance(a[i], int) and not isinstance(key, int):
623 result = locale_direct_compare(QtCore.QString(str(a[i])), key)
624 elif not isinstance(a[i], int) and isinstance(key, int):
625 result = locale_direct_compare(a[i], QtCore.QString(str(key)))
626 else:
627 result = locale_direct_compare(a[i], key)
628 if result != 0:
629 return result
630 return 1
597631
598from xml import OpenLyrics, SongXML632from xml import OpenLyrics, SongXML
599from songstab import SongsTab633from songstab import SongsTab
600634
=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py 2012-11-21 18:45:37 +0000
+++ openlp/plugins/songs/lib/mediaitem.py 2012-12-12 19:23:23 +0000
@@ -40,54 +40,17 @@
40 check_directory_exists40 check_directory_exists
41from openlp.core.lib.ui import UiStrings, create_widget_action41from openlp.core.lib.ui import UiStrings, create_widget_action
42from openlp.core.lib.settings import Settings42from openlp.core.lib.settings import Settings
43from openlp.core.utils import AppLocation, locale_direct_compare43from openlp.core.utils import AppLocation
44from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \44from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \
45 SongImportForm, SongExportForm45 SongImportForm, SongExportForm
46from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \46from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \
47 clean_string47 clean_string, natcmp
48from openlp.plugins.songs.lib.db import Author, Song, Book, MediaFile48from openlp.plugins.songs.lib.db import Author, Song, Book, MediaFile
49from openlp.plugins.songs.lib.ui import SongStrings49from openlp.plugins.songs.lib.ui import SongStrings
5050
51log = logging.getLogger(__name__)51log = logging.getLogger(__name__)
5252
5353
54def natcmp(a, b):
55 """
56 Natural string comparison which mimics the behaviour of Python's internal
57 cmp function.
58 """
59 log.debug('a: %s; b: %s', a, b)
60 if len(a) <= len(b):
61 for i, key in enumerate(a):
62 if isinstance(key, int) and isinstance(b[i], int):
63 result = cmp(key, b[i])
64 elif isinstance(key, int) and not isinstance(b[i], int):
65 result = locale_direct_compare(QtCore.QString(str(key)), b[i])
66 elif not isinstance(key, int) and isinstance(b[i], int):
67 result = locale_direct_compare(key, QtCore.QString(str(b[i])))
68 else:
69 result = locale_direct_compare(key, b[i])
70 if result != 0:
71 return result
72 if len(a) == len(b):
73 return 0
74 else:
75 return -1
76 else:
77 for i, key in enumerate(b):
78 if isinstance(a[i], int) and isinstance(key, int):
79 result = cmp(a[i], key)
80 elif isinstance(a[i], int) and not isinstance(key, int):
81 result = locale_direct_compare(QtCore.QString(str(a[i])), key)
82 elif not isinstance(a[i], int) and isinstance(key, int):
83 result = locale_direct_compare(a[i], QtCore.QString(str(key)))
84 else:
85 result = locale_direct_compare(a[i], key)
86 if result != 0:
87 return result
88 return 1
89
90
91class SongSearch(object):54class SongSearch(object):
92 """55 """
93 An enumeration for song search methods.56 An enumeration for song search methods.

Subscribers

People subscribed via source and target branches