openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #21427
[Merge] lp:~phill-ridout/openlp/1194610_2.0 into lp:openlp/2.0
Phill has proposed merging lp:~phill-ridout/openlp/1194610_2.0 into lp:openlp/2.0.
Requested reviews:
Raoul Snyman (raoul-snyman)
Tim Bentley (trb143)
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_2.0/+merge/181159
Fixes bug 1194610 by detecting the encoding rather than assuming that it set (because its not) add fall back to the windows encoding dialog
--
https://code.launchpad.net/~phill-ridout/openlp/1194610_2.0/+merge/181159
Your team OpenLP Core is subscribed to branch lp:openlp/2.0.
=== modified file 'openlp/plugins/songs/lib/songshowplusimport.py'
--- openlp/plugins/songs/lib/songshowplusimport.py 2013-02-18 17:15:44 +0000
+++ openlp/plugins/songs/lib/songshowplusimport.py 2013-08-20 21:26:24 +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
@@ -142,44 +143,44 @@
log.debug(length_descriptor_size)
data = song_data.read(length_descriptor)
if block_key == TITLE:
- self.title = unicode(data, u'cp1252')
+ self.title = self.decode(data)
elif block_key == AUTHOR:
authors = data.split(" / ")
for author in authors:
if author.find(",") !=-1:
authorParts = author.split(", ")
author = authorParts[1] + " " + authorParts[0]
- self.parseAuthor(unicode(author, u'cp1252'))
+ self.parseAuthor(self.decode(author))
elif block_key == COPYRIGHT:
- self.addCopyright(unicode(data, u'cp1252'))
+ self.addCopyright(self.decode(data))
elif block_key == CCLI_NO:
self.ccliNumber = int(data)
elif block_key == VERSE:
- self.addVerse(unicode(data, u'cp1252'),
+ self.addVerse(self.decode(data),
"%s%s" % (VerseType.Tags[VerseType.Verse], verse_no))
elif block_key == CHORUS:
- self.addVerse(unicode(data, u'cp1252'),
+ self.addVerse(self.decode(data),
"%s%s" % (VerseType.Tags[VerseType.Chorus], verse_no))
elif block_key == BRIDGE:
- self.addVerse(unicode(data, u'cp1252'),
+ self.addVerse(self.decode(data),
"%s%s" % (VerseType.Tags[VerseType.Bridge], verse_no))
elif block_key == TOPIC:
- self.topics.append(unicode(data, u'cp1252'))
+ self.topics.append(self.decode(data))
elif block_key == COMMENTS:
- self.comments = unicode(data, u'cp1252')
+ self.comments = self.decode(data)
elif block_key == VERSE_ORDER:
verse_tag = self.toOpenLPVerseTag(data, True)
if verse_tag:
if not isinstance(verse_tag, unicode):
- verse_tag = unicode(verse_tag, u'cp1252')
+ verse_tag = self.decode(verse_tag)
self.sspVerseOrderList.append(verse_tag)
elif block_key == SONG_BOOK:
- self.songBookName = unicode(data, u'cp1252')
+ self.songBookName = self.decode(data)
elif block_key == SONG_NUMBER:
self.songNumber = ord(data)
elif block_key == CUSTOM_VERSE:
verse_tag = self.toOpenLPVerseTag(verse_name)
- self.addVerse(unicode(data, u'cp1252'), verse_tag)
+ self.addVerse(self.decode(data), verse_tag)
else:
log.debug("Unrecognised blockKey: %s, data: %s"
% (block_key, data))
@@ -221,3 +222,14 @@
verse_tag = VerseType.Tags[VerseType.Other]
verse_number = self.otherList[verse_name]
return verse_tag + verse_number
+
+ def decode(self, data):
+ try:
+ return unicode(data, chardet.detect(data)['encoding'])
+ except:
+ self.encoding = u'cp1252'
+ while self.encoding:
+ try:
+ return unicode(data, self.encoding)
+ except:
+ self.encoding = retrieve_windows_encoding()
Follow ups