diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py
index ce0797240..40c11ddb7 100644
--- a/openlp/core/lib/mediamanageritem.py
+++ b/openlp/core/lib/mediamanageritem.py
@@ -334,6 +334,7 @@ class MediaManagerItem(QtGui.QWidget):
"""
Add a file to the list widget to make it available for showing
"""
+ print self.onNewFileMasks
files = QtGui.QFileDialog.getOpenFileNames(
self, self.onNewPrompt,
SettingsManager.get_last_dir(self.settingsSection),
diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py
index f37d71288..1799b2983 100644
--- a/openlp/core/ui/media/__init__.py
+++ b/openlp/core/ui/media/__init__.py
@@ -71,30 +71,26 @@ class MediaInfo(object):
def get_media_players():
"""
- This method extract the configured media players and overridden player from
- the settings.
-
- ``players_list``
- A list with all active media players.
-
- ``overridden_player``
- Here an special media player is chosen for all media actions.
+ This method extracts the configured media players and overridden player
+ from the settings.
"""
log.debug(u'get_media_players')
- players = unicode(Settings().value(u'media/players').toString())
- if not players:
- players = u'webkit'
+ saved_players = unicode(Settings().value(u'media/players').toString())
+ if not saved_players:
+ # we must always have a player and Webkit is the core one.
+ saved_players = u'webkit'
reg_ex = QtCore.QRegExp(".*\[(.*)\].*")
if Settings().value(u'media/override player',
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == QtCore.Qt.Checked:
- if reg_ex.exactMatch(players):
+ if reg_ex.exactMatch(saved_players):
overridden_player = u'%s' % reg_ex.cap(1)
else:
overridden_player = u'auto'
else:
overridden_player = u''
- players_list = players.replace(u'[', u'').replace(u']', u'').split(u',')
- return players_list, overridden_player
+ saved_players_list = saved_players.replace(u'[', u'').\
+ replace(u']',u'').split(u',')
+ return saved_players_list, overridden_player
def set_media_players(players_list, overridden_player=u'auto'):
diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py
index 5f0597991..8af81b060 100644
--- a/openlp/core/ui/media/mediacontroller.py
+++ b/openlp/core/ui/media/mediacontroller.py
@@ -47,6 +47,8 @@ class MediaController(object):
"""
def __init__(self, parent):
+ print "Media Controller "
+ print parent
self.parent = parent
self.mediaPlayers = {}
self.controller = []
@@ -106,7 +108,7 @@ class MediaController(object):
u'core', u'ui', u'media')
for filename in os.listdir(controller_dir):
if filename.endswith(u'player.py') and not \
- filename == 'media_player.py':
+ filename == 'mediaplayer.py':
path = os.path.join(controller_dir, filename)
if os.path.isfile(path):
modulename = u'openlp.core.ui.media.' + \
@@ -287,11 +289,13 @@ class MediaController(object):
"""
player.resize(display)
- def video(self, controller, file, muted, isBackground, hidden=False):
+ def video(self, controller, serviceItem, muted, isBackground,
+ hidden=False):
"""
Loads and starts a video to run with the option of sound
"""
log.debug(u'video')
+ print "hallo mum"
isValid = False
# stop running videos
self.video_reset(controller)
@@ -300,7 +304,7 @@ class MediaController(object):
controller.media_info.volume = 0
else:
controller.media_info.volume = controller.volumeSlider.value()
- controller.media_info.file_info = QtCore.QFileInfo(file)
+ controller.media_info.file_info = QtCore.QFileInfo(serviceItem.get_filename())
controller.media_info.is_background = isBackground
display = None
if controller.isLive:
@@ -318,7 +322,7 @@ class MediaController(object):
else:
controller.media_info.start_time = \
display.serviceItem.start_time
- controller.media_info.end_time = display.serviceItem.end_time
+ controller.media_info.end_time = serviceItem.end_time
elif controller.previewDisplay:
display = controller.previewDisplay
isValid = self.check_file_type(controller, display)
@@ -338,8 +342,9 @@ class MediaController(object):
# Preview requested
if not controller.isLive:
autoplay = True
- # Visible or background requested
- elif not hidden or controller.media_info.is_background:
+ # Visible or background requested or Service Item wants autostart
+ elif not hidden or controller.media_info.is_background or \
+ serviceItem.will_auto_start:
autoplay = True
# Unblank on load set
elif Settings().value(u'general/auto unblank',
@@ -356,9 +361,15 @@ class MediaController(object):
log.debug(u'use %s controller' % self.curDisplayMediaPlayer[display])
return True
- def media_length(self, controller, service_item):
+ def media_length(self, controller, serviceItem):
"""
- Loads and starts a video to run with the option of sound
+ Loads and starts a media item to obtain the media length
+
+ ``msg``
+ First element is the controller which should be used
+
+ ``serviceItem``
+ The ServiceItem containing the details to be played.
"""
print controller
log.debug(u'media_length')
@@ -366,7 +377,7 @@ class MediaController(object):
self.video_reset(controller)
controller.media_info = MediaInfo()
controller.media_info.volume = controller.volumeSlider.value()
- controller.media_info.file_info = QtCore.QFileInfo(service_item
+ controller.media_info.file_info = QtCore.QFileInfo(serviceItem
.get_filename())
display = controller.previewDisplay
if not self.check_file_type(controller, display):
@@ -376,13 +387,13 @@ class MediaController(object):
unicode(translate('MediaPlugin.MediaItem',
'Unsupported File')))
return False
- # set a black background by default no theme is needed.
if not self.video_play([controller]):
critical_error_message_box(
translate('MediaPlugin.MediaItem', 'Unsupported File'),
unicode(translate('MediaPlugin.MediaItem',
'Unsupported File')))
return False
+ serviceItem.set_media_length(controller.media_info.length)
self.video_stop([controller])
log.debug(u'use %s controller' % self.curDisplayMediaPlayer[display])
return True
diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py
index de6132845..00ac3eafb 100644
--- a/openlp/core/ui/servicemanager.py
+++ b/openlp/core/ui/servicemanager.py
@@ -97,8 +97,8 @@ class ServiceManager(QtGui.QWidget):
"""
Manages the services. This involves taking text strings from plugins and
adding them to the service. This service can then be zipped up with all
- the resources used into one OSZ file for use on any OpenLP v2 installation.
- Also handles the UI tasks of moving things up and down etc.
+ the resources used into one OSZ or oszl file for use on any OpenLP v2
+ installation. Also handles the UI tasks of moving things up and down etc.
"""
def __init__(self, mainwindow, parent=None):
"""
@@ -425,7 +425,7 @@ class ServiceManager(QtGui.QWidget):
SettingsManager.get_last_dir(
self.mainwindow.serviceManagerSettingsSection),
translate('OpenLP.ServiceManager',
- 'OpenLP Service Files (*.osz)')))
+ 'OpenLP Service Files (*.osz *.ozl)')))
if not fileName:
return False
else:
@@ -594,6 +594,75 @@ class ServiceManager(QtGui.QWidget):
delete_file(temp_file_name)
return success
+ def saveLocalFile(self):
+ """
+ Save the current service file.
+
+ A temporary file is created so that we don't overwrite the existing one
+ and leave a mangled service file should there be an error when saving.
+ Audio files are also copied into the service manager directory, and
+ then packaged into the zip file.
+ """
+ if not self.fileName():
+ return self.saveFileAs()
+ temp_file, temp_file_name = mkstemp(u'.oszl', u'openlp_')
+ # We don't need the file handle.
+ os.close(temp_file)
+ log.debug(temp_file_name)
+ path_file_name = unicode(self.fileName())
+ path, file_name = os.path.split(path_file_name)
+ basename = os.path.splitext(file_name)[0]
+ service_file_name = '%s.osd' % basename
+ log.debug(u'ServiceManager.saveFile - %s', path_file_name)
+ SettingsManager.set_last_dir(
+ self.mainwindow.serviceManagerSettingsSection,
+ path)
+ service = []
+ total_size = 0
+ Receiver.send_message(u'cursor_busy')
+ # Number of items + 1 to zip it
+ self.mainwindow.displayProgressBar(len(self.serviceItems) + 1)
+ for item in self.serviceItems:
+ self.mainwindow.incrementProgressBar()
+ service_item = item[u'service_item'].get_service_repr()
+ service.append({u'serviceitem': service_item})
+ service_content = cPickle.dumps(service)
+ # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be
+ # extracted using unzip in UNIX.
+ allow_zip_64 = (total_size > 2147483648 + len(service_content))
+ log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64)
+ zip = None
+ success = True
+ self.mainwindow.incrementProgressBar()
+ try:
+ zip = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED,
+ allow_zip_64)
+ # First we add service contents.
+ zip.writestr(service_file_name.encode(u'utf-8'), service_content)
+ except IOError:
+ log.exception(u'Failed to save service to disk: %s', temp_file_name)
+ Receiver.send_message(u'openlp_error_message', {
+ u'title': translate(u'OpenLP.ServiceManager',
+ u'Error Saving File'),
+ u'message': translate(u'OpenLP.ServiceManager',
+ u'There was an error saving your file.')
+ })
+ success = False
+ finally:
+ if zip:
+ zip.close()
+ self.mainwindow.finishedProgressBar()
+ Receiver.send_message(u'cursor_normal')
+ if success:
+ try:
+ shutil.copy(temp_file_name, path_file_name)
+ except:
+ return self.saveFileAs()
+ self.mainwindow.addRecentFile(path_file_name)
+ self.setModified(False)
+ delete_file(temp_file_name)
+ return success
+
def saveFileAs(self):
"""
Get a file name and then call :func:`ServiceManager.saveFile` to
@@ -632,7 +701,9 @@ class ServiceManager(QtGui.QWidget):
path = os.path.join(directory, default_filename)
fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow,
UiStrings().SaveService, path,
- translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)')))
+ translate('OpenLP.ServiceManager',
+ 'OpenLP Service Files (*.osz);;'
+ 'OpenLP Service Files - light (*.oszl)')))
if not fileName:
return False
if os.path.splitext(fileName)[1] == u'':
@@ -641,7 +712,10 @@ class ServiceManager(QtGui.QWidget):
ext = os.path.splitext(fileName)[1]
fileName.replace(ext, u'.osz')
self.setFileName(fileName)
- return self.saveFile()
+ if suffix == u'.oszl':
+ return self.saveLocalFile()
+ else:
+ return self.saveFile()
def loadFile(self, fileName):
if not fileName:
@@ -774,10 +848,10 @@ class ServiceManager(QtGui.QWidget):
.is_capable(ItemCapabilities.CanAutoStartForLive):
self.autoStartAction.setVisible(True)
self.autoStartAction.setText(translate('OpenLP.ServiceManager',
- '&Auto Start - Disabled'))
+ '&Auto Start - inactive'))
if serviceItem[u'service_item'].will_auto_start:
self.autoStartAction.setText(translate('OpenLP.ServiceManager',
- '&Auto Start - Enabled'))
+ '&Auto Start - active'))
self.themeMenu.menuAction().setVisible(False)
# Set up the theme menu.
if serviceItem[u'service_item'].is_text() and \
@@ -819,6 +893,7 @@ class ServiceManager(QtGui.QWidget):
item = self.findServiceItem()[0]
self.serviceItems[item][u'service_item'].will_auto_start = \
not self.serviceItems[item][u'service_item'].will_auto_start
+ a=1
def onServiceItemEditForm(self):
@@ -1395,6 +1470,9 @@ class ServiceManager(QtGui.QWidget):
filename = unicode(url.toLocalFile())
if filename.endswith(u'.osz'):
self.onLoadServiceClicked(filename)
+ elif filename.endswith(u'.oszl'):
+ # todo correct
+ self.onLoadServiceClicked(filename)
elif link.hasText():
plugin = unicode(link.text())
item = self.serviceManagerList.itemAt(event.pos())
diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py
index 2d108e72c..aee409ed9 100644
--- a/openlp/core/ui/slidecontroller.py
+++ b/openlp/core/ui/slidecontroller.py
@@ -54,13 +54,15 @@ class SlideList(QtGui.QTableWidget):
class Controller(QtGui.QWidget):
"""
- Controller is a general controller widget.
+ Controller is a general display controller widget.
"""
def __init__(self, parent, isLive=False):
"""
Set up the general Controller.
"""
QtGui.QWidget.__init__(self, parent)
+ print "Controller"
+ print parent
self.isLive = isLive
self.display = None
@@ -1346,8 +1348,7 @@ class SlideController(Controller):
Respond to the arrival of a media service item
"""
log.debug(u'SlideController onMediaStart')
- file = os.path.join(item.get_frame_path(), item.get_frame_title())
- self.mediaController.video(self, file, False, False, self.hideMode())
+ self.mediaController.video(self, item, False, False, self.hideMode())
if not self.isLive or self.mediaController.withLivePreview:
self.previewDisplay.show()
self.slidePreview.hide()
diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py
index 8af923738..0f5308104 100644
--- a/openlp/plugins/media/lib/mediaitem.py
+++ b/openlp/plugins/media/lib/mediaitem.py
@@ -169,6 +169,7 @@ class MediaMediaItem(MediaManagerItem):
"""
Called to replace Live background with the media selected.
"""
+ # Todo fix me up
if check_item_selected(self.listView,
translate('MediaPlugin.MediaItem',
'You must select a media file to replace the background with.')):
@@ -203,7 +204,6 @@ class MediaMediaItem(MediaManagerItem):
unicode(translate('MediaPlugin.MediaItem',
'The file %s no longer exists.')) % filename)
return False
- self.mediaLength = 0
service_item.title = unicode(self.displayTypeComboBox.currentText())
service_item.shortname = service_item.title
(path, name) = os.path.split(filename)
@@ -215,10 +215,9 @@ class MediaMediaItem(MediaManagerItem):
return False
service_item.add_capability(ItemCapabilities.CanAutoStartForLive)
service_item.add_capability(ItemCapabilities.RequiresMedia)
-
if Settings().value(self.settingsSection + u'/media auto start',
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0]\
- == QtCore.Qt.Checked:
+ == QtCore.Qt.Checked:
service_item.will_auto_start = True
# force a non-existent theme
service_item.theme = -1
diff --git a/resources/openlp.xml b/resources/openlp.xml
index 215fa2b6e..e8f31dc0d 100644
--- a/resources/openlp.xml
+++ b/resources/openlp.xml
@@ -17,6 +17,11 @@ Notes:
OpenLP Service File
+
+
+
+ OpenLP Service File
+