forked from openlp/openlp
Api improvements
This commit is contained in:
parent
b85245465e
commit
da01b2a8f2
@ -18,7 +18,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License #
|
# You should have received a copy of the GNU General Public License #
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
import logging
|
||||||
from openlp.core.api.lib import login_required
|
from openlp.core.api.lib import login_required
|
||||||
|
|
||||||
from flask import jsonify, request, abort, Blueprint
|
from flask import jsonify, request, abort, Blueprint
|
||||||
@ -27,6 +27,7 @@ from openlp.core.common.registry import Registry
|
|||||||
|
|
||||||
|
|
||||||
service_views = Blueprint('service', __name__)
|
service_views = Blueprint('service', __name__)
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@service_views.route('/items')
|
@service_views.route('/items')
|
||||||
@ -59,24 +60,44 @@ def service_items():
|
|||||||
def service_set():
|
def service_set():
|
||||||
data = request.json
|
data = request.json
|
||||||
if not data:
|
if not data:
|
||||||
|
log.error('Missing request data')
|
||||||
abort(400)
|
abort(400)
|
||||||
try:
|
try:
|
||||||
id = int(data.get('id', -1))
|
id = int(data.get('id', -1))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
log.error('Invalid data passed ' + data)
|
||||||
abort(400)
|
abort(400)
|
||||||
Registry().get('service_manager').servicemanager_set_item.emit(id)
|
Registry().get('service_manager').servicemanager_set_item.emit(id)
|
||||||
return '', 204
|
return '', 204
|
||||||
|
|
||||||
|
|
||||||
|
@service_views.route('/show_id', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def service_set_by_uid():
|
||||||
|
data = request.json
|
||||||
|
if not data:
|
||||||
|
log.error('Missing request data')
|
||||||
|
abort(400)
|
||||||
|
try:
|
||||||
|
id = str(data.get('uid', ''))
|
||||||
|
except ValueError:
|
||||||
|
log.error('Invalid data passed ' + data)
|
||||||
|
abort(400)
|
||||||
|
Registry().get('service_manager').servicemanager_set_item_by_uuid.emit(id)
|
||||||
|
return '', 204
|
||||||
|
|
||||||
|
|
||||||
@service_views.route('/progress', methods=['POST'])
|
@service_views.route('/progress', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def service_direction():
|
def service_direction():
|
||||||
ALLOWED_ACTIONS = ['next', 'previous']
|
ALLOWED_ACTIONS = ['next', 'previous']
|
||||||
data = request.json
|
data = request.json
|
||||||
if not data:
|
if not data:
|
||||||
|
log.error('Missing request data')
|
||||||
abort(400)
|
abort(400)
|
||||||
action = data.get('action', '').lower()
|
action = data.get('action', '').lower()
|
||||||
if action not in ALLOWED_ACTIONS:
|
if action not in ALLOWED_ACTIONS:
|
||||||
|
log.error('Invalid data passed ' + str(data))
|
||||||
abort(400)
|
abort(400)
|
||||||
getattr(Registry().get('service_manager'), 'servicemanager_{action}_item'.format(action=action)).emit()
|
getattr(Registry().get('service_manager'), 'servicemanager_{action}_item'.format(action=action)).emit()
|
||||||
return '', 204
|
return '', 204
|
||||||
|
@ -155,7 +155,6 @@ class PluginManager(RegistryBase, LogMixin, RegistryProperties):
|
|||||||
Loop through all the plugins and give them an opportunity to initialise themselves.
|
Loop through all the plugins and give them an opportunity to initialise themselves.
|
||||||
"""
|
"""
|
||||||
uninitialised_plugins = []
|
uninitialised_plugins = []
|
||||||
|
|
||||||
for plugin in State().list_plugins():
|
for plugin in State().list_plugins():
|
||||||
if plugin:
|
if plugin:
|
||||||
self.log_info('initialising plugins {plugin} in a {state} state'.format(plugin=plugin.name,
|
self.log_info('initialising plugins {plugin} in a {state} state'.format(plugin=plugin.name,
|
||||||
@ -168,7 +167,6 @@ class PluginManager(RegistryBase, LogMixin, RegistryProperties):
|
|||||||
uninitialised_plugins.append(plugin.name.title())
|
uninitialised_plugins.append(plugin.name.title())
|
||||||
self.log_exception('Unable to initialise plugin {plugin}'.format(plugin=plugin.name))
|
self.log_exception('Unable to initialise plugin {plugin}'.format(plugin=plugin.name))
|
||||||
display_text = ''
|
display_text = ''
|
||||||
|
|
||||||
if uninitialised_plugins:
|
if uninitialised_plugins:
|
||||||
display_text = translate('OpenLP.PluginManager', 'Unable to initialise the following plugins:') + \
|
display_text = translate('OpenLP.PluginManager', 'Unable to initialise the following plugins:') + \
|
||||||
'\n\n'.join(uninitialised_plugins) + '\n\n'
|
'\n\n'.join(uninitialised_plugins) + '\n\n'
|
||||||
|
@ -313,6 +313,7 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||||||
Also handles the UI tasks of moving things up and down etc.
|
Also handles the UI tasks of moving things up and down etc.
|
||||||
"""
|
"""
|
||||||
servicemanager_set_item = QtCore.pyqtSignal(int)
|
servicemanager_set_item = QtCore.pyqtSignal(int)
|
||||||
|
servicemanager_set_item_by_uuid = QtCore.pyqtSignal(str)
|
||||||
servicemanager_next_item = QtCore.pyqtSignal()
|
servicemanager_next_item = QtCore.pyqtSignal()
|
||||||
servicemanager_previous_item = QtCore.pyqtSignal()
|
servicemanager_previous_item = QtCore.pyqtSignal()
|
||||||
|
|
||||||
@ -339,6 +340,7 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||||||
self.setup_ui(self)
|
self.setup_ui(self)
|
||||||
# Need to use event as called across threads and UI is updated
|
# Need to use event as called across threads and UI is updated
|
||||||
self.servicemanager_set_item.connect(self.on_set_item)
|
self.servicemanager_set_item.connect(self.on_set_item)
|
||||||
|
self.servicemanager_set_item_by_uuid.connect(self.set_item_by_uuid)
|
||||||
self.servicemanager_next_item.connect(self.next_item)
|
self.servicemanager_next_item.connect(self.next_item)
|
||||||
self.servicemanager_previous_item.connect(self.previous_item)
|
self.servicemanager_previous_item.connect(self.previous_item)
|
||||||
|
|
||||||
@ -1028,6 +1030,21 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||||||
self.service_manager_list.setCurrentItem(item)
|
self.service_manager_list.setCurrentItem(item)
|
||||||
self.make_live()
|
self.make_live()
|
||||||
|
|
||||||
|
def set_item_by_uuid(self, unique_identifier):
|
||||||
|
"""
|
||||||
|
Makes a specific item in the service live. Called directly by the API layer
|
||||||
|
|
||||||
|
:param unique_identifier: Unique Identifier for the item.
|
||||||
|
"""
|
||||||
|
row = 0
|
||||||
|
for sitem in self.service_items:
|
||||||
|
if sitem['service_item'].unique_identifier == unique_identifier:
|
||||||
|
item = self.service_manager_list.topLevelItem(sitem['order'] - 1)
|
||||||
|
self.service_manager_list.setCurrentItem(item)
|
||||||
|
self.make_live(row)
|
||||||
|
return
|
||||||
|
row += 1
|
||||||
|
|
||||||
def on_move_selection_up(self):
|
def on_move_selection_up(self):
|
||||||
"""
|
"""
|
||||||
Moves the cursor selection up the window. Called by the up arrow.
|
Moves the cursor selection up the window. Called by the up arrow.
|
||||||
|
@ -410,12 +410,7 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||||||
self.seek_slider.valueChanged.connect(self.send_to_plugins)
|
self.seek_slider.valueChanged.connect(self.send_to_plugins)
|
||||||
self.volume_slider.valueChanged.connect(self.send_to_plugins)
|
self.volume_slider.valueChanged.connect(self.send_to_plugins)
|
||||||
if self.is_live:
|
if self.is_live:
|
||||||
# Build the Song Toolbar
|
self.new_song_menu()
|
||||||
self.song_menu = QtWidgets.QToolButton(self.toolbar)
|
|
||||||
self.song_menu.setObjectName('song_menu')
|
|
||||||
self.song_menu.setText(translate('OpenLP.SlideController', 'Go To'))
|
|
||||||
self.song_menu.setPopupMode(QtWidgets.QToolButton.InstantPopup)
|
|
||||||
self.song_menu.setMenu(QtWidgets.QMenu(translate('OpenLP.SlideController', 'Go To'), self.toolbar))
|
|
||||||
self.toolbar.add_toolbar_widget(self.song_menu)
|
self.toolbar.add_toolbar_widget(self.song_menu)
|
||||||
self.toolbar.set_widget_visible('song_menu', False)
|
self.toolbar.set_widget_visible('song_menu', False)
|
||||||
# Screen preview area
|
# Screen preview area
|
||||||
@ -495,6 +490,17 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||||||
self.mediacontroller_live_pause.connect(self.media_controller.on_media_pause)
|
self.mediacontroller_live_pause.connect(self.media_controller.on_media_pause)
|
||||||
self.mediacontroller_live_stop.connect(self.media_controller.on_media_stop)
|
self.mediacontroller_live_stop.connect(self.media_controller.on_media_stop)
|
||||||
|
|
||||||
|
def new_song_menu(self):
|
||||||
|
"""
|
||||||
|
Rebuild the song menu object from scratch.
|
||||||
|
"""
|
||||||
|
# Build the Song Toolbar
|
||||||
|
self.song_menu = QtWidgets.QToolButton(self.toolbar)
|
||||||
|
self.song_menu.setObjectName('song_menu')
|
||||||
|
self.song_menu.setText(translate('OpenLP.SlideController', 'Go To'))
|
||||||
|
self.song_menu.setPopupMode(QtWidgets.QToolButton.InstantPopup)
|
||||||
|
self.song_menu.setMenu(QtWidgets.QMenu(translate('OpenLP.SlideController', 'Go To'), self.toolbar))
|
||||||
|
|
||||||
def _slide_shortcut_activated(self):
|
def _slide_shortcut_activated(self):
|
||||||
"""
|
"""
|
||||||
Called, when a shortcut has been activated to jump to a chorus, verse, etc.
|
Called, when a shortcut has been activated to jump to a chorus, verse, etc.
|
||||||
@ -891,6 +897,11 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||||||
self.preview_display.show()
|
self.preview_display.show()
|
||||||
for display in self.displays:
|
for display in self.displays:
|
||||||
display.load_verses(service_item.rendered_slides)
|
display.load_verses(service_item.rendered_slides)
|
||||||
|
# Replace the song menu so the verses match the song and are not cumulative
|
||||||
|
if self.is_live:
|
||||||
|
self.toolbar.remove_widget('song_menu')
|
||||||
|
self.new_song_menu()
|
||||||
|
self.toolbar.add_toolbar_widget(self.song_menu)
|
||||||
for slide_index, slide in enumerate(self.service_item.display_slides):
|
for slide_index, slide in enumerate(self.service_item.display_slides):
|
||||||
if not slide['verse'].isdigit():
|
if not slide['verse'].isdigit():
|
||||||
# These tags are already translated.
|
# These tags are already translated.
|
||||||
|
@ -94,3 +94,15 @@ class OpenLPToolbar(QtWidgets.QToolBar):
|
|||||||
self.actions[handle].setEnabled(enabled)
|
self.actions[handle].setEnabled(enabled)
|
||||||
else:
|
else:
|
||||||
log.warning('No handle "%s" in actions list.', str(handle))
|
log.warning('No handle "%s" in actions list.', str(handle))
|
||||||
|
|
||||||
|
def remove_widget(self, name):
|
||||||
|
"""
|
||||||
|
Find and remove an action from the toolbar
|
||||||
|
:param name: The name of the action to me removed
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
act = self.actions[name]
|
||||||
|
self.removeAction(act)
|
||||||
|
except KeyError:
|
||||||
|
log.warning(f'No handle {name} in actions list.')
|
||||||
|
Loading…
Reference in New Issue
Block a user