From ad7d78ff26a0c1f92af8d61b4f10ac4574e9d0da Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 20 Feb 2013 19:31:51 +0000 Subject: [PATCH] More cleanups --- openlp/core/lib/renderer.py | 2 +- openlp/core/ui/maindisplay.py | 156 ++++++++++----------- openlp/core/ui/media/webkitplayer.py | 12 +- openlp/core/ui/slidecontroller.py | 10 +- openlp/plugins/images/lib/mediaitem.py | 4 +- openlp/plugins/remotes/lib/httpserver.py | 60 ++++----- openlp/plugins/remotes/lib/remotetab.py | 164 +++++++++++------------ openlp/plugins/remotes/remoteplugin.py | 2 +- 8 files changed, 198 insertions(+), 212 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index d3c0b66d5..c8066ddaa 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -247,7 +247,7 @@ class Renderer(object): serviceItem.footer = footer serviceItem.render(True) if not self.force_page: - self.display.buildHtml(serviceItem) + self.display.build_html(serviceItem) raw_html = serviceItem.get_rendered_frame(0) self.display.text(raw_html, False) preview = self.display.preview() diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 661516e7d..b083e6523 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -85,37 +85,34 @@ class Display(QtGui.QGraphicsView): log.debug(u'Start Display base setup (live = %s)' % self.isLive) self.setGeometry(self.screen[u'size']) log.debug(u'Setup webView') - self.webView = QtWebKit.QWebView(self) - self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) - self.webView.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True) - palette = self.webView.palette() + self.web_view = QtWebKit.QWebView(self) + self.web_view.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) + self.web_view.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True) + palette = self.web_view.palette() palette.setBrush(QtGui.QPalette.Base, QtCore.Qt.transparent) - self.webView.page().setPalette(palette) - self.webView.setAttribute(QtCore.Qt.WA_OpaquePaintEvent, False) - self.page = self.webView.page() + self.web_view.page().setPalette(palette) + self.web_view.setAttribute(QtCore.Qt.WA_OpaquePaintEvent, False) + self.page = self.web_view.page() self.frame = self.page.mainFrame() if self.isLive and log.getEffectiveLevel() == logging.DEBUG: - self.webView.settings().setAttribute(QtWebKit.QWebSettings.DeveloperExtrasEnabled, True) - QtCore.QObject.connect(self.webView, - QtCore.SIGNAL(u'loadFinished(bool)'), self.isWebLoaded) + self.web_view.settings().setAttribute(QtWebKit.QWebSettings.DeveloperExtrasEnabled, True) + self.web_view.loadFinished.connect(self.is_web_loaded) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, - QtCore.Qt.ScrollBarAlwaysOff) - self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal, - QtCore.Qt.ScrollBarAlwaysOff) + self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) + self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff) def resizeEvent(self, event): """ React to resizing of this display """ - self.webView.setGeometry(0, 0, self.width(), self.height()) + self.web_view.setGeometry(0, 0, self.width(), self.height()) - def isWebLoaded(self): + def is_web_loaded(self): """ Called by webView event to show display is fully loaded """ - log.debug(u'Webloaded') + log.debug(u'is web loaded') self.webLoaded = True @@ -129,11 +126,11 @@ class MainDisplay(Display): """ Display.__init__(self, parent, live, controller) self.screens = ScreenList() - self.rebuildCSS = False - self.hideMode = None + self.rebuild_css = False + self.hide_mode = None self.override = {} self.retranslateUi() - self.mediaObject = None + self.media_object = None if live: self.audioPlayer = AudioPlayer(self) else: @@ -156,14 +153,14 @@ class MainDisplay(Display): self.setWindowState(QtCore.Qt.WindowFullScreen) self.setWindowFlags(windowFlags) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) - self.setTransparency(False) + self.set_transparency(False) if self.isLive: Registry().register_function(u'live_display_hide', self.hide_display) Registry().register_function(u'live_display_show', self.show_display) Registry().register_function(u'update_display_css', self.css_changed) Registry().register_function(u'config_updated', self.config_changed) - def setTransparency(self, enabled): + def set_transparency(self, enabled): """ Set the transparency of the window """ @@ -178,17 +175,17 @@ class MainDisplay(Display): """ We may need to rebuild the CSS on the live display. """ - self.rebuildCSS = True + self.rebuild_css = True def config_changed(self): """ Call the plugins to rebuild the Live display CSS as the screen has not been rebuild on exit of config. """ - if self.rebuildCSS and self.plugin_manager.plugins: + if self.rebuild_css and self.plugin_manager.plugins: for plugin in self.plugin_manager.plugins: plugin.refreshCss(self.frame) - self.rebuildCSS = False + self.rebuild_css = False def retranslateUi(self): """ @@ -225,7 +222,7 @@ class MainDisplay(Display): splash_image) serviceItem = ServiceItem() serviceItem.bg_image_bytes = image_to_byte(self.initialFrame) - self.webView.setHtml(build_html(serviceItem, self.screen, self.isLive, None, + self.web_view.setHtml(build_html(serviceItem, self.screen, self.isLive, None, plugins=self.plugin_manager.plugins)) self.__hideMouse() log.debug(u'Finished MainDisplay setup') @@ -288,7 +285,7 @@ class MainDisplay(Display): self.setVisible(False) self.setGeometry(self.screen[u'size']) - def directImage(self, path, background): + def direct_image(self, path, background): """ API for replacement backgrounds so Images are added directly to cache. """ @@ -318,7 +315,7 @@ class MainDisplay(Display): self.controller.media_controller.media_reset(self.controller) self.displayImage(image) - def displayImage(self, image): + def display_image(self, image): """ Display an image, as is. """ @@ -329,16 +326,16 @@ class MainDisplay(Display): js = u'show_image("");' self.frame.evaluateJavaScript(js) - def resetImage(self): + def reset_image(self): """ Reset the backgound image to the service item image. Used after the image plugin has changed the background. """ log.debug(u'resetImage') if hasattr(self, u'serviceItem'): - self.displayImage(self.serviceItem.bg_image_bytes) + self.display_image(self.serviceItem.bg_image_bytes) else: - self.displayImage(None) + self.display_image(None) # clear the cache self.override = {} @@ -361,8 +358,8 @@ class MainDisplay(Display): self.application.process_events() # if was hidden keep it hidden if self.isLive: - if self.hideMode: - self.hide_display(self.hideMode) + if self.hide_mode: + self.hide_display(self.hide_mode) else: # Single screen active if self.screens.display_count == 1: @@ -373,12 +370,12 @@ class MainDisplay(Display): self.setVisible(True) return QtGui.QPixmap.grabWidget(self) - def buildHtml(self, serviceItem, image_path=u''): + def build_html(self, serviceItem, image_path=u''): """ Store the serviceItem and build the new HTML from it. Add the HTML to the display """ - log.debug(u'buildHtml') + log.debug(u'build_html') self.webLoaded = False self.initialFrame = None self.serviceItem = serviceItem @@ -396,12 +393,11 @@ class MainDisplay(Display): else: # replace the background background = self.image_manager.get_image_bytes(self.override[u'image'], ImageSource.ImagePlugin) - self.setTransparency(self.serviceItem.themedata.background_type == - BackgroundType.to_string(BackgroundType.Transparent)) + self.set_transparency(self.serviceItem.themedata.background_type == + BackgroundType.to_string(BackgroundType.Transparent)) if self.serviceItem.themedata.background_filename: self.serviceItem.bg_image_bytes = self.image_manager.get_image_bytes( - self.serviceItem.themedata.background_filename, - ImageSource.Theme + self.serviceItem.themedata.background_filename, ImageSource.Theme ) if image_path: image_bytes = self.image_manager.get_image_bytes(image_path, ImageSource.ImagePlugin) @@ -410,16 +406,16 @@ class MainDisplay(Display): html = build_html(self.serviceItem, self.screen, self.isLive, background, image_bytes, plugins=self.plugin_manager.plugins) log.debug(u'buildHtml - pre setHtml') - self.webView.setHtml(html) + self.web_view.setHtml(html) log.debug(u'buildHtml - post setHtml') if serviceItem.foot_text: self.footer(serviceItem.foot_text) # if was hidden keep it hidden - if self.hideMode and self.isLive and not serviceItem.is_media(): + if self.hide_mode and self.isLive and not serviceItem.is_media(): if Settings().value(u'general/auto unblank'): Registry().execute(u'slidecontroller_live_unblank') else: - self.hide_display(self.hideMode) + self.hide_display(self.hide_mode) self.__hideMouse() def footer(self, text): @@ -450,13 +446,12 @@ class MainDisplay(Display): if mode != HideMode.Screen: if self.isHidden(): self.setVisible(True) - self.webView.setVisible(True) - self.hideMode = mode + self.web_view.setVisible(True) + self.hide_mode = mode def show_display(self): """ - Show the stored layers so the screen reappears as it was - originally. + Show the stored layers so the screen reappears as it was originally. Make the stored images None to release memory. """ log.debug(u'show_display') @@ -467,7 +462,7 @@ class MainDisplay(Display): self.frame.evaluateJavaScript('show_blank("show");') if self.isHidden(): self.setVisible(True) - self.hideMode = None + self.hide_mode = None # Trigger actions when display is active again. if self.isLive: Registry().execute(u'live_display_active') @@ -533,38 +528,38 @@ class AudioPlayer(QtCore.QObject): self.currentIndex = -1 self.playlist = [] self.repeat = False - self.mediaObject = Phonon.MediaObject() - self.mediaObject.setTickInterval(100) - self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) - Phonon.createPath(self.mediaObject, self.audioObject) - QtCore.QObject.connect(self.mediaObject, QtCore.SIGNAL(u'aboutToFinish()'), self.onAboutToFinish) - QtCore.QObject.connect(self.mediaObject, QtCore.SIGNAL(u'finished()'), self.onFinished) + self.media_object = Phonon.MediaObject() + self.media_object.setTickInterval(100) + self.audio_object = Phonon.AudioOutput(Phonon.VideoCategory) + Phonon.createPath(self.media_object, self.audio_object) + self.media_object.aboutToFinish.connect(self.on_about_to_finish) + self.media_object.finished.connect(self.on_finished) def __del__(self): """ Shutting down so clean up connections """ self.stop() - for path in self.mediaObject.outputPaths(): + for path in self.media_object.outputPaths(): path.disconnect() - def onAboutToFinish(self): + def on_about_to_finish(self): """ Just before the audio player finishes the current track, queue the next item in the playlist, if there is one. """ self.currentIndex += 1 if len(self.playlist) > self.currentIndex: - self.mediaObject.enqueue(self.playlist[self.currentIndex]) + self.media_object.enqueue(self.playlist[self.currentIndex]) - def onFinished(self): + def on_finished(self): """ When the audio track finishes. """ if self.repeat: log.debug(u'Repeat is enabled... here we go again!') - self.mediaObject.clearQueue() - self.mediaObject.clear() + self.media_object.clearQueue() + self.media_object.clear() self.currentIndex = -1 self.play() @@ -572,7 +567,7 @@ class AudioPlayer(QtCore.QObject): """ Connect the volume slider to the output channel. """ - slider.setAudioOutput(self.audioObject) + slider.setAudioOutput(self.audio_object) def reset(self): """ @@ -581,7 +576,7 @@ class AudioPlayer(QtCore.QObject): self.currentIndex = -1 self.playlist = [] self.stop() - self.mediaObject.clear() + self.media_object.clear() def play(self): """ @@ -589,24 +584,24 @@ class AudioPlayer(QtCore.QObject): """ log.debug(u'AudioPlayer.play() called') if self.currentIndex == -1: - self.onAboutToFinish() - self.mediaObject.play() + self.on_about_to_finish() + self.media_object.play() def pause(self): """ Pause the Audio """ log.debug(u'AudioPlayer.pause() called') - self.mediaObject.pause() + self.media_object.pause() def stop(self): """ Stop the Audio and clean up """ log.debug(u'AudioPlayer.stop() called') - self.mediaObject.stop() + self.media_object.stop() - def addToPlaylist(self, filenames): + def add_to_playlist(self, filenames): """ Add another file to the playlist. @@ -623,31 +618,24 @@ class AudioPlayer(QtCore.QObject): """ if not self.repeat and self.currentIndex + 1 >= len(self.playlist): return - isPlaying = self.mediaObject.state() == Phonon.PlayingState + isPlaying = self.media_object.state() == Phonon.PlayingState self.currentIndex += 1 if self.repeat and self.currentIndex == len(self.playlist): self.currentIndex = 0 - self.mediaObject.clearQueue() - self.mediaObject.clear() - self.mediaObject.enqueue(self.playlist[self.currentIndex]) + self.media_object.clearQueue() + self.media_object.clear() + self.media_object.enqueue(self.playlist[self.currentIndex]) if isPlaying: - self.mediaObject.play() + self.media_object.play() - def goTo(self, index): + def go_to(self, index): """ Go to a particular track in the list """ - isPlaying = self.mediaObject.state() == Phonon.PlayingState - self.mediaObject.clearQueue() - self.mediaObject.clear() + isPlaying = self.media_object.state() == Phonon.PlayingState + self.media_object.clearQueue() + self.media_object.clear() self.currentIndex = index - self.mediaObject.enqueue(self.playlist[self.currentIndex]) + self.media_object.enqueue(self.playlist[self.currentIndex]) if isPlaying: - self.mediaObject.play() - - #@todo is this used? - def connectSlot(self, signal, slot): - """ - Connect a slot to a signal on the media object - """ - QtCore.QObject.connect(self.mediaObject, signal, slot) + self.media_object.play() diff --git a/openlp/core/ui/media/webkitplayer.py b/openlp/core/ui/media/webkitplayer.py index 963e4e6f7..4898912f0 100644 --- a/openlp/core/ui/media/webkitplayer.py +++ b/openlp/core/ui/media/webkitplayer.py @@ -307,8 +307,8 @@ class WebkitPlayer(MediaPlayer): """ Set up the player """ - display.webView.resize(display.size()) - display.webView.raise_() + display.web_view.resize(display.size()) + display.web_view.raise_() self.hasOwnWidget = False def check_available(self): @@ -333,7 +333,7 @@ class WebkitPlayer(MediaPlayer): loop = u'true' else: loop = u'false' - display.webView.setVisible(True) + display.web_view.setVisible(True) if controller.media_info.file_info.suffix() == u'swf': controller.media_info.is_flash = True js = u'show_flash("load","%s");' % (path.replace(u'\\', u'\\\\')) @@ -346,14 +346,14 @@ class WebkitPlayer(MediaPlayer): """ Resize the player """ - display.webView.resize(display.size()) + display.web_view.resize(display.size()) def play(self, display): """ Play a video """ controller = display.controller - display.webLoaded = True + display.web_loaded = True length = 0 start_time = 0 if self.state != MediaState.Paused and controller.media_info.start_time > 0: @@ -368,7 +368,7 @@ class WebkitPlayer(MediaPlayer): # TODO add playing check and get the correct media length controller.media_info.length = length self.state = MediaState.Playing - display.webView.raise_() + display.web_view.raise_() return True def pause(self, display): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e3c42a2f9..87b3b6682 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -538,7 +538,7 @@ class SlideController(DisplayController): self.previewSizeChanged() self.previewDisplay.setup() serviceItem = ServiceItem() - self.previewDisplay.webView.setHtml(build_html(serviceItem, self.previewDisplay.screen, None, self.isLive, + self.previewDisplay.web_view.setHtml(build_html(serviceItem, self.previewDisplay.screen, None, self.isLive, plugins=self.plugin_manager.plugins)) self.media_controller.setup_display(self.previewDisplay, True) if self.serviceItem: @@ -760,7 +760,7 @@ class SlideController(DisplayController): # If the current item has background audio if self.serviceItem.is_capable(ItemCapabilities.HasBackgroundAudio): log.debug(u'Starting to play...') - self.display.audioPlayer.addToPlaylist(self.serviceItem.background_audio) + self.display.audioPlayer.add_to_playlist(self.serviceItem.background_audio) self.trackMenu.clear() for counter in range(len(self.serviceItem.background_audio)): action = self.trackMenu.addAction(os.path.basename(self.serviceItem.background_audio[counter])) @@ -831,7 +831,7 @@ class SlideController(DisplayController): # Postpone image build, we need to do this later to avoid the theme # flashing on the screen if not self.serviceItem.is_image(): - self.display.buildHtml(self.serviceItem) + self.display.build_html(self.serviceItem) if serviceItem.is_media(): self.onMediaStart(serviceItem) self.slideSelected(True) @@ -1025,7 +1025,7 @@ class SlideController(DisplayController): self.display.text(to_display) else: if start: - self.display.buildHtml(self.serviceItem, to_display) + self.display.build_html(self.serviceItem, to_display) else: self.display.image(to_display) # reset the store used to display first image @@ -1333,7 +1333,7 @@ class SlideController(DisplayController): Start playing a track """ action = self.sender() - self.display.audioPlayer.goTo(action.data()) + self.display.audioPlayer.go_to(action.data()) def _get_plugin_manager(self): """ diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 2280120c1..01bc87d7e 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -192,7 +192,7 @@ class ImageMediaItem(MediaManagerItem): Called to reset the Live background with the image selected, """ self.resetAction.setVisible(False) - self.live_controller.display.resetImage() + self.live_controller.display.reset_image() def live_theme_changed(self): """ @@ -211,7 +211,7 @@ class ImageMediaItem(MediaManagerItem): bitem = self.listView.item(item.row()) filename = bitem.data(QtCore.Qt.UserRole) if os.path.exists(filename): - if self.live_controller.display.directImage(filename, background): + if self.live_controller.display.direct_image(filename, background): self.resetAction.setVisible(True) else: critical_error_message_box(UiStrings().LiveBGError, diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 3b2c7439a..013025383 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -129,6 +129,7 @@ from openlp.core.utils import AppLocation, translate log = logging.getLogger(__name__) + class HttpResponse(object): """ A simple object to encapsulate a pseudo-http response. @@ -178,7 +179,7 @@ class HttpServer(object): self.server.listen(QtNetwork.QHostAddress(address), port) Registry().register_function(u'slidecontroller_live_changed', self.slide_change) Registry().register_function(u'slidecontroller_live_started', self.item_change) - QtCore.QObject.connect(self.server, QtCore.SIGNAL(u'newConnection()'), self.new_connection) + self.server.newConnection.connect(self.new_connection) log.debug(u'TCP listening on port %d' % port) def slide_change(self, row): @@ -245,8 +246,8 @@ class HttpConnection(object): (r'^/api/(.*)/live$', self.go_live), (r'^/api/(.*)/add$', self.add_to_service) ] - QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'readyRead()'), self.ready_read) - QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'disconnected()'), self.disconnected) + self.socket.readyRead.connect(self.ready_read) + self.socket.disconnected.connect(self.disconnected) self.translate() def _get_service_items(self): @@ -255,7 +256,7 @@ class HttpConnection(object): current_unique_identifier = self.parent.current_item.unique_identifier else: current_unique_identifier = None - for item in self.service_manager.serviceItems: + for item in self.service_manager.service_items: service_item = item[u'service_item'] service_items.append({ u'id': unicode(service_item.unique_identifier), @@ -389,13 +390,12 @@ class HttpConnection(object): u'service': self.service_manager.service_id, u'slide': self.parent.current_slide or 0, u'item': self.parent.current_item.unique_identifier if self.parent.current_item else u'', - u'twelve':Settings().value(u'remotes/twelve hour'), + u'twelve': Settings().value(u'remotes/twelve hour'), u'blank': self.live_controller.blankScreen.isChecked(), u'theme': self.live_controller.themeScreen.isChecked(), u'display': self.live_controller.desktopScreen.isChecked() } - return HttpResponse(json.dumps({u'results': result}), - {u'Content-Type': u'application/json'}) + return HttpResponse(json.dumps({u'results': result}), {u'Content-Type': u'application/json'}) def display(self, action): """ @@ -426,18 +426,17 @@ class HttpConnection(object): return HttpResponse(json.dumps({u'results': {u'success': success}}), {u'Content-Type': u'application/json'}) - def controller(self, type, action): + def controller(self, display_type, action): """ Perform an action on the slide controller. - ``type`` - This is the type of slide controller, either ``preview`` or - ``live``. + ``display_type`` + This is the type of slide controller, either ``preview`` or ``live``. ``action`` The action to perform. """ - event = u'slidecontroller_%s_%s' % (type, action) + event = u'slidecontroller_%s_%s' % (display_type, action) if action == u'text': current_item = self.parent.current_item data = [] @@ -473,10 +472,15 @@ class HttpConnection(object): else: Registry().execute(event) json_data = {u'results': {u'success': True}} - return HttpResponse(json.dumps(json_data), - {u'Content-Type': u'application/json'}) + return HttpResponse(json.dumps(json_data), {u'Content-Type': u'application/json'}) def service(self, action): + """ + Handles requests for service items + + ``action`` + The action to perform. + """ event = u'servicemanager_%s' % action if action == u'list': return HttpResponse(json.dumps({u'results': {u'items': self._get_service_items()}}), @@ -491,8 +495,7 @@ class HttpConnection(object): Registry().execute(event, data[u'request'][u'id']) else: Registry().execute(event) - return HttpResponse(json.dumps({u'results': {u'success': True}}), - {u'Content-Type': u'application/json'}) + return HttpResponse(json.dumps({u'results': {u'success': True}}), {u'Content-Type': u'application/json'}) def pluginInfo(self, action): """ @@ -507,15 +510,13 @@ class HttpConnection(object): for plugin in self.plugin_manager.plugins: if plugin.status == PluginStatus.Active and plugin.mediaItem and plugin.mediaItem.hasSearch: searches.append([plugin.name, unicode(plugin.textStrings[StringContent.Name][u'plural'])]) - return HttpResponse( - json.dumps({u'results': {u'items': searches}}), - {u'Content-Type': u'application/json'}) + return HttpResponse(json.dumps({u'results': {u'items': searches}}), {u'Content-Type': u'application/json'}) - def search(self, type): + def search(self, plugin_name): """ Return a list of items that match the search text. - ``type`` + ``plugin`` The plugin name to search in. """ try: @@ -523,36 +524,35 @@ class HttpConnection(object): except KeyError, ValueError: return HttpResponse(code=u'400 Bad Request') text = urllib.unquote(text) - plugin = self.plugin_manager.get_plugin_by_name(type) + plugin = self.plugin_manager.get_plugin_by_name(plugin_name) if plugin.status == PluginStatus.Active and plugin.mediaItem and plugin.mediaItem.hasSearch: results = plugin.mediaItem.search(text, False) else: results = [] - return HttpResponse(json.dumps({u'results': {u'items': results}}), - {u'Content-Type': u'application/json'}) + return HttpResponse(json.dumps({u'results': {u'items': results}}), {u'Content-Type': u'application/json'}) - def go_live(self, type): + def go_live(self, plugin_name): """ - Go live on an item of type ``type``. + Go live on an item of type ``plugin``. """ try: id = json.loads(self.url_params[u'data'][0])[u'request'][u'id'] except KeyError, ValueError: return HttpResponse(code=u'400 Bad Request') - plugin = self.plugin_manager.get_plugin_by_name(type) + plugin = self.plugin_manager.get_plugin_by_name(plugin_name) if plugin.status == PluginStatus.Active and plugin.mediaItem: plugin.mediaItem.goLive(id, remote=True) return HttpResponse(code=u'200 OK') - def add_to_service(self, type): + def add_to_service(self, plugin_name): """ - Add item of type ``type`` to the end of the service. + Add item of type ``plugin_name`` to the end of the service. """ try: id = json.loads(self.url_params[u'data'][0])[u'request'][u'id'] except KeyError, ValueError: return HttpResponse(code=u'400 Bad Request') - plugin = self.plugin_manager.get_plugin_by_name(type) + plugin = self.plugin_manager.get_plugin_by_name(plugin_name) if plugin.status == PluginStatus.Active and plugin.mediaItem: item_id = plugin.mediaItem.createItemFromId(id) plugin.mediaItem.addToService(item_id, remote=True) diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 38b8753ab..9ece309df 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -45,117 +45,115 @@ class RemoteTab(SettingsTab): def setupUi(self): self.setObjectName(u'RemoteTab') SettingsTab.setupUi(self) - self.serverSettingsGroupBox = QtGui.QGroupBox(self.leftColumn) - self.serverSettingsGroupBox.setObjectName(u'serverSettingsGroupBox') - self.serverSettingsLayout = QtGui.QFormLayout(self.serverSettingsGroupBox) - self.serverSettingsLayout.setObjectName(u'serverSettingsLayout') - self.addressLabel = QtGui.QLabel(self.serverSettingsGroupBox) - self.addressLabel.setObjectName(u'addressLabel') - self.addressEdit = QtGui.QLineEdit(self.serverSettingsGroupBox) - self.addressEdit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) - self.addressEdit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp( + self.server_settings_group_box = QtGui.QGroupBox(self.leftColumn) + self.server_settings_group_box.setObjectName(u'server_settings_group_box') + self.server_settings_layout = QtGui.QFormLayout(self.server_settings_group_box) + self.server_settings_layout.setObjectName(u'server_settings_layout') + self.address_label = QtGui.QLabel(self.server_settings_group_box) + self.address_label.setObjectName(u'address_label') + self.address_edit = QtGui.QLineEdit(self.server_settings_group_box) + self.address_edit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) + self.address_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp( u'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'), self)) - self.addressEdit.setObjectName(u'addressEdit') - QtCore.QObject.connect(self.addressEdit, QtCore.SIGNAL(u'textChanged(const QString&)'), self.setUrls) - self.serverSettingsLayout.addRow(self.addressLabel, self.addressEdit) - self.twelveHourCheckBox = QtGui.QCheckBox(self.serverSettingsGroupBox) - self.twelveHourCheckBox.setObjectName(u'twelveHourCheckBox') - self.serverSettingsLayout.addRow(self.twelveHourCheckBox) - self.portLabel = QtGui.QLabel(self.serverSettingsGroupBox) + self.address_edit.setObjectName(u'address_edit') + self.server_settings_layout.addRow(self.address_label, self.address_edit) + self.twelve_hour_check_box = QtGui.QCheckBox(self.server_settings_group_box) + self.twelve_hour_check_box.setObjectName(u'twelve_hour_check_box') + self.server_settings_layout.addRow(self.twelve_hour_check_box) + self.portLabel = QtGui.QLabel(self.server_settings_group_box) self.portLabel.setObjectName(u'portLabel') - self.portSpinBox = QtGui.QSpinBox(self.serverSettingsGroupBox) - self.portSpinBox.setMaximum(32767) - self.portSpinBox.setObjectName(u'portSpinBox') - QtCore.QObject.connect(self.portSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.setUrls) - self.serverSettingsLayout.addRow(self.portLabel, self.portSpinBox) - self.remoteUrlLabel = QtGui.QLabel(self.serverSettingsGroupBox) - self.remoteUrlLabel.setObjectName(u'remoteUrlLabel') - self.remoteUrl = QtGui.QLabel(self.serverSettingsGroupBox) - self.remoteUrl.setObjectName(u'remoteUrl') - self.remoteUrl.setOpenExternalLinks(True) - self.serverSettingsLayout.addRow(self.remoteUrlLabel, self.remoteUrl) - self.stageUrlLabel = QtGui.QLabel(self.serverSettingsGroupBox) - self.stageUrlLabel.setObjectName(u'stageUrlLabel') - self.stageUrl = QtGui.QLabel(self.serverSettingsGroupBox) - self.stageUrl.setObjectName(u'stageUrl') - self.stageUrl.setOpenExternalLinks(True) - self.serverSettingsLayout.addRow(self.stageUrlLabel, self.stageUrl) - self.leftLayout.addWidget(self.serverSettingsGroupBox) - self.androidAppGroupBox = QtGui.QGroupBox(self.rightColumn) - self.androidAppGroupBox.setObjectName(u'androidAppGroupBox') - self.rightLayout.addWidget(self.androidAppGroupBox) - self.qrLayout = QtGui.QVBoxLayout(self.androidAppGroupBox) - self.qrLayout.setObjectName(u'qrLayout') - self.qrCodeLabel = QtGui.QLabel(self.androidAppGroupBox) - self.qrCodeLabel.setPixmap(QtGui.QPixmap(u':/remotes/android_app_qr.png')) - self.qrCodeLabel.setAlignment(QtCore.Qt.AlignCenter) - self.qrCodeLabel.setObjectName(u'qrCodeLabel') - self.qrLayout.addWidget(self.qrCodeLabel) - self.qrDescriptionLabel = QtGui.QLabel(self.androidAppGroupBox) - self.qrDescriptionLabel.setObjectName(u'qrDescriptionLabel') - self.qrDescriptionLabel.setOpenExternalLinks(True) - self.qrDescriptionLabel.setWordWrap(True) - self.qrLayout.addWidget(self.qrDescriptionLabel) + self.port_spin_box = QtGui.QSpinBox(self.server_settings_group_box) + self.port_spin_box.setMaximum(32767) + self.port_spin_box.setObjectName(u'port_spin_box') + self.server_settings_layout.addRow(self.portLabel, self.port_spin_box) + self.remote_url_label = QtGui.QLabel(self.server_settings_group_box) + self.remote_url_label.setObjectName(u'remote_url_label') + self.remote_url = QtGui.QLabel(self.server_settings_group_box) + self.remote_url.setObjectName(u'remote_url') + self.remote_url.setOpenExternalLinks(True) + self.server_settings_layout.addRow(self.remote_url_label, self.remote_url) + self.stage_url_label = QtGui.QLabel(self.server_settings_group_box) + self.stage_url_label.setObjectName(u'stage_url_label') + self.stage_url = QtGui.QLabel(self.server_settings_group_box) + self.stage_url.setObjectName(u'stage_url') + self.stage_url.setOpenExternalLinks(True) + self.server_settings_layout.addRow(self.stage_url_label, self.stage_url) + self.leftLayout.addWidget(self.server_settings_group_box) + self.android_app_group_box = QtGui.QGroupBox(self.rightColumn) + self.android_app_group_box.setObjectName(u'android_app_group_box') + self.rightLayout.addWidget(self.android_app_group_box) + self.qr_layout = QtGui.QVBoxLayout(self.android_app_group_box) + self.qr_layout.setObjectName(u'qr_layout') + self.qr_code_label = QtGui.QLabel(self.android_app_group_box) + self.qr_code_label.setPixmap(QtGui.QPixmap(u':/remotes/android_app_qr.png')) + self.qr_code_label.setAlignment(QtCore.Qt.AlignCenter) + self.qr_code_label.setObjectName(u'qr_code_label') + self.qr_layout.addWidget(self.qr_code_label) + self.qr_description_label = QtGui.QLabel(self.android_app_group_box) + self.qr_description_label.setObjectName(u'qr_description_label') + self.qr_description_label.setOpenExternalLinks(True) + self.qr_description_label.setWordWrap(True) + self.qr_layout.addWidget(self.qr_description_label) self.leftLayout.addStretch() self.rightLayout.addStretch() - QtCore.QObject.connect(self.twelveHourCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onTwelveHourCheckBoxChanged) + self.twelve_hour_check_box.stateChanged.connect(self.onTwelveHourCheckBoxChanged) + self.address_edit.textChanged.connect(self.set_urls) + self.port_spin_box.valueChanged.connect(self.set_urls) def retranslateUi(self): - self.serverSettingsGroupBox.setTitle( - translate('RemotePlugin.RemoteTab', 'Server Settings')) - self.addressLabel.setText(translate('RemotePlugin.RemoteTab', 'Serve on IP address:')) + self.server_settings_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'Server Settings')) + self.address_label.setText(translate('RemotePlugin.RemoteTab', 'Serve on IP address:')) self.portLabel.setText(translate('RemotePlugin.RemoteTab', 'Port number:')) - self.remoteUrlLabel.setText(translate('RemotePlugin.RemoteTab', 'Remote URL:')) - self.stageUrlLabel.setText(translate('RemotePlugin.RemoteTab', 'Stage view URL:')) - self.twelveHourCheckBox.setText(translate('RemotePlugin.RemoteTab', 'Display stage time in 12h format')) - self.androidAppGroupBox.setTitle(translate('RemotePlugin.RemoteTab', 'Android App')) - self.qrDescriptionLabel.setText(translate('RemotePlugin.RemoteTab', + self.remote_url_label.setText(translate('RemotePlugin.RemoteTab', 'Remote URL:')) + self.stage_url_label.setText(translate('RemotePlugin.RemoteTab', 'Stage view URL:')) + self.twelve_hour_check_box.setText(translate('RemotePlugin.RemoteTab', 'Display stage time in 12h format')) + self.android_app_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'Android App')) + self.qr_description_label.setText(translate('RemotePlugin.RemoteTab', 'Scan the QR code or click download to install the ' 'Android app from Google Play.')) - def setUrls(self): + def set_urls(self): ipAddress = u'localhost' - if self.addressEdit.text() == ZERO_URL: - ifaces = QtNetwork.QNetworkInterface.allInterfaces() - for iface in ifaces: - if not iface.isValid(): + if self.address_edit.text() == ZERO_URL: + interfaces = QtNetwork.QNetworkInterface.allInterfaces() + for interface in interfaces: + if not interface.isValid(): continue - if not (iface.flags() & (QtNetwork.QNetworkInterface.IsUp | QtNetwork.QNetworkInterface.IsRunning)): + if not (interface.flags() & (QtNetwork.QNetworkInterface.IsUp | QtNetwork.QNetworkInterface.IsRunning)): continue - for addr in iface.addressEntries(): - ip = addr.ip() + for address in interface.addressEntries(): + ip = address.ip() if ip.protocol() == 0 and ip != QtNetwork.QHostAddress.LocalHost: ipAddress = ip break else: - ipAddress = self.addressEdit.text() - url = u'http://%s:%s/' % (ipAddress, self.portSpinBox.value()) - self.remoteUrl.setText(u'%s' % (url, url)) + ipAddress = self.address_edit.text() + url = u'http://%s:%s/' % (ipAddress, self.port_spin_box.value()) + self.remote_url.setText(u'%s' % (url, url)) url += u'stage' - self.stageUrl.setText(u'%s' % (url, url)) + self.stage_url.setText(u'%s' % (url, url)) def load(self): - self.portSpinBox.setValue(Settings().value(self.settingsSection + u'/port')) - self.addressEdit.setText(Settings().value(self.settingsSection + u'/ip address')) - self.twelveHour = Settings().value(self.settingsSection + u'/twelve hour') - self.twelveHourCheckBox.setChecked(self.twelveHour) - self.setUrls() + self.port_spin_box.setValue(Settings().value(self.settingsSection + u'/port')) + self.address_edit.setText(Settings().value(self.settingsSection + u'/ip address')) + self.twelve_hour = Settings().value(self.settingsSection + u'/twelve hour') + self.twelve_hour_check_box.setChecked(self.twelve_hour) + self.set_urls() def save(self): changed = False - if Settings().value(self.settingsSection + u'/ip address') != self.addressEdit.text() or \ - Settings().value(self.settingsSection + u'/port') != self.portSpinBox.value(): + if Settings().value(self.settingsSection + u'/ip address') != self.address_edit.text() or \ + Settings().value(self.settingsSection + u'/port') != self.port_spin_box.value(): changed = True - Settings().setValue(self.settingsSection + u'/port', self.portSpinBox.value()) - Settings().setValue(self.settingsSection + u'/ip address', self.addressEdit.text()) - Settings().setValue(self.settingsSection + u'/twelve hour', self.twelveHour) + Settings().setValue(self.settingsSection + u'/port', self.port_spin_box.value()) + Settings().setValue(self.settingsSection + u'/ip address', self.address_edit.text()) + Settings().setValue(self.settingsSection + u'/twelve hour', self.twelve_hour) if changed: Registry().register_function(u'remotes_config_updated') def onTwelveHourCheckBoxChanged(self, check_state): - self.twelveHour = False + self.twelve_hour = False # we have a set value convert to True/False if check_state == QtCore.Qt.Checked: - self.twelveHour = True + self.twelve_hour = True diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 9aff9b7a3..b31e53bb1 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -38,7 +38,7 @@ __default_settings__ = { u'remotes/twelve hour': True, u'remotes/port': 4316, u'remotes/ip address': u'0.0.0.0' - } +} class RemotesPlugin(Plugin):