forked from openlp/openlp
Head 1905
This commit is contained in:
commit
f3b487cc15
@ -58,15 +58,15 @@ class MediaController(object):
|
|||||||
QtCore.QObject.connect(self.timer,
|
QtCore.QObject.connect(self.timer,
|
||||||
QtCore.SIGNAL("timeout()"), self.video_state)
|
QtCore.SIGNAL("timeout()"), self.video_state)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'media_playback_play'), self.video_play)
|
QtCore.SIGNAL(u'playbackPlay'), self.video_play)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'media_playback_pause'), self.video_pause)
|
QtCore.SIGNAL(u'playbackPause'), self.video_pause)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'media_playback_stop'), self.video_stop)
|
QtCore.SIGNAL(u'playbackStop'), self.video_stop)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'seek_slider'), self.video_seek)
|
QtCore.SIGNAL(u'seekSlider'), self.video_seek)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'volume_slider'), self.video_volume)
|
QtCore.SIGNAL(u'volumeSlider'), self.video_volume)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'media_hide'), self.video_hide)
|
QtCore.SIGNAL(u'media_hide'), self.video_hide)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
@ -160,6 +160,11 @@ class MediaController(object):
|
|||||||
if self.curDisplayMediaPlayer[display] \
|
if self.curDisplayMediaPlayer[display] \
|
||||||
.state == MediaState.Playing:
|
.state == MediaState.Playing:
|
||||||
return
|
return
|
||||||
|
# no players are active anymore
|
||||||
|
for display in self.curDisplayMediaPlayer.keys():
|
||||||
|
if self.curDisplayMediaPlayer[display] \
|
||||||
|
.state != MediaState.Paused:
|
||||||
|
display.controller.seekSlider.setSliderPosition(0)
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
|
|
||||||
def get_media_display_css(self):
|
def get_media_display_css(self):
|
||||||
@ -451,6 +456,7 @@ class MediaController(object):
|
|||||||
display.frame.evaluateJavaScript(u'show_blank("black");')
|
display.frame.evaluateJavaScript(u'show_blank("black");')
|
||||||
self.curDisplayMediaPlayer[display].stop(display)
|
self.curDisplayMediaPlayer[display].stop(display)
|
||||||
self.curDisplayMediaPlayer[display].set_visible(display, False)
|
self.curDisplayMediaPlayer[display].set_visible(display, False)
|
||||||
|
controller.seekSlider.setSliderPosition(0)
|
||||||
|
|
||||||
def video_volume(self, msg):
|
def video_volume(self, msg):
|
||||||
"""
|
"""
|
||||||
|
@ -57,7 +57,7 @@ ADDITIONAL_EXT = {
|
|||||||
|
|
||||||
class PhononPlayer(MediaPlayer):
|
class PhononPlayer(MediaPlayer):
|
||||||
"""
|
"""
|
||||||
A specialised version of the MediaPlayer class, which provides a Phonon
|
A specialised version of the MediaPlayer class, which provides a Phonon
|
||||||
display.
|
display.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -192,6 +192,9 @@ class PhononPlayer(MediaPlayer):
|
|||||||
display.phononWidget.setVisible(status)
|
display.phononWidget.setVisible(status)
|
||||||
|
|
||||||
def update_ui(self, display):
|
def update_ui(self, display):
|
||||||
|
if display.mediaObject.state() == Phonon.PausedState and \
|
||||||
|
self.state != MediaState.Paused:
|
||||||
|
self.stop(display)
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
if controller.media_info.end_time > 0:
|
if controller.media_info.end_time > 0:
|
||||||
if display.mediaObject.currentTime() > \
|
if display.mediaObject.currentTime() > \
|
||||||
|
@ -83,7 +83,7 @@ VIDEO_EXT = [
|
|||||||
|
|
||||||
class VlcPlayer(MediaPlayer):
|
class VlcPlayer(MediaPlayer):
|
||||||
"""
|
"""
|
||||||
A specialised version of the MediaPlayer class, which provides a QtWebKit
|
A specialised version of the MediaPlayer class, which provides a VLC
|
||||||
display.
|
display.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ class VlcPlayer(MediaPlayer):
|
|||||||
display.vlcMediaPlayer.set_hwnd(int(display.vlcWidget.winId()))
|
display.vlcMediaPlayer.set_hwnd(int(display.vlcWidget.winId()))
|
||||||
elif sys.platform == "darwin": # for MacOS
|
elif sys.platform == "darwin": # for MacOS
|
||||||
display.vlcMediaPlayer.set_agl(int(display.vlcWidget.winId()))
|
display.vlcMediaPlayer.set_agl(int(display.vlcWidget.winId()))
|
||||||
else:
|
else:
|
||||||
# for Linux using the X Server
|
# for Linux using the X Server
|
||||||
display.vlcMediaPlayer.set_xwindow(int(display.vlcWidget.winId()))
|
display.vlcMediaPlayer.set_xwindow(int(display.vlcWidget.winId()))
|
||||||
self.hasOwnWidget = True
|
self.hasOwnWidget = True
|
||||||
@ -210,6 +210,8 @@ class VlcPlayer(MediaPlayer):
|
|||||||
display.vlcWidget.setVisible(status)
|
display.vlcWidget.setVisible(status)
|
||||||
|
|
||||||
def update_ui(self, display):
|
def update_ui(self, display):
|
||||||
|
if display.vlcMedia.get_state() == vlc.State.Ended:
|
||||||
|
self.stop(display)
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
if controller.media_info.end_time > 0:
|
if controller.media_info.end_time > 0:
|
||||||
if display.vlcMediaPlayer.get_time() > \
|
if display.vlcMediaPlayer.get_time() > \
|
||||||
|
@ -126,7 +126,7 @@ VIDEO_JS = u"""
|
|||||||
vid.src = '';
|
vid.src = '';
|
||||||
vid2.src = '';
|
vid2.src = '';
|
||||||
break;
|
break;
|
||||||
case 'length':
|
case 'length':
|
||||||
return vid.duration;
|
return vid.duration;
|
||||||
case 'currentTime':
|
case 'currentTime':
|
||||||
return vid.currentTime;
|
return vid.currentTime;
|
||||||
@ -134,6 +134,8 @@ VIDEO_JS = u"""
|
|||||||
// doesnt work currently
|
// doesnt work currently
|
||||||
vid.currentTime = varVal;
|
vid.currentTime = varVal;
|
||||||
break;
|
break;
|
||||||
|
case 'isEnded':
|
||||||
|
return vid.ended;
|
||||||
case 'setVisible':
|
case 'setVisible':
|
||||||
vid.style.visibility = varVal;
|
vid.style.visibility = varVal;
|
||||||
break;
|
break;
|
||||||
@ -211,6 +213,8 @@ FLASH_JS = u"""
|
|||||||
case 'seek':
|
case 'seek':
|
||||||
// flashMovie.GotoFrame(varVal);
|
// flashMovie.GotoFrame(varVal);
|
||||||
break;
|
break;
|
||||||
|
case 'isEnded':
|
||||||
|
return false;//TODO check flash end
|
||||||
case 'setVisible':
|
case 'setVisible':
|
||||||
text.style.visibility = varVal;
|
text.style.visibility = varVal;
|
||||||
break;
|
break;
|
||||||
@ -254,7 +258,7 @@ AUDIO_EXT = [
|
|||||||
|
|
||||||
class WebkitPlayer(MediaPlayer):
|
class WebkitPlayer(MediaPlayer):
|
||||||
"""
|
"""
|
||||||
A specialised version of the MediaPlayer class, which provides a QtWebKit
|
A specialised version of the MediaPlayer class, which provides a QtWebKit
|
||||||
display.
|
display.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -356,7 +360,6 @@ class WebkitPlayer(MediaPlayer):
|
|||||||
display.frame.evaluateJavaScript(u'show_flash("stop");')
|
display.frame.evaluateJavaScript(u'show_flash("stop");')
|
||||||
else:
|
else:
|
||||||
display.frame.evaluateJavaScript(u'show_video("stop");')
|
display.frame.evaluateJavaScript(u'show_video("stop");')
|
||||||
controller.seekSlider.setSliderPosition(0)
|
|
||||||
self.state = MediaState.Stopped
|
self.state = MediaState.Stopped
|
||||||
|
|
||||||
def volume(self, display, vol):
|
def volume(self, display, vol):
|
||||||
@ -408,6 +411,9 @@ class WebkitPlayer(MediaPlayer):
|
|||||||
length = display.frame.evaluateJavaScript( \
|
length = display.frame.evaluateJavaScript( \
|
||||||
u'show_flash("length");').toInt()[0]
|
u'show_flash("length");').toInt()[0]
|
||||||
else:
|
else:
|
||||||
|
if display.frame.evaluateJavaScript( \
|
||||||
|
u'show_video("isEnded");').toString() == 'true':
|
||||||
|
self.stop(display)
|
||||||
(currentTime, ok) = display.frame.evaluateJavaScript( \
|
(currentTime, ok) = display.frame.evaluateJavaScript( \
|
||||||
u'show_video("currentTime");').toFloat()
|
u'show_video("currentTime");').toFloat()
|
||||||
# check if conversion was ok and value is not 'NaN'
|
# check if conversion was ok and value is not 'NaN'
|
||||||
|
@ -186,7 +186,7 @@ class SlideController(Controller):
|
|||||||
tooltip=translate('OpenLP.SlideController', 'Move to next.'),
|
tooltip=translate('OpenLP.SlideController', 'Move to next.'),
|
||||||
shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown],
|
shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown],
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
||||||
category=self.category, triggers=self.onSlideSelectedNext)
|
category=self.category, triggers=self.onSlideSelectedNextAction)
|
||||||
self.toolbar.addAction(self.nextItem)
|
self.toolbar.addAction(self.nextItem)
|
||||||
self.toolbar.addSeparator()
|
self.toolbar.addSeparator()
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
@ -1139,6 +1139,13 @@ class SlideController(Controller):
|
|||||||
rect.y(), rect.width(), rect.height())
|
rect.y(), rect.width(), rect.height())
|
||||||
self.slidePreview.setPixmap(winimg)
|
self.slidePreview.setPixmap(winimg)
|
||||||
|
|
||||||
|
def onSlideSelectedNextAction(self, checked):
|
||||||
|
"""
|
||||||
|
Wrapper function from create_action so we can throw away the
|
||||||
|
incorrect parameter
|
||||||
|
"""
|
||||||
|
self.onSlideSelectedNext()
|
||||||
|
|
||||||
def onSlideSelectedNext(self, wrap=None):
|
def onSlideSelectedNext(self, wrap=None):
|
||||||
"""
|
"""
|
||||||
Go to the next slide.
|
Go to the next slide.
|
||||||
|
@ -159,6 +159,12 @@ class CCLIFileImport(SongImport):
|
|||||||
song_author = u''
|
song_author = u''
|
||||||
song_topics = u''
|
song_topics = u''
|
||||||
for line in textList:
|
for line in textList:
|
||||||
|
if line.startswith(u'[S '):
|
||||||
|
ccli, line = line.split(u']', 1)
|
||||||
|
if ccli.startswith(u'[S A'):
|
||||||
|
self.ccliNumber = ccli[4:].strip()
|
||||||
|
else:
|
||||||
|
self.ccliNumber = ccli[3:].strip()
|
||||||
if line.startswith(u'Title='):
|
if line.startswith(u'Title='):
|
||||||
self.title = line[6:].strip()
|
self.title = line[6:].strip()
|
||||||
elif line.startswith(u'Author='):
|
elif line.startswith(u'Author='):
|
||||||
@ -166,9 +172,7 @@ class CCLIFileImport(SongImport):
|
|||||||
elif line.startswith(u'Copyright='):
|
elif line.startswith(u'Copyright='):
|
||||||
self.copyright = line[10:].strip()
|
self.copyright = line[10:].strip()
|
||||||
elif line.startswith(u'Themes='):
|
elif line.startswith(u'Themes='):
|
||||||
song_topics = line[7:].strip()
|
song_topics = line[7:].strip().replace(u' | ', u'/t')
|
||||||
elif line.startswith(u'[S A'):
|
|
||||||
self.ccliNumber = line[4:-3].strip()
|
|
||||||
elif line.startswith(u'Fields='):
|
elif line.startswith(u'Fields='):
|
||||||
# Fields contain single line indicating verse, chorus, etc,
|
# Fields contain single line indicating verse, chorus, etc,
|
||||||
# /t delimited, same as with words field. store seperately
|
# /t delimited, same as with words field. store seperately
|
||||||
@ -193,6 +197,7 @@ class CCLIFileImport(SongImport):
|
|||||||
check_first_verse_line = True
|
check_first_verse_line = True
|
||||||
verse_text = unicode(words_list[counter])
|
verse_text = unicode(words_list[counter])
|
||||||
verse_text = verse_text.replace(u'/n', u'\n')
|
verse_text = verse_text.replace(u'/n', u'\n')
|
||||||
|
verse_text = verse_text.replace(u' | ', u'\n')
|
||||||
verse_lines = verse_text.split(u'\n', 1)
|
verse_lines = verse_text.split(u'\n', 1)
|
||||||
if check_first_verse_line:
|
if check_first_verse_line:
|
||||||
if verse_lines[0].startswith(u'(PRE-CHORUS'):
|
if verse_lines[0].startswith(u'(PRE-CHORUS'):
|
||||||
@ -243,7 +248,7 @@ class CCLIFileImport(SongImport):
|
|||||||
<Empty line>
|
<Empty line>
|
||||||
Song CCLI number
|
Song CCLI number
|
||||||
# e.g. CCLI Number (e.g.CCLI-Liednummer: 2672885)
|
# e.g. CCLI Number (e.g.CCLI-Liednummer: 2672885)
|
||||||
Song copyright
|
Song copyright (if it begins ©, otherwise after authors)
|
||||||
# e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing
|
# e.g. © 1999 Integrity's Hosanna! Music | LenSongs Publishing
|
||||||
Song authors # e.g. Lenny LeBlanc | Paul Baloche
|
Song authors # e.g. Lenny LeBlanc | Paul Baloche
|
||||||
Licencing info
|
Licencing info
|
||||||
@ -322,11 +327,17 @@ class CCLIFileImport(SongImport):
|
|||||||
#line_number=2, copyright
|
#line_number=2, copyright
|
||||||
if line_number == 2:
|
if line_number == 2:
|
||||||
line_number += 1
|
line_number += 1
|
||||||
self.copyright = clean_line
|
if clean_line.startswith(u'©'):
|
||||||
|
self.copyright = clean_line
|
||||||
|
else:
|
||||||
|
song_author = clean_line
|
||||||
#n=3, authors
|
#n=3, authors
|
||||||
elif line_number == 3:
|
elif line_number == 3:
|
||||||
line_number += 1
|
line_number += 1
|
||||||
song_author = clean_line
|
if song_author:
|
||||||
|
self.copyright = clean_line
|
||||||
|
else:
|
||||||
|
song_author = clean_line
|
||||||
#line_number=4, comments lines before last line
|
#line_number=4, comments lines before last line
|
||||||
elif line_number == 4 and not clean_line.startswith(u'CCL'):
|
elif line_number == 4 and not clean_line.startswith(u'CCL'):
|
||||||
self.comments += clean_line
|
self.comments += clean_line
|
||||||
|
Loading…
Reference in New Issue
Block a user