fixes from last merge and more code for song management

This commit is contained in:
Tim Bentley 2010-11-27 20:51:54 +00:00
parent 326580559a
commit 1cf4914862
7 changed files with 81 additions and 44 deletions

View File

@ -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

View File

@ -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)

View File

@ -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')

View File

@ -545,7 +545,7 @@ class BibleMediaItem(MediaManagerItem):
self.dual_search_results = self.parent.manager.get_verses( self.dual_search_results = self.parent.manager.get_verses(
dual_bible, text) dual_bible, text)
else: else:
# We are doing a ' Text Search'. # We are doing a 'Text Search'.
bibles = self.parent.manager.get_bibles() bibles = self.parent.manager.get_bibles()
self.search_results = self.parent.manager.verse_search(bible, text) self.search_results = self.parent.manager.verse_search(bible, text)
if dual_bible and self.search_results: if dual_bible and self.search_results:

View File

@ -630,7 +630,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
Get all the data from the widgets on the form, and then save it to the Get all the data from the widgets on the form, and then save it to the
database. database.
``preview`` ``preview``
Should be True if song is also previewed. Should be True if song is also previewed.
""" """
self.song.title = unicode(self.TitleEditItem.text()) self.song.title = unicode(self.TitleEditItem.text())
@ -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()

View File

@ -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):

View File

@ -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):
""" """