forked from openlp/openlp
Fix Media length calc
This commit is contained in:
parent
720c2036e3
commit
fba2a245fb
@ -30,7 +30,6 @@ type and capability of an item.
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import mutagen
|
|
||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -110,6 +109,7 @@ class ServiceItem(object):
|
|||||||
self.edit_id = None
|
self.edit_id = None
|
||||||
self.xml_version = None
|
self.xml_version = None
|
||||||
self.start_time = 0
|
self.start_time = 0
|
||||||
|
self.media_length = 0
|
||||||
self._new_item()
|
self._new_item()
|
||||||
|
|
||||||
def _new_item(self):
|
def _new_item(self):
|
||||||
@ -263,7 +263,8 @@ class ServiceItem(object):
|
|||||||
u'search': self.search_string,
|
u'search': self.search_string,
|
||||||
u'data': self.data_string,
|
u'data': self.data_string,
|
||||||
u'xml_version': self.xml_version,
|
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 = []
|
service_data = []
|
||||||
if self.service_item_type == ServiceItemType.Text:
|
if self.service_item_type == ServiceItemType.Text:
|
||||||
@ -309,6 +310,8 @@ class ServiceItem(object):
|
|||||||
self.xml_version = header[u'xml_version']
|
self.xml_version = header[u'xml_version']
|
||||||
if u'start_time' in header:
|
if u'start_time' in header:
|
||||||
self.start_time = header[u'start_time']
|
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:
|
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)
|
||||||
@ -439,14 +442,9 @@ class ServiceItem(object):
|
|||||||
if self.start_time != 0:
|
if self.start_time != 0:
|
||||||
start = UiStrings.StartTimeCode % \
|
start = UiStrings.StartTimeCode % \
|
||||||
unicode(datetime.timedelta(seconds=self.start_time))
|
unicode(datetime.timedelta(seconds=self.start_time))
|
||||||
path = os.path.join(self.get_frames()[0][u'path'],
|
if self.media_length != 0:
|
||||||
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 % \
|
end = UiStrings.LengthTime % \
|
||||||
unicode(datetime.timedelta(seconds=seconds))
|
unicode(datetime.timedelta(seconds=self.media_length))
|
||||||
if not start and not end:
|
if not start and not end:
|
||||||
return None
|
return None
|
||||||
elif start and not end:
|
elif start and not end:
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
import datetime
|
import datetime
|
||||||
import mutagen
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
@ -113,16 +112,9 @@ class PrintServiceOrderForm(QtGui.QDialog, Ui_PrintServiceOrderDialog):
|
|||||||
item.notes.replace(u'\n', u'<br />'))
|
item.notes.replace(u'\n', u'<br />'))
|
||||||
# Add play length of media files.
|
# Add play length of media files.
|
||||||
if item.is_media() and self.printMetaDataCheckBox.isChecked():
|
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'<p><b>%s</b> %s</p>' % (translate(
|
text += u'<p><b>%s</b> %s</p>' % (translate(
|
||||||
'OpenLP.ServiceManager', u'Playing time:'),
|
'OpenLP.ServiceManager', u'Playing time:'),
|
||||||
unicode(datetime.timedelta(seconds=length)))
|
unicode(datetime.timedelta(seconds=item.media_length)))
|
||||||
if self.customNoteEdit.toPlainText():
|
if self.customNoteEdit.toPlainText():
|
||||||
text += u'<h4>%s</h4>%s' % (translate('OpenLP.ServiceManager',
|
text += u'<h4>%s</h4>%s' % (translate('OpenLP.ServiceManager',
|
||||||
u'Custom Service Notes:'), self.customNoteEdit.toPlainText())
|
u'Custom Service Notes:'), self.customNoteEdit.toPlainText())
|
||||||
|
@ -32,6 +32,7 @@ from PyQt4 import QtCore, QtGui
|
|||||||
from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \
|
from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \
|
||||||
SettingsManager, translate, check_item_selected, Receiver
|
SettingsManager, translate, check_item_selected, Receiver
|
||||||
from openlp.core.lib.ui import UiStrings, critical_error_message_box
|
from openlp.core.lib.ui import UiStrings, critical_error_message_box
|
||||||
|
from PyQt4.phonon import Phonon
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -48,9 +49,13 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
u':/media/media_video.png').toImage()
|
u':/media/media_video.png').toImage()
|
||||||
MediaManagerItem.__init__(self, parent, self, icon)
|
MediaManagerItem.__init__(self, parent, self, icon)
|
||||||
self.singleServiceItem = False
|
self.singleServiceItem = False
|
||||||
|
self.mediaObject = Phonon.MediaObject(self)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'video_background_replaced'),
|
QtCore.SIGNAL(u'video_background_replaced'),
|
||||||
self.videobackgroundReplaced)
|
self.videobackgroundReplaced)
|
||||||
|
QtCore.QObject.connect(self.mediaObject,
|
||||||
|
QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'),
|
||||||
|
self.videoStart)
|
||||||
|
|
||||||
def retranslateUi(self):
|
def retranslateUi(self):
|
||||||
self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
|
self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
|
||||||
@ -120,6 +125,11 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
return False
|
return False
|
||||||
filename = unicode(item.data(QtCore.Qt.UserRole).toString())
|
filename = unicode(item.data(QtCore.Qt.UserRole).toString())
|
||||||
if os.path.exists(filename):
|
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(
|
service_item.title = unicode(
|
||||||
translate('MediaPlugin.MediaItem', 'Media'))
|
translate('MediaPlugin.MediaItem', 'Media'))
|
||||||
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
||||||
@ -128,6 +138,9 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
service_item.theme = -1
|
service_item.theme = -1
|
||||||
frame = u':/media/image_clapperboard.png'
|
frame = u':/media/image_clapperboard.png'
|
||||||
(path, name) = os.path.split(filename)
|
(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)
|
service_item.add_from_command(path, name, frame)
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@ -165,3 +178,12 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
item_name.setIcon(build_icon(img))
|
item_name.setIcon(build_icon(img))
|
||||||
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
|
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
|
||||||
self.listView.addItem(item_name)
|
self.listView.addItem(item_name)
|
||||||
|
|
||||||
|
def videoStart(self, newState, oldState):
|
||||||
|
"""
|
||||||
|
Start the video at a predetermined point.
|
||||||
|
"""
|
||||||
|
if newState == 2:
|
||||||
|
self.MediaState = newState
|
||||||
|
self.mediaLength = self.mediaObject.totalTime()/1000
|
||||||
|
self.mediaObject.stop()
|
||||||
|
Loading…
Reference in New Issue
Block a user