← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~phill-ridout/openlp/1194610-trunk into lp:openlp

 

Phill has proposed merging lp:~phill-ridout/openlp/1194610-trunk into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #1194610 in OpenLP: "[support-system] SongShowPlus traceback"
  https://bugs.launchpad.net/openlp/+bug/1194610

For more details, see:
https://code.launchpad.net/~phill-ridout/openlp/1194610-trunk/+merge/185654

Fixes bug 1194610 by detecting the encoding rather than assuming that it set (because its not) add fall back to the windows encoding dialog
Fixed a Py3 bug in the windows encoding dialogue

Tests in separate merge request https://code.launchpad.net/~phill-ridout/openlp/song_helper
-- 
https://code.launchpad.net/~phill-ridout/openlp/1194610-trunk/+merge/185654
Your team OpenLP Core is requested to review the proposed merge of lp:~phill-ridout/openlp/1194610-trunk into lp:openlp.
=== modified file 'openlp/plugins/songs/lib/__init__.py'
=== modified file 'openlp/plugins/songs/lib/songshowplusimport.py'
--- openlp/plugins/songs/lib/songshowplusimport.py	2013-08-31 18:17:38 +0000
+++ openlp/plugins/songs/lib/songshowplusimport.py	2013-09-14 22:25:48 +0000
@@ -30,13 +30,14 @@
 The :mod:`songshowplusimport` module provides the functionality for importing
 SongShow Plus songs into the OpenLP database.
 """
+import chardet
 import os
 import logging
 import re
 import struct
 
 from openlp.core.ui.wizard import WizardStrings
-from openlp.plugins.songs.lib import VerseType
+from openlp.plugins.songs.lib import VerseType, retrieve_windows_encoding
 from openlp.plugins.songs.lib.songimport import SongImport
 
 TITLE = 1
@@ -132,41 +133,43 @@
                 else:
                     length_descriptor, = struct.unpack("B", song_data.read(1))
                 log.debug(length_descriptor_size)
-                data = song_data.read(length_descriptor).decode()
+                data = song_data.read(length_descriptor)
                 if block_key == TITLE:
-                    self.title = data
+                    self.title = self.decode(data)
                 elif block_key == AUTHOR:
-                    authors = data.split(" / ")
+                    authors = self.decode(data).split(" / ")
                     for author in authors:
                         if author.find(",") !=-1:
                             authorParts = author.split(", ")
                             author = authorParts[1] + " " + authorParts[0]
                         self.parse_author(author)
                 elif block_key == COPYRIGHT:
-                    self.addCopyright(data)
+                    self.addCopyright(self.decode(data))
                 elif block_key == CCLI_NO:
                     self.ccliNumber = int(data)
                 elif block_key == VERSE:
-                    self.addVerse(data, "%s%s" % (VerseType.tags[VerseType.Verse], verse_no))
+                    self.addVerse(self.decode(data), "%s%s" % (VerseType.tags[VerseType.Verse], verse_no))
                 elif block_key == CHORUS:
-                    self.addVerse(data, "%s%s" % (VerseType.tags[VerseType.Chorus], verse_no))
+                    self.addVerse(self.decode(data), "%s%s" % (VerseType.tags[VerseType.Chorus], verse_no))
                 elif block_key == BRIDGE:
-                    self.addVerse(data, "%s%s" % (VerseType.tags[VerseType.Bridge], verse_no))
+                    self.addVerse(self.decode(data), "%s%s" % (VerseType.tags[VerseType.Bridge], verse_no))
                 elif block_key == TOPIC:
-                    self.topics.append(data)
+                    self.topics.append(self.decode(data))
                 elif block_key == COMMENTS:
-                    self.comments = data
+                    self.comments = self.decode(data)
                 elif block_key == VERSE_ORDER:
-                    verse_tag = self.to_openlp_verse_tag(data, True)
+                    verse_tag = self.to_openlp_verse_tag(self.decode(data), True)
                     if verse_tag:
+                        if not isinstance(verse_tag, str):
+                            verse_tag = self.decode(verse_tag)
                         self.ssp_verse_order_list.append(verse_tag)
                 elif block_key == SONG_BOOK:
-                    self.songBookName = data
+                    self.songBookName = self.decode(data)
                 elif block_key == SONG_NUMBER:
                     self.songNumber = ord(data)
                 elif block_key == CUSTOM_VERSE:
                     verse_tag = self.to_openlp_verse_tag(verse_name)
-                    self.addVerse(data, verse_tag)
+                    self.addVerse(self.decode(data), verse_tag)
                 else:
                     log.debug("Unrecognised blockKey: %s, data: %s" % (block_key, data))
                     song_data.seek(next_block_starts)
@@ -204,3 +207,9 @@
             verse_tag = VerseType.tags[VerseType.Other]
             verse_number = self.other_list[verse_name]
         return verse_tag + verse_number
+
+    def decode(self, data):
+        try:
+            return str(data, chardet.detect(data)['encoding'])
+        except:
+            return str(data, retrieve_windows_encoding())
\ No newline at end of file


Follow ups