diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py
index 92c82087f..f9d690ba2 100644
--- a/openlp/core/lib/serviceitem.py
+++ b/openlp/core/lib/serviceitem.py
@@ -30,7 +30,6 @@ type and capability of an item.
import datetime
import logging
-import mutagen
import os
import uuid
@@ -110,6 +109,7 @@ class ServiceItem(object):
self.edit_id = None
self.xml_version = None
self.start_time = 0
+ self.media_length = 0
self._new_item()
def _new_item(self):
@@ -263,7 +263,8 @@ class ServiceItem(object):
u'search': self.search_string,
u'data': self.data_string,
u'xml_version': self.xml_version,
- u'start_time': self.start_time
+ u'start_time': self.start_time,
+ u'media_length': self.media_length
}
service_data = []
if self.service_item_type == ServiceItemType.Text:
@@ -309,6 +310,8 @@ class ServiceItem(object):
self.xml_version = header[u'xml_version']
if u'start_time' in header:
self.start_time = header[u'start_time']
+ if u'media_length' in header:
+ self.media_length = header[u'media_length']
if self.service_item_type == ServiceItemType.Text:
for slide in serviceitem[u'serviceitem'][u'data']:
self._raw_frames.append(slide)
@@ -438,14 +441,9 @@ class ServiceItem(object):
if self.start_time != 0:
start = UiStrings.StartTimeCode % \
unicode(datetime.timedelta(seconds=self.start_time))
- path = os.path.join(self.get_frames()[0][u'path'],
- self.get_frames()[0][u'title'])
- if os.path.isfile(path):
- file = mutagen.File(path)
- if file is not None:
- seconds = int(file.info.length)
- end = UiStrings.LengthTime % \
- unicode(datetime.timedelta(seconds=seconds))
+ if self.media_length != 0:
+ end = UiStrings.LengthTime % \
+ unicode(datetime.timedelta(seconds=self.media_length))
if not start and not end:
return None
elif start and not end:
diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py
index cc2f2f72d..90042f80b 100644
--- a/openlp/core/ui/maindisplay.py
+++ b/openlp/core/ui/maindisplay.py
@@ -348,7 +348,7 @@ class MainDisplay(DisplayWidget):
"""
Start the video at a predetermined point.
"""
- if newState == 2:
+ if newState == Phonon.PlayingState:
self.mediaObject.seek(self.serviceItem.start_time * 1000)
def isWebLoaded(self):
diff --git a/openlp/core/ui/printserviceorderform.py b/openlp/core/ui/printserviceorderform.py
index 3b01f9ac7..70128cb89 100644
--- a/openlp/core/ui/printserviceorderform.py
+++ b/openlp/core/ui/printserviceorderform.py
@@ -24,7 +24,6 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import datetime
-import mutagen
import os
from PyQt4 import QtCore, QtGui
@@ -113,16 +112,9 @@ class PrintServiceOrderForm(QtGui.QDialog, Ui_PrintServiceOrderDialog):
item.notes.replace(u'\n', u'
'))
# Add play length of media files.
if item.is_media() and self.printMetaDataCheckBox.isChecked():
- path = os.path.join(item.get_frames()[0][u'path'],
- item.get_frames()[0][u'title'])
- if not os.path.isfile(path):
- continue
- file = mutagen.File(path)
- if file is not None:
- length = int(file.info.length)
- text += u'
%s %s
' % (translate(
- 'OpenLP.ServiceManager', u'Playing time:'),
- unicode(datetime.timedelta(seconds=length)))
+ text += u'%s %s
' % (translate(
+ 'OpenLP.ServiceManager', u'Playing time:'),
+ unicode(datetime.timedelta(seconds=item.media_length)))
if self.customNoteEdit.toPlainText():
text += u'%s
%s' % (translate('OpenLP.ServiceManager',
u'Custom Service Notes:'), self.customNoteEdit.toPlainText())
diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py
index a0fdc801a..5dbe9655d 100644
--- a/openlp/plugins/bibles/lib/mediaitem.py
+++ b/openlp/plugins/bibles/lib/mediaitem.py
@@ -30,6 +30,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
translate
+from openlp.core.lib.searchedit import SearchEdit
from openlp.core.lib.ui import UiStrings, add_widget_completer, \
media_item_combo_box, critical_error_message_box
from openlp.plugins.bibles.forms import BibleImportForm
@@ -37,6 +38,14 @@ from openlp.plugins.bibles.lib import get_reference_match
log = logging.getLogger(__name__)
+class BibleSearch(object):
+ """
+ Enumeration class for the different search methods for the "quick search".
+ """
+ Reference = 1
+ Text = 2
+
+
class BibleMediaItem(MediaManagerItem):
"""
This is the custom media manager item for Bibles.
@@ -83,18 +92,17 @@ class BibleMediaItem(MediaManagerItem):
u'quickSecondComboBox')
self.quickSecondLabel.setBuddy(self.quickSecondComboBox)
self.quickLayout.addRow(self.quickSecondLabel, self.quickSecondComboBox)
- self.quickSearchTypeLabel = QtGui.QLabel(self.quickTab)
- self.quickSearchTypeLabel.setObjectName(u'quickSearchTypeLabel')
- self.quickSearchComboBox = media_item_combo_box(self.quickTab,
- u'quickSearchComboBox')
- self.quickSearchTypeLabel.setBuddy(self.quickSearchComboBox)
- self.quickLayout.addRow(self.quickSearchTypeLabel,
- self.quickSearchComboBox)
self.quickSearchLabel = QtGui.QLabel(self.quickTab)
self.quickSearchLabel.setObjectName(u'quickSearchLabel')
- self.quickSearchEdit = QtGui.QLineEdit(self.quickTab)
+ self.quickSearchEdit = SearchEdit(self.quickTab)
self.quickSearchEdit.setObjectName(u'quickSearchEdit')
self.quickSearchLabel.setBuddy(self.quickSearchEdit)
+ self.quickSearchEdit.setSearchTypes([
+ (BibleSearch.Reference, u':/bibles/bibles_search_reference.png',
+ translate('BiblesPlugin.MediaItem', 'Scripture Reference')),
+ (BibleSearch.Text, u':/bibles/bibles_search_text.png',
+ translate('BiblesPlugin.MediaItem', 'Text Search'))
+ ])
self.quickLayout.addRow(self.quickSearchLabel, self.quickSearchEdit)
self.quickClearLabel = QtGui.QLabel(self.quickTab)
self.quickClearLabel.setObjectName(u'quickClearLabel')
@@ -196,8 +204,8 @@ class BibleMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'activated(int)'), self.onAdvancedFromVerse)
QtCore.QObject.connect(self.advancedToChapter,
QtCore.SIGNAL(u'activated(int)'), self.onAdvancedToChapter)
- QtCore.QObject.connect(self.quickSearchComboBox,
- QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter)
+ QtCore.QObject.connect(self.quickSearchEdit,
+ QtCore.SIGNAL(u'searchTypeChanged(int)'), self.updateAutoCompleter)
QtCore.QObject.connect(self.quickVersionComboBox,
QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter)
# Buttons
@@ -230,8 +238,6 @@ class BibleMediaItem(MediaManagerItem):
self.quickVersionLabel.setText(u'%s:' % UiStrings.Version)
self.quickSecondLabel.setText(
translate('BiblesPlugin.MediaItem', 'Second:'))
- self.quickSearchTypeLabel.setText(
- translate('BiblesPlugin.MediaItem', 'Search type:'))
self.quickSearchLabel.setText(
translate('BiblesPlugin.MediaItem', 'Find:'))
self.quickSearchButton.setText(UiStrings.Search)
@@ -253,10 +259,6 @@ class BibleMediaItem(MediaManagerItem):
self.advancedClearLabel.setText(
translate('BiblesPlugin.MediaItem', 'Results:'))
self.advancedSearchButton.setText(UiStrings.Search)
- self.quickSearchComboBox.addItem(
- translate('BiblesPlugin.MediaItem', 'Verse Search'))
- self.quickSearchComboBox.addItem(
- translate('BiblesPlugin.MediaItem', 'Text Search'))
self.quickClearComboBox.addItem(
translate('BiblesPlugin.MediaItem', 'Clear'))
self.quickClearComboBox.addItem(
@@ -354,11 +356,11 @@ class BibleMediaItem(MediaManagerItem):
"""
This updates the bible book completion list for the search field. The
completion depends on the bible. It is only updated when we are doing a
- verse search, otherwise the auto completion list is removed.
+ reference search, otherwise the auto completion list is removed.
"""
books = []
- # We have to do a 'Verse Search'.
- if self.quickSearchComboBox.currentIndex() == 0:
+ # We have to do a 'Reference Search'.
+ if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference:
bibles = self.parent.manager.get_bibles()
bible = unicode(self.quickVersionComboBox.currentText())
if bible:
@@ -487,7 +489,7 @@ class BibleMediaItem(MediaManagerItem):
def onQuickSearchButton(self):
"""
Does a quick search and saves the search results. Quick search can
- either be "Verse Search" or "Text Search".
+ either be "Reference Search" or "Text Search".
"""
log.debug(u'Quick Search Button pressed')
self.quickSearchButton.setEnabled(False)
@@ -495,8 +497,8 @@ class BibleMediaItem(MediaManagerItem):
bible = unicode(self.quickVersionComboBox.currentText())
second_bible = unicode(self.quickSecondComboBox.currentText())
text = unicode(self.quickSearchEdit.text())
- if self.quickSearchComboBox.currentIndex() == 0:
- # We are doing a 'Verse Search'.
+ if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference:
+ # We are doing a 'Reference Search'.
self.search_results = self.parent.manager.get_verses(bible, text)
if second_bible and self.search_results:
self.second_search_results = self.parent.manager.get_verses(
diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py
index d57af14cf..93c201c14 100644
--- a/openlp/plugins/media/lib/mediaitem.py
+++ b/openlp/plugins/media/lib/mediaitem.py
@@ -32,6 +32,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \
SettingsManager, translate, check_item_selected, Receiver
from openlp.core.lib.ui import UiStrings, critical_error_message_box
+from PyQt4.phonon import Phonon
log = logging.getLogger(__name__)
@@ -48,9 +49,13 @@ class MediaMediaItem(MediaManagerItem):
u':/media/media_video.png').toImage()
MediaManagerItem.__init__(self, parent, self, icon)
self.singleServiceItem = False
+ self.mediaObject = Phonon.MediaObject(self)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'video_background_replaced'),
self.videobackgroundReplaced)
+ QtCore.QObject.connect(self.mediaObject,
+ QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'),
+ self.videoStart)
def retranslateUi(self):
self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
@@ -118,6 +123,11 @@ class MediaMediaItem(MediaManagerItem):
return False
filename = unicode(item.data(QtCore.Qt.UserRole).toString())
if os.path.exists(filename):
+ self.MediaState = None
+ self.mediaObject.stop()
+ self.mediaObject.clearQueue()
+ self.mediaObject.setCurrentSource(Phonon.MediaSource(filename))
+ self.mediaObject.play()
service_item.title = unicode(self.plugin.nameStrings[u'singular'])
service_item.add_capability(ItemCapabilities.RequiresMedia)
service_item.add_capability(ItemCapabilities.AllowsVarableStartTime)
@@ -125,6 +135,9 @@ class MediaMediaItem(MediaManagerItem):
service_item.theme = -1
frame = u':/media/image_clapperboard.png'
(path, name) = os.path.split(filename)
+ while not self.MediaState:
+ Receiver.send_message(u'openlp_process_events')
+ service_item.media_length = self.mediaLength
service_item.add_from_command(path, name, frame)
return True
else:
@@ -162,3 +175,12 @@ class MediaMediaItem(MediaManagerItem):
item_name.setIcon(build_icon(img))
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
self.listView.addItem(item_name)
+
+ def videoStart(self, newState, oldState):
+ """
+ Start the video at a predetermined point.
+ """
+ if newState == Phonon.PlayingState:
+ self.MediaState = newState
+ self.mediaLength = self.mediaObject.totalTime()/1000
+ self.mediaObject.stop()
diff --git a/resources/images/bibles_search_reference.png b/resources/images/bibles_search_reference.png
new file mode 100644
index 000000000..f64c0ad78
Binary files /dev/null and b/resources/images/bibles_search_reference.png differ
diff --git a/resources/images/bibles_search_text.png b/resources/images/bibles_search_text.png
new file mode 100644
index 000000000..1ab7145c6
Binary files /dev/null and b/resources/images/bibles_search_text.png differ
diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc
index dd5abd861..9e6ff6543 100644
--- a/resources/images/openlp-2.qrc
+++ b/resources/images/openlp-2.qrc
@@ -21,6 +21,10 @@
song_topic_edit.png
song_book_edit.png
+
+ bibles_search_text.png
+ bibles_search_reference.png
+
plugin_alerts.png
plugin_bibles.png