← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~googol-hush/openlp/mediaitem-sorting into lp:openlp

 

Andreas Preikschat has proposed merging lp:~googol-hush/openlp/mediaitem-sorting into lp:openlp.

Requested reviews:
  Tim Bentley (trb143)
  Jonathan Corwin (j-corwin)

For more details, see:
https://code.launchpad.net/~googol-hush/openlp/mediaitem-sorting/+merge/61957

Hello,

- Fixed custom slide sorting
- Improved songs sorting speed

[1] http://wiki.python.org/moin/PythonSpeed#Use_the_best_algorithms_and_fastest_tools (Last point)
[2] http://www.velocityreviews.com/forums/t562832-sorting-objects-by-property-using-locale.html

I noticed, that the sorting in trunk ignores special characters like Ä on windows (this merge also does).
-- 
https://code.launchpad.net/~googol-hush/openlp/mediaitem-sorting/+merge/61957
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py	2011-05-22 01:29:09 +0000
+++ openlp/plugins/custom/lib/mediaitem.py	2011-05-23 11:29:50 +0000
@@ -25,6 +25,7 @@
 ###############################################################################
 
 import logging
+import locale
 
 from PyQt4 import QtCore, QtGui
 from sqlalchemy.sql import or_, func
@@ -133,12 +134,16 @@
             self.onPreviewClick()
         self.onRemoteEditClear()
 
-    def loadList(self, list):
+    def loadList(self, custom_slides):
         self.listView.clear()
-        for customSlide in list:
-            custom_name = QtGui.QListWidgetItem(customSlide.title)
+        # Sort the customs by its title considering language specific
+        # characters.
+        custom_slides.sort(
+            cmp=locale.strcoll, key=lambda custom: custom.title.lower())
+        for custom_slide in custom_slides:
+            custom_name = QtGui.QListWidgetItem(custom_slide.title)
             custom_name.setData(
-                QtCore.Qt.UserRole, QtCore.QVariant(customSlide.id))
+                QtCore.Qt.UserRole, QtCore.QVariant(custom_slide.id))
             self.listView.addItem(custom_name)
             # Auto-select the item if name has been set
             if customSlide.title == self.autoSelectItem :

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2011-05-15 20:03:45 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2011-05-23 11:29:50 +0000
@@ -149,20 +149,18 @@
         else:
             self.presentationWidget.hide()
 
-    def loadList(self, list, initialLoad=False):
+    def loadList(self, files, initialLoad=False):
         """
         Add presentations into the media manager
         This is called both on initial load of the plugin to populate with
         existing files, and when the user adds new files via the media manager
         """
         currlist = self.getFileList()
-        titles = []
-        for file in currlist:
-            titles.append(os.path.split(file)[1])
+        titles = [os.path.split(file)[1] for file in currlist]
         Receiver.send_message(u'cursor_busy')
         if not initialLoad:
-            self.parent.formparent.displayProgressBar(len(list))
-        for file in list:
+            self.parent.formparent.displayProgressBar(len(files))
+        for file in files:
             if not initialLoad:
                 self.parent.formparent.incrementProgressBar()
             if currlist.count(file) > 0:

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2011-05-22 01:29:09 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2011-05-23 11:29:50 +0000
@@ -229,7 +229,9 @@
     def displayResultsSong(self, searchresults):
         log.debug(u'display results Song')
         self.listView.clear()
-        searchresults.sort(cmp=self.collateSongTitles)
+        # Sort the songs by its title considering language specific characters.
+        searchresults.sort(
+            cmp=locale.strcoll, key=lambda song: song.title.lower())
         for song in searchresults:
             author_list = [author.display_name for author in song.authors]
             song_title = unicode(song.title)
@@ -475,13 +477,6 @@
             Receiver.send_message(u'service_item_update',
                 u'%s:%s' % (editId, item._uuid))
 
-    def collateSongTitles(self, song_1, song_2):
-        """
-        Locale aware collation of song titles
-        """
-        return locale.strcoll(unicode(song_1.title.lower()),
-             unicode(song_2.title.lower()))
-
     def search(self, string):
         """
         Search for some songs


Follow ups