From b371e73acc2a0f7e3d607a512be572edf78a02cb Mon Sep 17 00:00:00 2001 From: Simon Hanna Date: Wed, 29 Mar 2017 14:05:08 +0200 Subject: [PATCH 1/2] Fix songbeamer import bug --- openlp/plugins/songs/lib/importers/songbeamer.py | 4 +--- .../openlp_plugins/songs/test_songbeamerimport.py | 7 +++++++ tests/resources/songbeamersongs/cp1252song.json | 8 ++++++++ tests/resources/songbeamersongs/cp1252song.sng | 15 +++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 tests/resources/songbeamersongs/cp1252song.json create mode 100644 tests/resources/songbeamersongs/cp1252song.sng diff --git a/openlp/plugins/songs/lib/importers/songbeamer.py b/openlp/plugins/songs/lib/importers/songbeamer.py index 8dc7deb5e..4771ce7ce 100644 --- a/openlp/plugins/songs/lib/importers/songbeamer.py +++ b/openlp/plugins/songs/lib/importers/songbeamer.py @@ -22,8 +22,6 @@ """ The :mod:`songbeamer` module provides the functionality for importing SongBeamer songs into the OpenLP database. """ -import chardet -import codecs import logging import os import re @@ -120,7 +118,7 @@ class SongBeamerImport(SongImport): # The encoding should only be ANSI (cp1252), UTF-8, Unicode, Big-Endian-Unicode. # So if it doesn't start with 'u' we default to cp1252. See: # https://forum.songbeamer.com/viewtopic.php?p=419&sid=ca4814924e37c11e4438b7272a98b6f2 - if self.input_file_encoding.lower().startswith('u'): + if not self.input_file_encoding.lower().startswith('u'): self.input_file_encoding = 'cp1252' infile = open(import_file, 'rt', encoding=self.input_file_encoding) song_data = infile.readlines() diff --git a/tests/functional/openlp_plugins/songs/test_songbeamerimport.py b/tests/functional/openlp_plugins/songs/test_songbeamerimport.py index 0e3ff059d..7a9266b44 100644 --- a/tests/functional/openlp_plugins/songs/test_songbeamerimport.py +++ b/tests/functional/openlp_plugins/songs/test_songbeamerimport.py @@ -49,6 +49,13 @@ class TestSongBeamerFileImport(SongImportTestHelper): self.file_import([os.path.join(TEST_PATH, 'Lobsinget dem Herrn.sng')], self.load_external_result_data(os.path.join(TEST_PATH, 'Lobsinget dem Herrn.json'))) + def test_cp1252_encoded_file(self): + """ + Test that a CP1252 encoded file get's decoded properly. + """ + self.file_import([os.path.join(TEST_PATH, 'cp1252song.sng')], + self.load_external_result_data(os.path.join(TEST_PATH, 'cp1252song.json'))) + class TestSongBeamerImport(TestCase): """ diff --git a/tests/resources/songbeamersongs/cp1252song.json b/tests/resources/songbeamersongs/cp1252song.json new file mode 100644 index 000000000..5e92d7038 --- /dev/null +++ b/tests/resources/songbeamersongs/cp1252song.json @@ -0,0 +1,8 @@ +{ +"title": "Some Song", + "authors": ["Author"], + "verses" : [ + ["Here are a couple of \"weird\" chars’’’.\n", "v"], + ["Here is another one….\n\n", "v"] + ] +} diff --git a/tests/resources/songbeamersongs/cp1252song.sng b/tests/resources/songbeamersongs/cp1252song.sng new file mode 100644 index 000000000..f1288e731 --- /dev/null +++ b/tests/resources/songbeamersongs/cp1252song.sng @@ -0,0 +1,15 @@ +#LangCount=1 +#Editor=SongBeamer 4.28a +#Version=3 +#Format=F/K// +#TitleFormat=U +#Title=Some Song +#Author=Author +#Melody=Author +#(c)=No copyright +#CCLI=0000000000 +--- +Here are a couple of "weird" chars’’’. +--- +Here is another one…. + From 80bb6f713e16a9222e0e3e8ffd48eff89723b974 Mon Sep 17 00:00:00 2001 From: Simon Hanna Date: Thu, 30 Mar 2017 00:04:59 +0200 Subject: [PATCH 2/2] Restore previously deleted import --- openlp/plugins/songs/lib/importers/songbeamer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/lib/importers/songbeamer.py b/openlp/plugins/songs/lib/importers/songbeamer.py index 4771ce7ce..1b1ccac1b 100644 --- a/openlp/plugins/songs/lib/importers/songbeamer.py +++ b/openlp/plugins/songs/lib/importers/songbeamer.py @@ -25,6 +25,7 @@ The :mod:`songbeamer` module provides the functionality for importing SongBeamer import logging import os import re +import chardet from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.importers.songimport import SongImport