forked from openlp/openlp
Merge upstream
This commit is contained in:
commit
591ed15ab7
@ -24,6 +24,7 @@ The :mod:`common` module contains most of the components and libraries that make
|
||||
OpenLP work.
|
||||
"""
|
||||
import hashlib
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
@ -31,6 +32,7 @@ import sys
|
||||
import traceback
|
||||
from ipaddress import IPv4Address, IPv6Address, AddressValueError
|
||||
from shutil import which
|
||||
from subprocess import check_output, CalledProcessError, STDOUT
|
||||
|
||||
from PyQt5 import QtCore, QtGui
|
||||
from PyQt5.QtCore import QCryptographicHash as QHash
|
||||
@ -250,6 +252,9 @@ from .applocation import AppLocation
|
||||
from .actions import ActionList
|
||||
from .languagemanager import LanguageManager
|
||||
|
||||
if is_win():
|
||||
from subprocess import STARTUPINFO, STARTF_USESHOWWINDOW
|
||||
|
||||
|
||||
def add_actions(target, actions):
|
||||
"""
|
||||
@ -376,3 +381,28 @@ def clean_filename(filename):
|
||||
if not isinstance(filename, str):
|
||||
filename = str(filename, 'utf-8')
|
||||
return INVALID_FILE_CHARS.sub('_', CONTROL_CHARS.sub('', filename))
|
||||
|
||||
|
||||
def check_binary_exists(program_path):
|
||||
"""
|
||||
Function that checks whether a binary exists.
|
||||
|
||||
:param program_path:The full path to the binary to check.
|
||||
:return: program output to be parsed
|
||||
"""
|
||||
log.debug('testing program_path: %s', program_path)
|
||||
try:
|
||||
# Setup startupinfo options for check_output to avoid console popping up on windows
|
||||
if is_win():
|
||||
startupinfo = STARTUPINFO()
|
||||
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
|
||||
else:
|
||||
startupinfo = None
|
||||
runlog = check_output([program_path, '--help'], stderr=STDOUT, startupinfo=startupinfo)
|
||||
except CalledProcessError as e:
|
||||
runlog = e.output
|
||||
except Exception:
|
||||
trace_error_handler(log)
|
||||
runlog = ''
|
||||
log.debug('check_output returned: %s' % runlog)
|
||||
return runlog
|
||||
|
@ -314,12 +314,9 @@ def create_separated_list(string_list):
|
||||
return translate('OpenLP.core.lib', '%s, %s', 'Locale list separator: start') % (string_list[0], merged)
|
||||
|
||||
|
||||
from .colorbutton import ColorButton
|
||||
from .exceptions import ValidationError
|
||||
from .filedialog import FileDialog
|
||||
from .screen import ScreenList
|
||||
from .listwidgetwithdnd import ListWidgetWithDnD
|
||||
from .treewidgetwithdnd import TreeWidgetWithDnD
|
||||
from .formattingtags import FormattingTags
|
||||
from .spelltextedit import SpellTextEdit
|
||||
from .plugin import PluginStatus, StringContent, Plugin
|
||||
@ -327,8 +324,6 @@ from .pluginmanager import PluginManager
|
||||
from .settingstab import SettingsTab
|
||||
from .serviceitem import ServiceItem, ServiceItemType, ItemCapabilities
|
||||
from .htmlbuilder import build_html, build_lyrics_format_css, build_lyrics_outline_css
|
||||
from .toolbar import OpenLPToolbar
|
||||
from .dockwidget import OpenLPDockWidget
|
||||
from .imagemanager import ImageManager
|
||||
from .renderer import Renderer
|
||||
from .mediamanageritem import MediaManagerItem
|
||||
|
@ -29,10 +29,11 @@ import re
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, RegistryProperties, Settings, UiStrings, translate
|
||||
from openlp.core.lib import FileDialog, OpenLPToolbar, ServiceItem, StringContent, ListWidgetWithDnD, \
|
||||
ServiceItemContext
|
||||
from openlp.core.lib import FileDialog, ServiceItem, StringContent, ServiceItemContext
|
||||
from openlp.core.lib.searchedit import SearchEdit
|
||||
from openlp.core.lib.ui import create_widget_action, critical_error_message_box
|
||||
from openlp.core.ui.lib.listwidgetwithdnd import ListWidgetWithDnD
|
||||
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -113,7 +113,6 @@ from .settingsform import SettingsForm
|
||||
from .formattingtagform import FormattingTagForm
|
||||
from .formattingtagcontroller import FormattingTagController
|
||||
from .shortcutlistform import ShortcutListForm
|
||||
from .mediadockmanager import MediaDockManager
|
||||
from .servicemanager import ServiceManager
|
||||
from .thememanager import ThemeManager
|
||||
from .projector.manager import ProjectorManager
|
||||
@ -121,7 +120,7 @@ from .projector.tab import ProjectorTab
|
||||
from .projector.editform import ProjectorEditForm
|
||||
|
||||
__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeForm',
|
||||
'ThemeManager', 'MediaDockManager', 'ServiceItemEditForm', 'FirstTimeForm', 'FirstTimeLanguageForm',
|
||||
'ThemeManager', 'ServiceItemEditForm', 'FirstTimeForm', 'FirstTimeLanguageForm',
|
||||
'Display', 'ServiceNoteForm', 'ThemeLayoutForm', 'FileRenameForm', 'StartTimeForm', 'MainDisplay',
|
||||
'SlideController', 'DisplayController', 'GeneralTab', 'ThemesTab', 'AdvancedTab', 'PluginForm',
|
||||
'FormattingTagForm', 'ShortcutListForm', 'FormattingTagController', 'SingleColumnTableWidget',
|
||||
|
@ -27,7 +27,8 @@ import logging
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, Settings, UiStrings, translate, get_images_filter
|
||||
from openlp.core.lib import SettingsTab, ScreenList, ColorButton, build_icon
|
||||
from openlp.core.lib import SettingsTab, ScreenList, build_icon
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -19,3 +19,15 @@
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
from .colorbutton import ColorButton
|
||||
from .listwidgetwithdnd import ListWidgetWithDnD
|
||||
from .treewidgetwithdnd import TreeWidgetWithDnD
|
||||
from .toolbar import OpenLPToolbar
|
||||
from .dockwidget import OpenLPDockWidget
|
||||
from .wizard import OpenLPWizard, WizardStrings
|
||||
from .mediadockmanager import MediaDockManager
|
||||
from .listpreviewwidget import ListPreviewWidget
|
||||
|
||||
__all__ = ['ColorButton', 'ListPreviewWidget', 'ListWidgetWithDnD', 'OpenLPToolbar', 'OpenLPDockWidget',
|
||||
'OpenLPWizard', 'WizardStrings', 'MediaDockManager', 'ListPreviewWidget']
|
||||
|
@ -38,15 +38,17 @@ from openlp.core.common import Registry, RegistryProperties, AppLocation, Langua
|
||||
check_directory_exists, translate, is_win, is_macosx, add_actions
|
||||
from openlp.core.common.actions import ActionList, CategoryOrder
|
||||
from openlp.core.common.versionchecker import get_application_version
|
||||
from openlp.core.lib import Renderer, OpenLPDockWidget, PluginManager, ImageManager, PluginStatus, ScreenList, \
|
||||
build_icon
|
||||
from openlp.core.lib import Renderer, PluginManager, ImageManager, PluginStatus, ScreenList, build_icon
|
||||
from openlp.core.lib.ui import UiStrings, create_action
|
||||
from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, ThemeManager, LiveController, PluginForm, \
|
||||
MediaDockManager, ShortcutListForm, FormattingTagForm, PreviewController
|
||||
ShortcutListForm, FormattingTagForm, PreviewController
|
||||
from openlp.core.ui.firsttimeform import FirstTimeForm
|
||||
from openlp.core.ui.media import MediaController
|
||||
from openlp.core.ui.printserviceform import PrintServiceForm
|
||||
from openlp.core.ui.projector.manager import ProjectorManager
|
||||
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
||||
from openlp.core.ui.lib.dockwidget import OpenLPDockWidget
|
||||
from openlp.core.ui.lib.mediadockmanager import MediaDockManager
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -29,14 +29,16 @@ import datetime
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
|
||||
from openlp.core.common import OpenLPMixin, Registry, RegistryMixin, RegistryProperties, Settings, UiStrings, translate
|
||||
from openlp.core.lib import OpenLPToolbar, ItemCapabilities
|
||||
from openlp.core.lib import ItemCapabilities
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui.media import MediaState, MediaInfo, MediaType, get_media_players, set_media_players,\
|
||||
parse_optical_path
|
||||
from openlp.core.ui.media.vendor.mediainfoWrapper import MediaInfoWrapper
|
||||
from openlp.core.ui.media.mediaplayer import MediaPlayer
|
||||
from openlp.core.common import AppLocation
|
||||
from openlp.core.ui import DisplayControllerType
|
||||
from openlp.core.ui.media.vendor.mediainfoWrapper import MediaInfoWrapper
|
||||
from openlp.core.ui.media.mediaplayer import MediaPlayer
|
||||
from openlp.core.ui.media import MediaState, MediaInfo, MediaType, get_media_players, set_media_players,\
|
||||
parse_optical_path
|
||||
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
||||
from openlp.core.ui.lib.dockwidget import OpenLPDockWidget
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@ -296,7 +298,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
||||
tooltip=translate('OpenLP.SlideController', 'Stop playing media.'),
|
||||
triggers=controller.send_to_plugins)
|
||||
controller.mediabar.add_toolbar_action('playbackLoop', text='media_playback_loop',
|
||||
icon=':/slides/media_playback_stop.png', checked=False,
|
||||
icon=':/media/media_repeat.png', checked=False,
|
||||
tooltip=translate('OpenLP.SlideController', 'Loop playing media.'),
|
||||
triggers=controller.send_to_plugins)
|
||||
controller.position_label = QtWidgets.QLabel()
|
||||
|
@ -26,9 +26,10 @@ import platform
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, Settings, UiStrings, translate
|
||||
from openlp.core.lib import ColorButton, SettingsTab
|
||||
from openlp.core.lib import SettingsTab
|
||||
from openlp.core.lib.ui import create_button
|
||||
from openlp.core.ui.media import get_media_players, set_media_players
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
|
||||
|
||||
class MediaQCheckBox(QtWidgets.QCheckBox):
|
||||
|
@ -182,9 +182,10 @@ class ProjectorEditForm(QDialog, Ui_ProjectorEditForm):
|
||||
QtWidgets.QMessageBox.warning(self,
|
||||
translate('OpenLP.ProjectorEdit', 'Duplicate Name'),
|
||||
translate('OpenLP.ProjectorEdit',
|
||||
'There is already an entry with name "%s" in '
|
||||
'the database as ID "%s". <br />'
|
||||
'Please enter a different name.' % (name, record.id)))
|
||||
'There is already an entry with name "{name}" in '
|
||||
'the database as ID "{record}". <br />'
|
||||
'Please enter a different name.'.format(name=name,
|
||||
record=record.id)))
|
||||
valid = False
|
||||
return
|
||||
adx = self.ip_text.text()
|
||||
@ -198,17 +199,17 @@ class ProjectorEditForm(QDialog, Ui_ProjectorEditForm):
|
||||
QtWidgets.QMessageBox.warning(self,
|
||||
translate('OpenLP.ProjectorWizard', 'Duplicate IP Address'),
|
||||
translate('OpenLP.ProjectorWizard',
|
||||
'IP address "%s"<br />is already in the database as ID %s.'
|
||||
'<br /><br />Please Enter a different IP address.' %
|
||||
(adx, ip.id)))
|
||||
'IP address "{ip}"<br />is already in the database '
|
||||
'as ID {data}.<br /><br />Please Enter a different '
|
||||
'IP address.'.format(ip=adx, data=ip.id)))
|
||||
valid = False
|
||||
return
|
||||
else:
|
||||
QtWidgets.QMessageBox.warning(self,
|
||||
translate('OpenLP.ProjectorWizard', 'Invalid IP Address'),
|
||||
translate('OpenLP.ProjectorWizard',
|
||||
'IP address "%s"<br>is not a valid IP address.'
|
||||
'<br /><br />Please enter a valid IP address.' % adx))
|
||||
'IP address "{ip}"<br>is not a valid IP address.'
|
||||
'<br /><br />Please enter a valid IP address.'.format(ip=adx)))
|
||||
valid = False
|
||||
return
|
||||
port = int(self.port_text.text())
|
||||
@ -219,8 +220,8 @@ class ProjectorEditForm(QDialog, Ui_ProjectorEditForm):
|
||||
'Port numbers below 1000 are reserved for admin use only, '
|
||||
'<br />and port numbers above 32767 are not currently usable.'
|
||||
'<br /><br />Please enter a valid port number between '
|
||||
' 1000 and 32767.'
|
||||
'<br /><br />Default PJLink port is %s' % PJLINK_PORT))
|
||||
'1000 and 32767.<br /><br />'
|
||||
'Default PJLink port is {port}'.format(port=PJLINK_PORT)))
|
||||
valid = False
|
||||
if valid:
|
||||
self.projector.ip = self.ip_text.text()
|
||||
|
@ -35,7 +35,7 @@ from PyQt5.QtWidgets import QWidget
|
||||
|
||||
from openlp.core.common import RegistryProperties, Settings, OpenLPMixin, \
|
||||
RegistryMixin, translate
|
||||
from openlp.core.lib import OpenLPToolbar
|
||||
from openlp.core.ui.lib import OpenLPToolbar
|
||||
from openlp.core.lib.ui import create_widget_action
|
||||
from openlp.core.lib.projector import DialogSourceStyle
|
||||
from openlp.core.lib.projector.constants import *
|
||||
@ -344,7 +344,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
real_projector = item.data(QtCore.Qt.UserRole)
|
||||
projector_name = str(item.text())
|
||||
visible = real_projector.link.status_connect >= S_CONNECTED
|
||||
log.debug('(%s) Building menu - visible = %s' % (projector_name, visible))
|
||||
log.debug('({name}) Building menu - visible = {visible}'.format(name=projector_name, visible=visible))
|
||||
self.delete_action.setVisible(True)
|
||||
self.edit_action.setVisible(True)
|
||||
self.connect_action.setVisible(not visible)
|
||||
@ -394,7 +394,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
projectordb=self.projectordb,
|
||||
edit=edit)
|
||||
source = source_select_form.exec(projector.link)
|
||||
log.debug('(%s) source_select_form() returned %s' % (projector.link.ip, source))
|
||||
log.debug('({ip}) source_select_form() returned {data}'.format(ip=projector.link.ip, data=source))
|
||||
if source is not None and source > 0:
|
||||
projector.link.set_input_source(str(source))
|
||||
return
|
||||
@ -473,8 +473,9 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
return
|
||||
projector = list_item.data(QtCore.Qt.UserRole)
|
||||
msg = QtWidgets.QMessageBox()
|
||||
msg.setText(translate('OpenLP.ProjectorManager', 'Delete projector (%s) %s?') % (projector.link.ip,
|
||||
projector.link.name))
|
||||
msg.setText(translate('OpenLP.ProjectorManager',
|
||||
'Delete projector ({ip}) {name}?'.format(ip=projector.link.ip,
|
||||
name=projector.link.name)))
|
||||
msg.setInformativeText(translate('OpenLP.ProjectorManager', 'Are you sure you want to delete this projector?'))
|
||||
msg.setStandardButtons(msg.Cancel | msg.Ok)
|
||||
msg.setDefaultButton(msg.Cancel)
|
||||
@ -522,7 +523,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
list_item = None
|
||||
deleted = self.projectordb.delete_projector(projector.db_item)
|
||||
for item in self.projector_list:
|
||||
log.debug('New projector list - item: %s %s' % (item.link.ip, item.link.name))
|
||||
log.debug('New projector list - item: {ip} {name}'.format(ip=item.link.ip, name=item.link.name))
|
||||
|
||||
def on_disconnect_projector(self, opt=None):
|
||||
"""
|
||||
@ -627,53 +628,58 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
"""
|
||||
lwi = self.projector_list_widget.item(self.projector_list_widget.currentRow())
|
||||
projector = lwi.data(QtCore.Qt.UserRole)
|
||||
message = '<b>%s</b>: %s<BR />' % (translate('OpenLP.ProjectorManager', 'Name'),
|
||||
projector.link.name)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'IP'),
|
||||
projector.link.ip)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Port'),
|
||||
projector.link.port)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Notes'),
|
||||
projector.link.notes)
|
||||
message = '%s<hr /><br >' % message
|
||||
message = '<b>{title}</b>: {data}<BR />'.format(title=translate('OpenLP.ProjectorManager', 'Name'),
|
||||
data=projector.link.name)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'IP'),
|
||||
data=projector.link.ip)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Port'),
|
||||
data=projector.link.port)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Notes'),
|
||||
data=projector.link.notes)
|
||||
message += '<hr /><br >'
|
||||
if projector.link.manufacturer is None:
|
||||
message = '%s%s' % (message, translate('OpenLP.ProjectorManager',
|
||||
'Projector information not available at this time.'))
|
||||
message += translate('OpenLP.ProjectorManager', 'Projector information not available at this time.')
|
||||
else:
|
||||
message = '%s<b>%s</b>: %s<BR />' % (message, translate('OpenLP.ProjectorManager', 'Projector Name'),
|
||||
projector.link.pjlink_name)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Manufacturer'),
|
||||
projector.link.manufacturer)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Model'),
|
||||
projector.link.model)
|
||||
message = '%s<b>%s</b>: %s<br /><br />' % (message, translate('OpenLP.ProjectorManager', 'Other info'),
|
||||
projector.link.other_info)
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Power status'),
|
||||
ERROR_MSG[projector.link.power])
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Shutter is'),
|
||||
translate('OpenLP.ProjectorManager', 'Closed')
|
||||
if projector.link.shutter else translate('OpenLP', 'Open'))
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager',
|
||||
'Projector Name'),
|
||||
data=projector.link.pjlink_name)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Manufacturer'),
|
||||
data=projector.link.manufacturer)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Model'),
|
||||
data=projector.link.model)
|
||||
message += '<b>{title}</b>: {data}<br /><br />'.format(title=translate('OpenLP.ProjectorManager',
|
||||
'Other info'),
|
||||
data=projector.link.other_info)
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Power status'),
|
||||
data=ERROR_MSG[projector.link.power])
|
||||
message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Shutter is'),
|
||||
data=translate('OpenLP.ProjectorManager', 'Closed')
|
||||
if projector.link.shutter
|
||||
else translate('OpenLP', 'Open'))
|
||||
message = '%s<b>%s</b>: %s<br />' % (message,
|
||||
translate('OpenLP.ProjectorManager', 'Current source input is'),
|
||||
projector.link.source)
|
||||
count = 1
|
||||
for item in projector.link.lamp:
|
||||
message = '%s <b>%s %s</b> (%s) %s: %s<br />' % (message,
|
||||
translate('OpenLP.ProjectorManager', 'Lamp'),
|
||||
count,
|
||||
translate('OpenLP.ProjectorManager', 'On')
|
||||
message += '<b>{title} {count}</b> {status} '.format(title=translate('OpenLP.ProjectorManager',
|
||||
'Lamp'),
|
||||
count=count,
|
||||
status=translate('OpenLP.ProjectorManager',
|
||||
' is on')
|
||||
if item['On']
|
||||
else translate('OpenLP.ProjectorManager', 'Off'),
|
||||
translate('OpenLP.ProjectorManager', 'Hours'),
|
||||
item['Hours'])
|
||||
count = count + 1
|
||||
message = '%s<hr /><br />' % message
|
||||
else translate('OpenLP.ProjectorManager',
|
||||
'is off'))
|
||||
|
||||
message += '<b>{title}</b>: {hours}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Hours'),
|
||||
hours=item['Hours'])
|
||||
count += 1
|
||||
message += '<hr /><br />'
|
||||
if projector.link.projector_errors is None:
|
||||
message = '%s%s' % (message, translate('OpenLP.ProjectorManager', 'No current errors or warnings'))
|
||||
message += translate('OpenLP.ProjectorManager', 'No current errors or warnings')
|
||||
else:
|
||||
message = '%s<b>%s</b>' % (message, translate('OpenLP.ProjectorManager', 'Current errors/warnings'))
|
||||
message += '<b>{data}</b>'.format(data=translate('OpenLP.ProjectorManager', 'Current errors/warnings'))
|
||||
for (key, val) in projector.link.projector_errors.items():
|
||||
message = '%s<b>%s</b>: %s<br />' % (message, key, ERROR_MSG[val])
|
||||
message += '<b>{key}</b>: {data}<br />'.format(key=key, data=ERROR_MSG[val])
|
||||
QtWidgets.QMessageBox.information(self, translate('OpenLP.ProjectorManager', 'Projector Information'), message)
|
||||
|
||||
def _add_projector(self, projector):
|
||||
@ -743,7 +749,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
if start:
|
||||
item.link.connect_to_host()
|
||||
for item in self.projector_list:
|
||||
log.debug('New projector list - item: (%s) %s' % (item.link.ip, item.link.name))
|
||||
log.debug('New projector list - item: ({ip}) {name}'.format(ip=item.link.ip, name=item.link.name))
|
||||
|
||||
@pyqtSlot(str)
|
||||
def add_projector_from_wizard(self, ip, opts=None):
|
||||
@ -753,7 +759,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
:param ip: IP address of new record item to find
|
||||
:param opts: Needed by PyQt5
|
||||
"""
|
||||
log.debug('add_projector_from_wizard(ip=%s)' % ip)
|
||||
log.debug('add_projector_from_wizard(ip={ip})'.format(ip=ip))
|
||||
item = self.projectordb.get_projector_by_ip(ip)
|
||||
self.add_projector(item)
|
||||
|
||||
@ -764,7 +770,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
|
||||
:param projector: Projector() instance of projector with updated information
|
||||
"""
|
||||
log.debug('edit_projector_from_wizard(ip=%s)' % projector.ip)
|
||||
log.debug('edit_projector_from_wizard(ip={ip})'.format(ip=projector.ip))
|
||||
self.old_projector.link.name = projector.name
|
||||
self.old_projector.link.ip = projector.ip
|
||||
self.old_projector.link.pin = None if projector.pin == '' else projector.pin
|
||||
@ -816,7 +822,9 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
else:
|
||||
status_code = status
|
||||
message = ERROR_MSG[status] if msg is None else msg
|
||||
log.debug('(%s) updateStatus(status=%s) message: "%s"' % (item.link.name, status_code, message))
|
||||
log.debug('({name}) updateStatus(status={status}) message: "{message}"'.format(name=item.link.name,
|
||||
status=status_code,
|
||||
message=message))
|
||||
if status in STATUS_ICONS:
|
||||
if item.status == status:
|
||||
return
|
||||
@ -826,14 +834,14 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
status_code = ERROR_STRING[status]
|
||||
elif status in STATUS_STRING:
|
||||
status_code = STATUS_STRING[status]
|
||||
log.debug('(%s) Updating icon with %s' % (item.link.name, status_code))
|
||||
log.debug('({name}) Updating icon with {code}'.format(name=item.link.name, code=status_code))
|
||||
item.widget.setIcon(item.icon)
|
||||
self.update_icons()
|
||||
|
||||
def get_toolbar_item(self, name, enabled=False, hidden=False):
|
||||
item = self.one_toolbar.findChild(QtWidgets.QAction, name)
|
||||
if item == 0:
|
||||
log.debug('No item found with name "%s"' % name)
|
||||
log.debug('No item found with name "{name}"'.format(name=name))
|
||||
return
|
||||
item.setVisible(False if hidden else True)
|
||||
item.setEnabled(True if enabled else False)
|
||||
@ -918,11 +926,12 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
|
||||
:param name: Name from QListWidgetItem
|
||||
"""
|
||||
QtWidgets.QMessageBox.warning(self, translate('OpenLP.ProjectorManager',
|
||||
'"%s" Authentication Error' % name),
|
||||
title = '"{name} {message}" '.format(name=name,
|
||||
message=translate('OpenLP.ProjectorManager', 'Authentication Error'))
|
||||
QtWidgets.QMessageBox.warning(self, title,
|
||||
'<br />There was an authentication error while trying to connect.'
|
||||
'<br /><br />Please verify your PIN setting '
|
||||
'for projector item "%s"' % name)
|
||||
'for projector item "{name}"'.format(name=name))
|
||||
|
||||
@pyqtSlot(str)
|
||||
def no_authentication_error(self, name):
|
||||
@ -932,11 +941,12 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QWidget, Ui_ProjectorManager,
|
||||
|
||||
:param name: Name from QListWidgetItem
|
||||
"""
|
||||
QtWidgets.QMessageBox.warning(self, translate('OpenLP.ProjectorManager',
|
||||
'"%s" No Authentication Error' % name),
|
||||
title = '"{name} {message}" '.format(name=name,
|
||||
message=translate('OpenLP.ProjectorManager', 'No Authentication Error'))
|
||||
QtWidgets.QMessageBox.warning(self, title,
|
||||
'<br />PIN is set and projector does not require authentication.'
|
||||
'<br /><br />Please verify your PIN setting '
|
||||
'for projector item "%s"' % name)
|
||||
'for projector item "{name}"'.format(name=name))
|
||||
|
||||
|
||||
class ProjectorItem(QObject):
|
||||
@ -972,5 +982,5 @@ def not_implemented(function):
|
||||
QtWidgets.QMessageBox.information(None,
|
||||
translate('OpenLP.ProjectorManager', 'Not Implemented Yet'),
|
||||
translate('OpenLP.ProjectorManager',
|
||||
'Function "%s"<br />has not been implemented yet.'
|
||||
'<br />Please check back again later.' % function))
|
||||
'Function "{function}"<br />has not been implemented yet.'
|
||||
'<br />Please check back again later.'.format(function=function)))
|
||||
|
@ -115,7 +115,7 @@ def Build_Tab(group, source_key, default, projector, projectordb, edit=False):
|
||||
if edit:
|
||||
for key in sourcelist:
|
||||
item = QLineEdit()
|
||||
item.setObjectName('source_key_%s' % key)
|
||||
item.setObjectName('source_key_{key}'.format(key=key))
|
||||
source_item = projectordb.get_source_by_code(code=key, projector_id=projector.db_item.id)
|
||||
if source_item is None:
|
||||
item.setText(PJLINK_DEFAULT_CODES[key])
|
||||
@ -161,7 +161,7 @@ def set_button_tooltip(bar):
|
||||
button.setToolTip(translate('OpenLP.SourceSelectForm',
|
||||
'Save changes and return to OpenLP'))
|
||||
else:
|
||||
log.debug('No tooltip for button {}'.format(button.text()))
|
||||
log.debug('No tooltip for button {text}'.format(text=button.text()))
|
||||
|
||||
|
||||
class FingerTabBarWidget(QTabBar):
|
||||
@ -359,16 +359,20 @@ class SourceSelectTabs(QDialog):
|
||||
continue
|
||||
item = self.projectordb.get_source_by_code(code=code, projector_id=projector.id)
|
||||
if item is None:
|
||||
log.debug("(%s) Adding new source text %s: %s" % (projector.ip, code, text))
|
||||
log.debug("({ip}) Adding new source text {code}: {text}".format(ip=projector.ip,
|
||||
code=code,
|
||||
text=text))
|
||||
item = ProjectorSource(projector_id=projector.id, code=code, text=text)
|
||||
else:
|
||||
item.text = text
|
||||
log.debug('(%s) Updating source code %s with text="%s"' % (projector.ip, item.code, item.text))
|
||||
log.debug('({ip}) Updating source code {code} with text="{text}"'.format(ip=projector.ip,
|
||||
code=item.code,
|
||||
text=item.text))
|
||||
self.projectordb.add_source(item)
|
||||
selected = 0
|
||||
else:
|
||||
selected = self.button_group.checkedId()
|
||||
log.debug('SourceSelectTabs().accepted() Setting source to %s' % selected)
|
||||
log.debug('SourceSelectTabs().accepted() Setting source to {selected}'.format(selected=selected))
|
||||
self.done(selected)
|
||||
|
||||
|
||||
@ -417,7 +421,7 @@ class SourceSelectSingle(QDialog):
|
||||
if self.edit:
|
||||
for key in keys:
|
||||
item = QLineEdit()
|
||||
item.setObjectName('source_key_%s' % key)
|
||||
item.setObjectName('source_key_{key}'.format(key=key))
|
||||
source_item = self.projectordb.get_source_by_code(code=key, projector_id=self.projector.db_item.id)
|
||||
if source_item is None:
|
||||
item.setText(PJLINK_DEFAULT_CODES[key])
|
||||
@ -498,14 +502,18 @@ class SourceSelectSingle(QDialog):
|
||||
continue
|
||||
item = self.projectordb.get_source_by_code(code=code, projector_id=projector.id)
|
||||
if item is None:
|
||||
log.debug("(%s) Adding new source text %s: %s" % (projector.ip, code, text))
|
||||
log.debug("({ip}) Adding new source text {code}: {text}".format(ip=projector.ip,
|
||||
code=code,
|
||||
text=text))
|
||||
item = ProjectorSource(projector_id=projector.id, code=code, text=text)
|
||||
else:
|
||||
item.text = text
|
||||
log.debug('(%s) Updating source code %s with text="%s"' % (projector.ip, item.code, item.text))
|
||||
log.debug('({ip}) Updating source code {code} with text="{text}"'.format(ip=projector.ip,
|
||||
code=item.code,
|
||||
text=item.text))
|
||||
self.projectordb.add_source(item)
|
||||
selected = 0
|
||||
else:
|
||||
selected = self.button_group.checkedId()
|
||||
log.debug('SourceSelectDialog().accepted() Setting source to %s' % selected)
|
||||
log.debug('SourceSelectDialog().accepted() Setting source to {selected}'.format(selected=selected))
|
||||
self.done(selected)
|
||||
|
@ -35,9 +35,10 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from openlp.core.common import Registry, RegistryProperties, AppLocation, Settings, ThemeLevel, OpenLPMixin, \
|
||||
RegistryMixin, check_directory_exists, UiStrings, translate, split_filename, delete_file
|
||||
from openlp.core.common.actions import ActionList, CategoryOrder
|
||||
from openlp.core.lib import OpenLPToolbar, ServiceItem, ItemCapabilities, PluginStatus, build_icon
|
||||
from openlp.core.lib import ServiceItem, ItemCapabilities, PluginStatus, build_icon
|
||||
from openlp.core.lib.ui import critical_error_message_box, create_widget_action, find_and_set_in_combo_box
|
||||
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
|
||||
from openlp.core.ui.lib import OpenLPToolbar
|
||||
from openlp.core.common.languagemanager import format_time
|
||||
|
||||
|
||||
|
@ -33,11 +33,14 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from openlp.core.common import Registry, RegistryProperties, Settings, SlideLimits, UiStrings, translate, \
|
||||
RegistryMixin, OpenLPMixin
|
||||
from openlp.core.common.actions import ActionList, CategoryOrder
|
||||
from openlp.core.lib import OpenLPToolbar, ItemCapabilities, ServiceItem, ImageSource, ServiceItemAction, \
|
||||
ScreenList, build_icon, build_html
|
||||
from openlp.core.lib import ItemCapabilities, ServiceItem, ImageSource, ServiceItemAction, ScreenList, build_icon, \
|
||||
build_html
|
||||
from openlp.core.lib.ui import create_action
|
||||
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
||||
from openlp.core.ui.lib.dockwidget import OpenLPDockWidget
|
||||
from openlp.core.ui.lib.listpreviewwidget import ListPreviewWidget
|
||||
from openlp.core.ui import HideMode, MainDisplay, Display, DisplayControllerType
|
||||
from openlp.core.ui.listpreviewwidget import ListPreviewWidget
|
||||
|
||||
|
||||
# Threshold which has to be trespassed to toggle.
|
||||
HIDE_MENU_THRESHOLD = 27
|
||||
|
@ -31,6 +31,7 @@ from openlp.core.common import Registry, RegistryProperties, UiStrings, translat
|
||||
from openlp.core.lib.theme import BackgroundType, BackgroundGradientType
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui import ThemeLayoutForm
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
from .themewizard import Ui_ThemeWizard
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
@ -31,11 +31,12 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, RegistryProperties, AppLocation, Settings, OpenLPMixin, RegistryMixin, \
|
||||
check_directory_exists, UiStrings, translate, is_win, get_filesystem_encoding, delete_file
|
||||
from openlp.core.lib import FileDialog, ImageSource, OpenLPToolbar, ValidationError, get_text_file_string, build_icon, \
|
||||
from openlp.core.lib import FileDialog, ImageSource, ValidationError, get_text_file_string, build_icon, \
|
||||
check_item_selected, create_thumb, validate_thumb
|
||||
from openlp.core.lib.theme import ThemeXML, BackgroundType
|
||||
from openlp.core.lib.ui import critical_error_message_box, create_widget_action
|
||||
from openlp.core.ui import FileRenameForm, ThemeForm
|
||||
from openlp.core.ui.lib import OpenLPToolbar
|
||||
from openlp.core.common.languagemanager import get_locale_key
|
||||
|
||||
|
||||
|
@ -25,9 +25,10 @@ The Create/Edit theme wizard
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import UiStrings, translate, is_macosx
|
||||
from openlp.core.lib import build_icon, ColorButton
|
||||
from openlp.core.lib import build_icon
|
||||
from openlp.core.lib.theme import HorizontalType, BackgroundType, BackgroundGradientType
|
||||
from openlp.core.lib.ui import add_welcome_page, create_valign_selection_widgets
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
|
||||
|
||||
class Ui_ThemeWizard(object):
|
||||
|
@ -23,8 +23,9 @@
|
||||
from PyQt5 import QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Settings, UiStrings, translate
|
||||
from openlp.core.lib import ColorButton, SettingsTab
|
||||
from openlp.core.lib import SettingsTab
|
||||
from openlp.core.lib.ui import create_valign_selection_widgets
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
|
||||
|
||||
class AlertsTab(SettingsTab):
|
||||
|
@ -31,7 +31,7 @@ from PyQt5 import QtWidgets
|
||||
from openlp.core.common import AppLocation, Settings, UiStrings, translate, clean_filename
|
||||
from openlp.core.lib.db import delete_database
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.common.languagemanager import get_locale_key
|
||||
from openlp.plugins.bibles.lib.manager import BibleFormat
|
||||
from openlp.plugins.bibles.lib.db import BiblesResourcesDB, clean_filename
|
||||
|
@ -32,7 +32,7 @@ from PyQt5 import QtCore, QtWidgets
|
||||
from openlp.core.common import Registry, AppLocation, UiStrings, Settings, check_directory_exists, translate, \
|
||||
delete_file
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, BiblesResourcesDB
|
||||
from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract
|
||||
|
||||
|
@ -23,7 +23,8 @@
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
from openlp.core.common import Settings, UiStrings, translate
|
||||
from openlp.core.lib import ColorButton, SettingsTab
|
||||
from openlp.core.lib import SettingsTab
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
|
||||
|
||||
class ImageTab(SettingsTab):
|
||||
|
@ -27,9 +27,10 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, AppLocation, Settings, UiStrings, check_directory_exists, translate, \
|
||||
delete_file, get_images_filter
|
||||
from openlp.core.lib import ItemCapabilities, MediaManagerItem, ServiceItemContext, StringContent, TreeWidgetWithDnD,\
|
||||
build_icon, check_item_selected, create_thumb, validate_thumb
|
||||
from openlp.core.lib import ItemCapabilities, MediaManagerItem, ServiceItemContext, StringContent, build_icon, \
|
||||
check_item_selected, create_thumb, validate_thumb
|
||||
from openlp.core.lib.ui import create_widget_action, critical_error_message_box
|
||||
from openlp.core.ui.lib.treewidgetwithdnd import TreeWidgetWithDnD
|
||||
from openlp.core.common.languagemanager import get_locale_key
|
||||
from openlp.plugins.images.forms import AddGroupForm, ChooseGroupForm
|
||||
from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
|
||||
|
@ -24,10 +24,13 @@ The Media plugin
|
||||
"""
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from shutil import which
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
from openlp.core.common import Settings, translate
|
||||
from openlp.core.common import AppLocation, Settings, translate, check_binary_exists, is_win
|
||||
from openlp.core.lib import Plugin, StringContent, build_icon
|
||||
from openlp.plugins.media.lib import MediaMediaItem, MediaTab
|
||||
|
||||
@ -62,6 +65,15 @@ class MediaPlugin(Plugin):
|
||||
"""
|
||||
super().initialise()
|
||||
|
||||
def check_pre_conditions(self):
|
||||
"""
|
||||
Check it we have a valid environment.
|
||||
:return: true or false
|
||||
"""
|
||||
log.debug('check_installed Mediainfo')
|
||||
# Use the user defined program if given
|
||||
return process_check_binary('mediainfo')
|
||||
|
||||
def app_startup(self):
|
||||
"""
|
||||
Override app_startup() in order to do nothing
|
||||
@ -137,3 +149,21 @@ class MediaPlugin(Plugin):
|
||||
Add html code to htmlbuilder.
|
||||
"""
|
||||
return self.media_controller.get_media_display_html()
|
||||
|
||||
|
||||
def process_check_binary(program_path):
|
||||
"""
|
||||
Function that checks whether a binary MediaInfo is present
|
||||
|
||||
:param program_path:The full path to the binary to check.
|
||||
:return: If exists or not
|
||||
"""
|
||||
program_type = None
|
||||
runlog = check_binary_exists(program_path)
|
||||
print(runlog, type(runlog))
|
||||
# Analyse the output to see it the program is mediainfo
|
||||
for line in runlog.splitlines():
|
||||
decoded_line = line.decode()
|
||||
if re.search('MediaInfo Command line', decoded_line, re.IGNORECASE):
|
||||
return True
|
||||
return False
|
||||
|
@ -22,13 +22,12 @@
|
||||
|
||||
import os
|
||||
import logging
|
||||
from tempfile import NamedTemporaryFile
|
||||
import re
|
||||
from shutil import which
|
||||
from subprocess import check_output, CalledProcessError, STDOUT
|
||||
from subprocess import check_output, CalledProcessError
|
||||
|
||||
from openlp.core.common import AppLocation
|
||||
from openlp.core.common import Settings, is_win, trace_error_handler
|
||||
from openlp.core.common import AppLocation, check_binary_exists
|
||||
from openlp.core.common import Settings, is_win
|
||||
from openlp.core.lib import ScreenList
|
||||
from .presentationcontroller import PresentationController, PresentationDocument
|
||||
|
||||
@ -61,7 +60,7 @@ class PdfController(PresentationController):
|
||||
self.check_installed()
|
||||
|
||||
@staticmethod
|
||||
def check_binary(program_path):
|
||||
def process_check_binary(program_path):
|
||||
"""
|
||||
Function that checks whether a binary is either ghostscript or mudraw or neither.
|
||||
Is also used from presentationtab.py
|
||||
@ -70,22 +69,7 @@ class PdfController(PresentationController):
|
||||
:return: Type of the binary, 'gs' if ghostscript, 'mudraw' if mudraw, None if invalid.
|
||||
"""
|
||||
program_type = None
|
||||
runlog = ''
|
||||
log.debug('testing program_path: %s', program_path)
|
||||
try:
|
||||
# Setup startupinfo options for check_output to avoid console popping up on windows
|
||||
if is_win():
|
||||
startupinfo = STARTUPINFO()
|
||||
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
|
||||
else:
|
||||
startupinfo = None
|
||||
runlog = check_output([program_path, '--help'], stderr=STDOUT, startupinfo=startupinfo)
|
||||
except CalledProcessError as e:
|
||||
runlog = e.output
|
||||
except Exception:
|
||||
trace_error_handler(log)
|
||||
runlog = ''
|
||||
log.debug('check_output returned: %s' % runlog)
|
||||
runlog = check_binary_exists(program_path)
|
||||
# Analyse the output to see it the program is mudraw, ghostscript or neither
|
||||
for line in runlog.splitlines():
|
||||
decoded_line = line.decode()
|
||||
@ -122,7 +106,7 @@ class PdfController(PresentationController):
|
||||
# Use the user defined program if given
|
||||
if Settings().value('presentations/enable_pdf_program'):
|
||||
pdf_program = Settings().value('presentations/pdf_program')
|
||||
program_type = self.check_binary(pdf_program)
|
||||
program_type = self.process_check_binary(pdf_program)
|
||||
if program_type == 'gs':
|
||||
self.gsbin = pdf_program
|
||||
elif program_type == 'mudraw':
|
||||
|
@ -30,7 +30,7 @@ import os
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry, RegistryProperties, translate
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.plugins.songs.lib import delete_song
|
||||
from openlp.plugins.songs.lib.db import Song, MediaFile
|
||||
from openlp.plugins.songs.forms.songreviewwidget import SongReviewWidget
|
||||
|
@ -30,7 +30,7 @@ from PyQt5 import QtCore, QtWidgets
|
||||
from openlp.core.common import Registry, UiStrings, translate
|
||||
from openlp.core.lib import create_separated_list, build_icon
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.plugins.songs.lib.db import Song
|
||||
from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport
|
||||
|
||||
|
@ -31,7 +31,7 @@ from PyQt5 import QtCore, QtWidgets
|
||||
from openlp.core.common import RegistryProperties, Settings, UiStrings, translate
|
||||
from openlp.core.lib import FileDialog
|
||||
from openlp.core.lib.ui import critical_error_message_box
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.plugins.songs.lib.importer import SongFormat, SongFormatSelect
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
@ -26,7 +26,7 @@ import os
|
||||
import logging
|
||||
|
||||
from openlp.core.common import translate, UiStrings, is_win
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from .importers.opensong import OpenSongImport
|
||||
from .importers.easyslides import EasySlidesImport
|
||||
from .importers.openlp import OpenLPSongImport
|
||||
|
@ -90,7 +90,7 @@ import os
|
||||
from lxml import etree, objectify
|
||||
|
||||
from openlp.core.lib import translate
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib import clean_song, VerseType
|
||||
from openlp.plugins.songs.lib.importers.songimport import SongImport
|
||||
from openlp.plugins.songs.lib.db import Author, Book, Song, Topic
|
||||
|
@ -31,7 +31,7 @@ from sqlalchemy.orm.exc import UnmappedClassError
|
||||
|
||||
from openlp.core.common import translate
|
||||
from openlp.core.lib.db import BaseModel
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib import clean_song
|
||||
from openlp.plugins.songs.lib.db import Author, Book, Song, Topic, MediaFile
|
||||
from .songimport import SongImport
|
||||
|
@ -29,7 +29,7 @@ import os
|
||||
|
||||
from lxml import etree
|
||||
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib.importers.songimport import SongImport
|
||||
from openlp.plugins.songs.lib.ui import SongStrings
|
||||
from openlp.plugins.songs.lib.openlyricsxml import OpenLyrics, OpenLyricsError
|
||||
|
@ -27,7 +27,7 @@ Powerpraise song files into the current database.
|
||||
import os
|
||||
from lxml import objectify
|
||||
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from .songimport import SongImport
|
||||
|
||||
|
||||
|
@ -26,10 +26,11 @@ Presentationmanager song files into the current database.
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
import chardet
|
||||
from lxml import objectify, etree
|
||||
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from .songimport import SongImport
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@ import base64
|
||||
import logging
|
||||
from lxml import objectify
|
||||
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib import strip_rtf
|
||||
from .songimport import SongImport
|
||||
|
||||
|
@ -28,7 +28,7 @@ import os
|
||||
from PyQt5 import QtCore
|
||||
|
||||
from openlp.core.common import Registry, AppLocation, check_directory_exists, translate
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib import clean_song, VerseType
|
||||
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile
|
||||
from openlp.plugins.songs.lib.ui import SongStrings
|
||||
|
@ -29,7 +29,7 @@ import logging
|
||||
import re
|
||||
import struct
|
||||
|
||||
from openlp.core.ui.wizard import WizardStrings
|
||||
from openlp.core.ui.lib.wizard import WizardStrings
|
||||
from openlp.plugins.songs.lib import VerseType, retrieve_windows_encoding
|
||||
from openlp.plugins.songs.lib.importers.songimport import SongImport
|
||||
|
||||
|
@ -23,13 +23,12 @@
|
||||
Package to test the openlp.core.ui.projector.networkutils package.
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from unittest import TestCase
|
||||
|
||||
from openlp.core.common import verify_ip_address, md5_hash, qmd5_hash
|
||||
|
||||
from tests.resources.projector.data import TEST_PIN, TEST_SALT, TEST_HASH
|
||||
|
||||
salt = TEST_SALT
|
||||
pin = TEST_PIN
|
||||
test_hash = TEST_HASH
|
||||
|
@ -124,3 +124,30 @@ class TestPJLink(TestCase):
|
||||
'Lamp power status should have been set to TRUE')
|
||||
self.assertEquals(pjlink.lamp[0]['Hours'], 22222,
|
||||
'Lamp hours should have been set to 22222')
|
||||
|
||||
@patch.object(pjlink_test, 'projectorReceivedData')
|
||||
def projector_process_multiple_lamp_test(self, mock_projectorReceivedData):
|
||||
"""
|
||||
Test setting multiple lamp on/off and hours
|
||||
"""
|
||||
# GIVEN: Test object
|
||||
pjlink = pjlink_test
|
||||
|
||||
# WHEN: Call process_command with lamp data
|
||||
pjlink.process_command('LAMP', '11111 1 22222 0 33333 1')
|
||||
|
||||
# THEN: Lamp should have been set with proper lamp status
|
||||
self.assertEquals(len(pjlink.lamp), 3,
|
||||
'Projector should have 3 lamps specified')
|
||||
self.assertEquals(pjlink.lamp[0]['On'], True,
|
||||
'Lamp 1 power status should have been set to TRUE')
|
||||
self.assertEquals(pjlink.lamp[0]['Hours'], 11111,
|
||||
'Lamp 1 hours should have been set to 11111')
|
||||
self.assertEquals(pjlink.lamp[1]['On'], False,
|
||||
'Lamp 2 power status should have been set to FALSE')
|
||||
self.assertEquals(pjlink.lamp[1]['Hours'], 22222,
|
||||
'Lamp 2 hours should have been set to 22222')
|
||||
self.assertEquals(pjlink.lamp[2]['On'], True,
|
||||
'Lamp 3 power status should have been set to TRUE')
|
||||
self.assertEquals(pjlink.lamp[2]['Hours'], 33333,
|
||||
'Lamp 3 hours should have been set to 33333')
|
||||
|
0
tests/functional/openlp_core_ui_lib/__init__.py
Normal file
0
tests/functional/openlp_core_ui_lib/__init__.py
Normal file
@ -24,7 +24,7 @@ This module contains tests for the openlp.core.lib.filedialog module
|
||||
"""
|
||||
from unittest import TestCase
|
||||
|
||||
from openlp.core.lib.colorbutton import ColorButton
|
||||
from openlp.core.ui.lib.colorbutton import ColorButton
|
||||
from tests.functional import MagicMock, call, patch
|
||||
|
||||
|
||||
@ -33,11 +33,11 @@ class TestColorDialog(TestCase):
|
||||
Test the :class:`~openlp.core.lib.colorbutton.ColorButton` class
|
||||
"""
|
||||
def setUp(self):
|
||||
self.change_color_patcher = patch('openlp.core.lib.colorbutton.ColorButton.change_color')
|
||||
self.clicked_patcher = patch('openlp.core.lib.colorbutton.ColorButton.clicked')
|
||||
self.color_changed_patcher = patch('openlp.core.lib.colorbutton.ColorButton.colorChanged')
|
||||
self.qt_gui_patcher = patch('openlp.core.lib.colorbutton.QtWidgets')
|
||||
self.translate_patcher = patch('openlp.core.lib.colorbutton.translate', **{'return_value': 'Tool Tip Text'})
|
||||
self.change_color_patcher = patch('openlp.core.ui.lib.colorbutton.ColorButton.change_color')
|
||||
self.clicked_patcher = patch('openlp.core.ui.lib.colorbutton.ColorButton.clicked')
|
||||
self.color_changed_patcher = patch('openlp.core.ui.lib.colorbutton.ColorButton.colorChanged')
|
||||
self.qt_gui_patcher = patch('openlp.core.ui.lib.colorbutton.QtWidgets')
|
||||
self.translate_patcher = patch('openlp.core.ui.lib.colorbutton.translate', **{'return_value': 'Tool Tip Text'})
|
||||
self.addCleanup(self.change_color_patcher.stop)
|
||||
self.addCleanup(self.clicked_patcher.stop)
|
||||
self.addCleanup(self.color_changed_patcher.stop)
|
||||
@ -55,7 +55,7 @@ class TestColorDialog(TestCase):
|
||||
"""
|
||||
|
||||
# GIVEN: The ColorButton class, a mocked change_color, setToolTip methods and clicked signal
|
||||
with patch('openlp.core.lib.colorbutton.ColorButton.setToolTip') as mocked_set_tool_tip:
|
||||
with patch('openlp.core.ui.lib.colorbutton.ColorButton.setToolTip') as mocked_set_tool_tip:
|
||||
|
||||
# WHEN: The ColorButton object is instantiated
|
||||
widget = ColorButton()
|
||||
@ -74,7 +74,7 @@ class TestColorDialog(TestCase):
|
||||
self.change_color_patcher.stop()
|
||||
|
||||
# GIVEN: An instance of the ColorButton object, and a mocked out setStyleSheet
|
||||
with patch('openlp.core.lib.colorbutton.ColorButton.setStyleSheet') as mocked_set_style_sheet:
|
||||
with patch('openlp.core.ui.lib.colorbutton.ColorButton.setStyleSheet') as mocked_set_style_sheet:
|
||||
widget = ColorButton()
|
||||
|
||||
# WHEN: Changing the color
|
||||
@ -123,7 +123,7 @@ class TestColorDialog(TestCase):
|
||||
"""
|
||||
|
||||
# GIVEN: An instance of ColorButton, with a mocked __init__
|
||||
with patch('openlp.core.lib.colorbutton.ColorButton.__init__', **{'return_value': None}):
|
||||
with patch('openlp.core.ui.lib.colorbutton.ColorButton.__init__', **{'return_value': None}):
|
||||
widget = ColorButton()
|
||||
|
||||
# WHEN: Setting the color property
|
@ -20,12 +20,12 @@
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
"""
|
||||
Package to test the openlp.core.ui.listpreviewwidget package.
|
||||
Package to test the openlp.core.ui.lib.listpreviewwidget package.
|
||||
"""
|
||||
from unittest import TestCase
|
||||
|
||||
from openlp.core.common import Settings
|
||||
from openlp.core.ui.listpreviewwidget import ListPreviewWidget
|
||||
from openlp.core.ui.lib.listpreviewwidget import ListPreviewWidget
|
||||
from openlp.core.lib import ServiceItem
|
||||
|
||||
from tests.functional import MagicMock, patch, call
|
||||
@ -38,13 +38,13 @@ class TestListPreviewWidget(TestCase):
|
||||
Mock out stuff for all the tests
|
||||
"""
|
||||
# Mock self.parent().width()
|
||||
self.parent_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget.parent')
|
||||
self.parent_patcher = patch('openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.parent')
|
||||
self.mocked_parent = self.parent_patcher.start()
|
||||
self.mocked_parent.width.return_value = 100
|
||||
self.addCleanup(self.parent_patcher.stop)
|
||||
|
||||
# Mock Settings().value()
|
||||
self.Settings_patcher = patch('openlp.core.ui.listpreviewwidget.Settings')
|
||||
self.Settings_patcher = patch('openlp.core.ui.lib.listpreviewwidget.Settings')
|
||||
self.mocked_Settings = self.Settings_patcher.start()
|
||||
self.mocked_Settings_obj = MagicMock()
|
||||
self.mocked_Settings_obj.value.return_value = None
|
||||
@ -52,7 +52,7 @@ class TestListPreviewWidget(TestCase):
|
||||
self.addCleanup(self.Settings_patcher.stop)
|
||||
|
||||
# Mock self.viewport().width()
|
||||
self.viewport_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport')
|
||||
self.viewport_patcher = patch('openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.viewport')
|
||||
self.mocked_viewport = self.viewport_patcher.start()
|
||||
self.mocked_viewport_obj = MagicMock()
|
||||
self.mocked_viewport_obj.width.return_value = 200
|
||||
@ -72,8 +72,8 @@ class TestListPreviewWidget(TestCase):
|
||||
self.assertIsNotNone(list_preview_widget, 'The ListPreviewWidget object should not be None')
|
||||
self.assertEquals(list_preview_widget.screen_ratio, 1, 'Should not be called')
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
def replace_recalculate_layout_test_text(self, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." enabled, txt slides unchanged in replace_service_item & __recalc...
|
||||
@ -104,8 +104,8 @@ class TestListPreviewWidget(TestCase):
|
||||
self.assertEquals(mocked_resizeRowsToContents.call_count, 2, 'Should be called')
|
||||
self.assertEquals(mocked_setRowHeight.call_count, 0, 'Should not be called')
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
def replace_recalculate_layout_test_img(self, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." disabled, img slides unchanged in replace_service_item & __recalc...
|
||||
@ -140,8 +140,8 @@ class TestListPreviewWidget(TestCase):
|
||||
calls = [call(0, 200), call(1, 200), call(0, 400), call(1, 400), call(0, 400), call(1, 400)]
|
||||
mocked_setRowHeight.assert_has_calls(calls)
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
def replace_recalculate_layout_test_img_max(self, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." enabled, img slides resized in replace_service_item & __recalc...
|
||||
@ -174,9 +174,9 @@ class TestListPreviewWidget(TestCase):
|
||||
calls = [call(0, 100), call(1, 100), call(0, 100), call(1, 100)]
|
||||
mocked_setRowHeight.assert_has_calls(calls)
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
def row_resized_test_text(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." enabled, text-based slides not affected in row_resized.
|
||||
@ -208,9 +208,9 @@ class TestListPreviewWidget(TestCase):
|
||||
# THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called
|
||||
self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called')
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
def row_resized_test_img(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." disabled, image-based slides not affected in row_resized.
|
||||
@ -244,9 +244,9 @@ class TestListPreviewWidget(TestCase):
|
||||
# THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called
|
||||
self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called')
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.setRowHeight')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.cellWidget')
|
||||
def row_resized_test_img_max(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents):
|
||||
"""
|
||||
Test if "Max height for non-text slides..." enabled, image-based slides are scaled in row_resized.
|
||||
@ -278,10 +278,10 @@ class TestListPreviewWidget(TestCase):
|
||||
# THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should be called
|
||||
mocked_cellWidget_child.setMaximumWidth.assert_called_once_with(150)
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
def autoscroll_test_setting_invalid(self, mocked_slide_count, mocked_item, mocked_scrollToItem, mocked_selectRow):
|
||||
"""
|
||||
Test if 'advanced/autoscrolling' setting None or invalid, that no autoscrolling occurs on change_slide().
|
||||
@ -314,10 +314,10 @@ class TestListPreviewWidget(TestCase):
|
||||
self.assertEquals(mocked_selectRow.call_count, 0, 'Should not be called')
|
||||
self.assertEquals(mocked_item.call_count, 0, 'Should not be called')
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
def autoscroll_test_dist_bounds(self, mocked_slide_count, mocked_item, mocked_scrollToItem, mocked_selectRow):
|
||||
"""
|
||||
Test if 'advanced/autoscrolling' setting asks to scroll beyond list bounds, that it does not beyond.
|
||||
@ -344,10 +344,10 @@ class TestListPreviewWidget(TestCase):
|
||||
calls = [call(0, 0), call(0, 0)]
|
||||
mocked_item.assert_has_calls(calls)
|
||||
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.item')
|
||||
@patch(u'openlp.core.ui.lib.listpreviewwidget.ListPreviewWidget.slide_count')
|
||||
def autoscroll_test_normal(self, mocked_slide_count, mocked_item, mocked_scrollToItem, mocked_selectRow):
|
||||
"""
|
||||
Test if 'advanced/autoscrolling' setting valid, autoscrolling called as expected.
|
@ -25,7 +25,7 @@ Test the media plugin
|
||||
from unittest import TestCase
|
||||
|
||||
from openlp.core import Registry
|
||||
from openlp.plugins.media.mediaplugin import MediaPlugin
|
||||
from openlp.plugins.media.mediaplugin import MediaPlugin, process_check_binary
|
||||
|
||||
from tests.functional import MagicMock, patch
|
||||
from tests.helpers.testmixin import TestMixin
|
||||
@ -63,3 +63,29 @@ class MediaPluginTest(TestCase, TestMixin):
|
||||
self.assertIsInstance(MediaPlugin.about(), str)
|
||||
# THEN: about() should return a non-empty string
|
||||
self.assertNotEquals(len(MediaPlugin.about()), 0)
|
||||
|
||||
@patch('openlp.plugins.media.mediaplugin.check_binary_exists')
|
||||
def process_check_binary_pass_test(self, mocked_checked_binary_exists):
|
||||
"""
|
||||
Test that the Process check returns true if found
|
||||
"""
|
||||
# GIVEN: A media plugin instance
|
||||
# WHEN: function is called with the correct name
|
||||
mocked_checked_binary_exists.return_value = str.encode('MediaInfo Command line')
|
||||
result = process_check_binary('MediaInfo')
|
||||
|
||||
# THEN: The the result should be True
|
||||
self.assertTrue(result, 'Mediainfo should have been found')
|
||||
|
||||
@patch('openlp.plugins.media.mediaplugin.check_binary_exists')
|
||||
def process_check_binary_fail_test(self, mocked_checked_binary_exists):
|
||||
"""
|
||||
Test that the Process check returns false if not found
|
||||
"""
|
||||
# GIVEN: A media plugin instance
|
||||
# WHEN: function is called with the wrong name
|
||||
mocked_checked_binary_exists.return_value = str.encode('MediaInfo1 Command line')
|
||||
result = process_check_binary("MediaInfo1")
|
||||
|
||||
# THEN: The the result should be True
|
||||
self.assertFalse(result, "Mediainfo should not have been found")
|
||||
|
@ -20,7 +20,7 @@
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
"""
|
||||
Package to test the openlp.core.ui.listpreviewwidget.
|
||||
Package to test the openlp.core.ui.lib.listpreviewwidget.
|
||||
"""
|
||||
|
||||
from unittest import TestCase
|
||||
@ -29,7 +29,7 @@ from PyQt5 import QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import Registry
|
||||
from openlp.core.lib import ServiceItem
|
||||
from openlp.core.ui import listpreviewwidget
|
||||
from openlp.core.ui.lib import ListWidgetWithDnD, ListPreviewWidget
|
||||
from tests.interfaces import MagicMock, patch
|
||||
from tests.utils.osdinteraction import read_service_from_file
|
||||
from tests.helpers.testmixin import TestMixin
|
||||
@ -48,7 +48,7 @@ class TestListPreviewWidget(TestCase, TestMixin):
|
||||
self.image_manager = MagicMock()
|
||||
self.image_manager.get_image.return_value = self.image
|
||||
Registry().register('image_manager', self.image_manager)
|
||||
self.preview_widget = listpreviewwidget.ListPreviewWidget(self.main_window, 2)
|
||||
self.preview_widget = ListPreviewWidget(self.main_window, 2)
|
||||
|
||||
def tearDown(self):
|
||||
"""
|
Loading…
Reference in New Issue
Block a user