diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 3441aed86..0d5572d1e 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -53,6 +53,7 @@ class SongMediaItem(MediaManagerItem): self.ListViewWithDnD_class = SongListView MediaManagerItem.__init__(self, parent, self, icon) self.edit_song_form = EditSongForm(self, self.parent.manager) + self.openLyrics = OpenLyricsParser(self.parent.manager) self.singleServiceItem = False self.song_maintenance_form = SongMaintenanceForm( self.parent.manager, self) @@ -396,7 +397,7 @@ class SongMediaItem(MediaManagerItem): ] service_item.data_string = {u'title':song.search_title, u'authors':author_list} - service_item.xml_version = OpenLyricsParser().song_to_xml(song) + service_item.xml_version = self.openLyrics.song_to_xml(song) return True def serviceLoad(self, item): @@ -424,12 +425,12 @@ class SongMediaItem(MediaManagerItem): else: # Authors different if self.addSongFromService: - editId = OpenLyricsParser(). \ + editId = self.openLyrics. \ xmlToSong(item.xml_version) else: # Title does not match if self.addSongFromService: - editId = OpenLyricsParser().xmlToSong(item.xml_version) + editId = self.openLyrics.xmlToSong(item.xml_version) # Update service with correct song id if editId != 0: Receiver.send_message(u'service_item_update', diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index bdd8478d4..03b672928 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -39,6 +39,7 @@ The basic XML is of the format:: """ import logging +import re from lxml import etree, objectify from openlp.plugins.songs.lib.db import Author, Song @@ -246,6 +247,9 @@ class OpenLyricsParser(object): """ This class represents the converter for Song to/from OpenLyrics XML. """ + def __init__(self, manager): + self.manager = manager + def song_to_xml(self, song): """ Convert the song to OpenLyrics Format @@ -256,31 +260,87 @@ class OpenLyricsParser(object): u'') properties = etree.SubElement(song_xml, u'properties') titles = etree.SubElement(properties, u'titles') - self.add_text_to_element(u'title', titles, song.title) + self._add_text_to_element(u'title', titles, song.title) if song.alternate_title: - self.add_text_to_element(u'title', titles, song.alternate_title) + self._add_text_to_element(u'title', titles, song.alternate_title) if song.theme_name: themes = etree.SubElement(properties, u'themes') - self.add_text_to_element(u'theme', themes, song.theme_name) - self.add_text_to_element(u'copyright', properties, song.copyright) - self.add_text_to_element(u'verseOrder', properties, song.verse_order) + self._add_text_to_element(u'theme', themes, song.theme_name) + self._add_text_to_element(u'copyright', properties, song.copyright) + self._add_text_to_element(u'verseOrder', properties, song.verse_order) if song.ccli_number: - self.add_text_to_element(u'ccliNo', properties, song.ccli_number) + self._add_text_to_element(u'ccliNo', properties, song.ccli_number) authors = etree.SubElement(properties, u'authors') for author in song.authors: - self.add_text_to_element(u'author', authors, author.display_name) + self._add_text_to_element(u'author', authors, author.display_name) lyrics = etree.SubElement(song_xml, u'lyrics') for verse in verseList: verseTag = u'%s%s' % ( verse[0][u'type'][0].lower(), verse[0][u'label']) - element = self.add_text_to_element(u'verse', lyrics, None, verseTag) - element = self.add_text_to_element(u'lines', element) + element = self._add_text_to_element(u'verse', lyrics, None, verseTag) + element = self._add_text_to_element(u'lines', element) for line in unicode(verse[1]).split(u'\n'): - self.add_text_to_element(u'line', element, line) - self.xml_to_song(self.extract_xml(song_xml)) - return u'' #self.xml_to_song(self.extract_xml(song_xml)) + self._add_text_to_element(u'line', element, line) + print self._dump_xml(song_xml) + self.xml_to_song(self._extract_xml(song_xml)) + return u'' #self.xml_to_song(self._extract_xml(song_xml)) - def add_text_to_element(self, tag, parent, text=None, label=None): + def xml_to_song(self, xml): + """ + Create a Song from OpenLyrics format xml + """ + song = Song() + if xml[:5] == u'