forked from openlp/openlp
fixes from last merge and more code for song management
This commit is contained in:
parent
326580559a
commit
1cf4914862
@ -420,7 +420,7 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to '
|
raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to '
|
||||||
u'be defined by the plugin')
|
u'be defined by the plugin')
|
||||||
|
|
||||||
def generateSlideData(self, service_item, item=None, xmlVersion=False):
|
def generateSlideData(self, serviceItem, item=None, xmlVersion=False):
|
||||||
raise NotImplementedError(u'MediaManagerItem.generateSlideData needs '
|
raise NotImplementedError(u'MediaManagerItem.generateSlideData needs '
|
||||||
u'to be defined by the plugin')
|
u'to be defined by the plugin')
|
||||||
|
|
||||||
@ -446,10 +446,10 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
'You must select one or more items to preview.'))
|
'You must select one or more items to preview.'))
|
||||||
else:
|
else:
|
||||||
log.debug(self.plugin.name + u' Preview requested')
|
log.debug(self.plugin.name + u' Preview requested')
|
||||||
service_item = self.buildServiceItem()
|
serviceItem = self.buildServiceItem()
|
||||||
if service_item:
|
if serviceItem:
|
||||||
service_item.from_plugin = True
|
serviceItem.from_plugin = True
|
||||||
self.parent.previewController.addServiceItem(service_item)
|
self.parent.previewController.addServiceItem(serviceItem)
|
||||||
|
|
||||||
def onLiveClick(self):
|
def onLiveClick(self):
|
||||||
"""
|
"""
|
||||||
@ -463,10 +463,10 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
'You must select one or more items to send live.'))
|
'You must select one or more items to send live.'))
|
||||||
else:
|
else:
|
||||||
log.debug(self.plugin.name + u' Live requested')
|
log.debug(self.plugin.name + u' Live requested')
|
||||||
service_item = self.buildServiceItem()
|
serviceItem = self.buildServiceItem()
|
||||||
if service_item:
|
if serviceItem:
|
||||||
service_item.from_plugin = True
|
serviceItem.from_plugin = True
|
||||||
self.parent.liveController.addServiceItem(service_item)
|
self.parent.liveController.addServiceItem(serviceItem)
|
||||||
|
|
||||||
def onAddClick(self):
|
def onAddClick(self):
|
||||||
"""
|
"""
|
||||||
@ -482,18 +482,18 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
# service items?
|
# service items?
|
||||||
if self.singleServiceItem or self.remoteTriggered:
|
if self.singleServiceItem or self.remoteTriggered:
|
||||||
log.debug(self.plugin.name + u' Add requested')
|
log.debug(self.plugin.name + u' Add requested')
|
||||||
service_item = self.buildServiceItem(None, True)
|
serviceItem = self.buildServiceItem(None, True)
|
||||||
if service_item:
|
if serviceItem:
|
||||||
service_item.from_plugin = False
|
serviceItem.from_plugin = False
|
||||||
self.parent.serviceManager.addServiceItem(service_item,
|
self.parent.serviceManager.addServiceItem(serviceItem,
|
||||||
replace=self.remoteTriggered)
|
replace=self.remoteTriggered)
|
||||||
else:
|
else:
|
||||||
items = self.listView.selectedIndexes()
|
items = self.listView.selectedIndexes()
|
||||||
for item in items:
|
for item in items:
|
||||||
service_item = self.buildServiceItem(item, True)
|
serviceItem = self.buildServiceItem(item, True)
|
||||||
if service_item:
|
if serviceItem:
|
||||||
service_item.from_plugin = False
|
serviceItem.from_plugin = False
|
||||||
self.parent.serviceManager.addServiceItem(service_item)
|
self.parent.serviceManager.addServiceItem(serviceItem)
|
||||||
|
|
||||||
def onAddEditClick(self):
|
def onAddEditClick(self):
|
||||||
"""
|
"""
|
||||||
@ -506,16 +506,16 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
'You must select one or more items'))
|
'You must select one or more items'))
|
||||||
else:
|
else:
|
||||||
log.debug(self.plugin.name + u' Add requested')
|
log.debug(self.plugin.name + u' Add requested')
|
||||||
service_item = self.parent.serviceManager.getServiceItem()
|
serviceItem = self.parent.serviceManager.getServiceItem()
|
||||||
if not service_item:
|
if not serviceItem:
|
||||||
QtGui.QMessageBox.information(self,
|
QtGui.QMessageBox.information(self,
|
||||||
translate('OpenLP.MediaManagerItem',
|
translate('OpenLP.MediaManagerItem',
|
||||||
'No Service Item Selected'),
|
'No Service Item Selected'),
|
||||||
translate('OpenLP.MediaManagerItem',
|
translate('OpenLP.MediaManagerItem',
|
||||||
'You must select an existing service item to add to.'))
|
'You must select an existing service item to add to.'))
|
||||||
elif self.title.lower() == service_item.name.lower():
|
elif self.title.lower() == serviceItem.name.lower():
|
||||||
self.generateSlideData(service_item)
|
self.generateSlideData(serviceItem)
|
||||||
self.parent.serviceManager.addServiceItem(service_item,
|
self.parent.serviceManager.addServiceItem(serviceItem,
|
||||||
replace=True)
|
replace=True)
|
||||||
else:
|
else:
|
||||||
# Turn off the remote edit update message indicator
|
# Turn off the remote edit update message indicator
|
||||||
@ -529,13 +529,13 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
Common method for generating a service item
|
Common method for generating a service item
|
||||||
"""
|
"""
|
||||||
service_item = ServiceItem(self.parent)
|
serviceItem = ServiceItem(self.parent)
|
||||||
if self.serviceItemIconName:
|
if self.serviceItemIconName:
|
||||||
service_item.add_icon(self.serviceItemIconName)
|
serviceItem.add_icon(self.serviceItemIconName)
|
||||||
else:
|
else:
|
||||||
service_item.add_icon(self.parent.icon_path)
|
serviceItem.add_icon(self.parent.icon_path)
|
||||||
if self.generateSlideData(service_item, item, xmlVersion):
|
if self.generateSlideData(serviceItem, item, xmlVersion):
|
||||||
return service_item
|
return serviceItem
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ class ServiceItem(object):
|
|||||||
u'capabilities': self.capabilities,
|
u'capabilities': self.capabilities,
|
||||||
u'search': self.search_string,
|
u'search': self.search_string,
|
||||||
u'data': self.data_string,
|
u'data': self.data_string,
|
||||||
u'xmlVersion': self.xml_version
|
u'xml_version': self.xml_version
|
||||||
}
|
}
|
||||||
service_data = []
|
service_data = []
|
||||||
if self.service_item_type == ServiceItemType.Text:
|
if self.service_item_type == ServiceItemType.Text:
|
||||||
@ -296,8 +296,8 @@ class ServiceItem(object):
|
|||||||
if u'search' in header:
|
if u'search' in header:
|
||||||
self.search_string = header[u'search']
|
self.search_string = header[u'search']
|
||||||
self.data_string = header[u'data']
|
self.data_string = header[u'data']
|
||||||
if u'xmlVersion' in header:
|
if u'xml_version' in header:
|
||||||
self.xml_version = header[u'xmlVersion']
|
self.xml_version = header[u'xml_version']
|
||||||
if self.service_item_type == ServiceItemType.Text:
|
if self.service_item_type == ServiceItemType.Text:
|
||||||
for slide in serviceitem[u'serviceitem'][u'data']:
|
for slide in serviceitem[u'serviceitem'][u'data']:
|
||||||
self._raw_frames.append(slide)
|
self._raw_frames.append(slide)
|
||||||
|
@ -100,7 +100,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.screens = screens
|
self.screens = screens
|
||||||
self.isLive = live
|
self.isLive = live
|
||||||
self.alertTab = None
|
self.alertTab = None
|
||||||
self.hide_mode = None
|
self.hideMode = None
|
||||||
self.setWindowTitle(u'OpenLP Display')
|
self.setWindowTitle(u'OpenLP Display')
|
||||||
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
||||||
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
||||||
@ -381,8 +381,8 @@ class MainDisplay(DisplayWidget):
|
|||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
# if was hidden keep it hidden
|
# if was hidden keep it hidden
|
||||||
if self.hide_mode and self.isLive:
|
if self.hideMode and self.isLive:
|
||||||
self.hideDisplay(self.hide_mode)
|
self.hideDisplay(self.hideMode)
|
||||||
preview = QtGui.QImage(self.screen[u'size'].width(),
|
preview = QtGui.QImage(self.screen[u'size'].width(),
|
||||||
self.screen[u'size'].height(),
|
self.screen[u'size'].height(),
|
||||||
QtGui.QImage.Format_ARGB32_Premultiplied)
|
QtGui.QImage.Format_ARGB32_Premultiplied)
|
||||||
@ -412,8 +412,8 @@ class MainDisplay(DisplayWidget):
|
|||||||
if serviceItem.foot_text and serviceItem.foot_text:
|
if serviceItem.foot_text and serviceItem.foot_text:
|
||||||
self.footer(serviceItem.foot_text)
|
self.footer(serviceItem.foot_text)
|
||||||
# if was hidden keep it hidden
|
# if was hidden keep it hidden
|
||||||
if self.hide_mode and self.isLive:
|
if self.hideMode and self.isLive:
|
||||||
self.hideDisplay(self.hide_mode)
|
self.hideDisplay(self.hideMode)
|
||||||
|
|
||||||
def footer(self, text):
|
def footer(self, text):
|
||||||
"""
|
"""
|
||||||
@ -444,7 +444,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
if self.phononActive:
|
if self.phononActive:
|
||||||
self.webView.setVisible(True)
|
self.webView.setVisible(True)
|
||||||
self.hide_mode = mode
|
self.hideMode = mode
|
||||||
|
|
||||||
def showDisplay(self):
|
def showDisplay(self):
|
||||||
"""
|
"""
|
||||||
@ -459,7 +459,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
if self.phononActive:
|
if self.phononActive:
|
||||||
self.webView.setVisible(False)
|
self.webView.setVisible(False)
|
||||||
self.videoPlay()
|
self.videoPlay()
|
||||||
self.hide_mode = None
|
self.hideMode = None
|
||||||
# Trigger actions when display is active again
|
# Trigger actions when display is active again
|
||||||
Receiver.send_message(u'maindisplay_active')
|
Receiver.send_message(u'maindisplay_active')
|
||||||
|
|
||||||
|
@ -648,6 +648,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
Book.name == book_name)
|
Book.name == book_name)
|
||||||
else:
|
else:
|
||||||
self.song.book = None
|
self.song.book = None
|
||||||
|
theme_name = unicode(self.ThemeSelectionComboItem.currentText())
|
||||||
|
if theme_name:
|
||||||
|
self.song.theme_name = theme_name
|
||||||
|
else:
|
||||||
|
self.song.theme_name = None
|
||||||
if self._validate_song():
|
if self._validate_song():
|
||||||
self.processLyrics()
|
self.processLyrics()
|
||||||
self.processTitle()
|
self.processTitle()
|
||||||
|
@ -396,7 +396,7 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
]
|
]
|
||||||
service_item.data_string = {u'title':song.search_title,
|
service_item.data_string = {u'title':song.search_title,
|
||||||
u'authors':author_list}
|
u'authors':author_list}
|
||||||
service_item.xml_version = OpenLyricsParser().songToXml(song)
|
service_item.xml_version = OpenLyricsParser().song_to_xml(song)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def serviceLoad(self, item):
|
def serviceLoad(self, item):
|
||||||
|
@ -41,6 +41,7 @@ The basic XML is of the format::
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from lxml import etree, objectify
|
from lxml import etree, objectify
|
||||||
|
from openlp.plugins.songs.lib.db import Author, Song
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -97,6 +98,7 @@ class SongXMLBuilder(object):
|
|||||||
return etree.tostring(self.song_xml, encoding=u'UTF-8',
|
return etree.tostring(self.song_xml, encoding=u'UTF-8',
|
||||||
xml_declaration=True)
|
xml_declaration=True)
|
||||||
|
|
||||||
|
|
||||||
class SongXMLParser(object):
|
class SongXMLParser(object):
|
||||||
"""
|
"""
|
||||||
A class to read in and parse a song's XML.
|
A class to read in and parse a song's XML.
|
||||||
@ -239,11 +241,12 @@ class LyricsXML(object):
|
|||||||
u'<song version="1.0">%s</song>' % lyrics_output
|
u'<song version="1.0">%s</song>' % lyrics_output
|
||||||
return song_output
|
return song_output
|
||||||
|
|
||||||
|
|
||||||
class OpenLyricsParser(object):
|
class OpenLyricsParser(object):
|
||||||
"""
|
"""
|
||||||
This class represents the converter for Song to/from OpenLyrics XML.
|
This class represents the converter for Song to/from OpenLyrics XML.
|
||||||
"""
|
"""
|
||||||
def songToXml(self, song):
|
def song_to_xml(self, song):
|
||||||
"""
|
"""
|
||||||
Convert the song to OpenLyrics Format
|
Convert the song to OpenLyrics Format
|
||||||
"""
|
"""
|
||||||
@ -274,8 +277,8 @@ class OpenLyricsParser(object):
|
|||||||
element = self.add_text_to_element(u'lines', element)
|
element = self.add_text_to_element(u'lines', element)
|
||||||
for line in unicode(verse[1]).split(u'\n'):
|
for line in unicode(verse[1]).split(u'\n'):
|
||||||
self.add_text_to_element(u'line', element, line)
|
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.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 add_text_to_element(self, tag, parent, text=None, label=None):
|
||||||
if label:
|
if label:
|
||||||
@ -287,11 +290,40 @@ class OpenLyricsParser(object):
|
|||||||
parent.append(element)
|
parent.append(element)
|
||||||
return element
|
return element
|
||||||
|
|
||||||
def xmlToSong(self, xml):
|
def xml_to_song(self, xml):
|
||||||
"""
|
"""
|
||||||
Create a Song from OpenLyrics format xml
|
Create a Song from OpenLyrics format xml
|
||||||
"""
|
"""
|
||||||
return 0
|
return 0
|
||||||
|
song = Song()
|
||||||
|
if xml[:5] == u'<?xml':
|
||||||
|
xml = xml[38:]
|
||||||
|
song = objectify.fromstring(xml)
|
||||||
|
print objectify.dump(song)
|
||||||
|
for properties in song.properties:
|
||||||
|
song.copyright = properties.copyright.text
|
||||||
|
song.verse_order = verseOrder.text
|
||||||
|
try:
|
||||||
|
song.ccli_number = properties.ccliNo.text
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
song.theme_name = properties.themes.theme
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
for title in properties.titles.title:
|
||||||
|
if not song.title:
|
||||||
|
song.title = "aa" + title.text
|
||||||
|
else:
|
||||||
|
song.alternate_title = title.text
|
||||||
|
for author in properties.authors.author:
|
||||||
|
print author.text
|
||||||
|
for lyrics in song.lyrics:
|
||||||
|
for verse in song.lyrics.verse:
|
||||||
|
print "verse", verse.attrib
|
||||||
|
for line in lyrics.verse.lines.line:
|
||||||
|
print line
|
||||||
|
return 0
|
||||||
|
|
||||||
def dump_xml(self, xml):
|
def dump_xml(self, xml):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user