forked from openlp/openlp
Update code to 2.2 from 2.1 so translators can get working!
bzr-revno: 2460
This commit is contained in:
commit
98a3cd127f
@ -115,7 +115,7 @@ class UiStrings(object):
|
|||||||
self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular')
|
self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular')
|
||||||
self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural')
|
self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural')
|
||||||
self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2')
|
self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2')
|
||||||
self.OLPV2x = translate('OpenLP.Ui', 'OpenLP 2.1')
|
self.OLPV2x = translate('OpenLP.Ui', 'OpenLP 2.2')
|
||||||
self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?')
|
self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?')
|
||||||
self.OpenService = translate('OpenLP.Ui', 'Open service.')
|
self.OpenService = translate('OpenLP.Ui', 'Open service.')
|
||||||
self.PlaySlidesInLoop = translate('OpenLP.Ui', 'Play Slides in Loop')
|
self.PlaySlidesInLoop = translate('OpenLP.Ui', 'Play Slides in Loop')
|
||||||
|
@ -96,7 +96,6 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
def retranslateUi(self):
|
def retranslateUi(self):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.search_text_label.setText('%s:' % UiStrings().Search)
|
self.search_text_label.setText('%s:' % UiStrings().Search)
|
||||||
self.search_text_button.setText(UiStrings().Search)
|
self.search_text_button.setText(UiStrings().Search)
|
||||||
@ -134,6 +133,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
# Called to redisplay the custom list screen edith from a search
|
# Called to redisplay the custom list screen edith from a search
|
||||||
# or from the exit of the Custom edit dialog. If remote editing is
|
# or from the exit of the Custom edit dialog. If remote editing is
|
||||||
# active trigger it and clean up so it will not update again.
|
# active trigger it and clean up so it will not update again.
|
||||||
|
self.check_search_result()
|
||||||
|
|
||||||
def on_new_click(self):
|
def on_new_click(self):
|
||||||
"""
|
"""
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from datetime import time
|
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
@ -126,18 +125,18 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
|
|||||||
Adds buttons to the start of the header bar.
|
Adds buttons to the start of the header bar.
|
||||||
"""
|
"""
|
||||||
if 'vlc' in get_media_players()[0]:
|
if 'vlc' in get_media_players()[0]:
|
||||||
diable_optical_button_text = False
|
disable_optical_button_text = False
|
||||||
optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
||||||
optical_button_tooltip = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
optical_button_tooltip = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
||||||
else:
|
else:
|
||||||
diable_optical_button_text = True
|
disable_optical_button_text = True
|
||||||
optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD')
|
||||||
optical_button_tooltip = translate('MediaPlugin.MediaItem',
|
optical_button_tooltip = translate('MediaPlugin.MediaItem',
|
||||||
'Load CD/DVD - only supported when VLC is installed and enabled')
|
'Load CD/DVD - only supported when VLC is installed and enabled')
|
||||||
self.load_optical = self.toolbar.add_toolbar_action('load_optical', icon=OPTICAL_ICON, text=optical_button_text,
|
self.load_optical = self.toolbar.add_toolbar_action('load_optical', icon=OPTICAL_ICON, text=optical_button_text,
|
||||||
tooltip=optical_button_tooltip,
|
tooltip=optical_button_tooltip,
|
||||||
triggers=self.on_load_optical)
|
triggers=self.on_load_optical)
|
||||||
if diable_optical_button_text:
|
if disable_optical_button_text:
|
||||||
self.load_optical.setDisabled(True)
|
self.load_optical.setDisabled(True)
|
||||||
|
|
||||||
def add_end_header_bar(self):
|
def add_end_header_bar(self):
|
||||||
@ -282,7 +281,6 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
|
|||||||
Initialize media item.
|
Initialize media item.
|
||||||
"""
|
"""
|
||||||
self.list_view.clear()
|
self.list_view.clear()
|
||||||
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
|
||||||
self.service_path = os.path.join(AppLocation.get_section_data_path(self.settings_section), 'thumbnails')
|
self.service_path = os.path.join(AppLocation.get_section_data_path(self.settings_section), 'thumbnails')
|
||||||
check_directory_exists(self.service_path)
|
check_directory_exists(self.service_path)
|
||||||
self.load_list(Settings().value(self.settings_section + '/media files'))
|
self.load_list(Settings().value(self.settings_section + '/media files'))
|
||||||
|
@ -306,9 +306,9 @@ class HttpRouter(RegistryProperties):
|
|||||||
Translate various strings in the mobile app.
|
Translate various strings in the mobile app.
|
||||||
"""
|
"""
|
||||||
self.template_vars = {
|
self.template_vars = {
|
||||||
'app_title': translate('RemotePlugin.Mobile', 'OpenLP 2.1 Remote'),
|
'app_title': translate('RemotePlugin.Mobile', 'OpenLP 2.2 Remote'),
|
||||||
'stage_title': translate('RemotePlugin.Mobile', 'OpenLP 2.1 Stage View'),
|
'stage_title': translate('RemotePlugin.Mobile', 'OpenLP 2.2 Stage View'),
|
||||||
'live_title': translate('RemotePlugin.Mobile', 'OpenLP 2.1 Live View'),
|
'live_title': translate('RemotePlugin.Mobile', 'OpenLP 2.2 Live View'),
|
||||||
'service_manager': translate('RemotePlugin.Mobile', 'Service Manager'),
|
'service_manager': translate('RemotePlugin.Mobile', 'Service Manager'),
|
||||||
'slide_controller': translate('RemotePlugin.Mobile', 'Slide Controller'),
|
'slide_controller': translate('RemotePlugin.Mobile', 'Slide Controller'),
|
||||||
'alerts': translate('RemotePlugin.Mobile', 'Alerts'),
|
'alerts': translate('RemotePlugin.Mobile', 'Alerts'),
|
||||||
|
@ -265,7 +265,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _validate_tags(self, tags):
|
def _validate_tags(self, tags, first_time=True):
|
||||||
"""
|
"""
|
||||||
Validates a list of tags
|
Validates a list of tags
|
||||||
Deletes the first affiliated tag pair which is located side by side in the list
|
Deletes the first affiliated tag pair which is located side by side in the list
|
||||||
@ -277,6 +277,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
|
|||||||
:param tags: A list of tags
|
:param tags: A list of tags
|
||||||
:return: True if the function can't find any mismatched tags. Else False.
|
:return: True if the function can't find any mismatched tags. Else False.
|
||||||
"""
|
"""
|
||||||
|
if first_time:
|
||||||
|
fixed_tags = []
|
||||||
|
for i in range(len(tags)):
|
||||||
|
if tags[i] != '{br}':
|
||||||
|
fixed_tags.append(tags[i])
|
||||||
|
tags = fixed_tags
|
||||||
if len(tags) == 0:
|
if len(tags) == 0:
|
||||||
return True
|
return True
|
||||||
if len(tags) % 2 != 0:
|
if len(tags) % 2 != 0:
|
||||||
@ -284,7 +290,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
|
|||||||
for i in range(len(tags)-1):
|
for i in range(len(tags)-1):
|
||||||
if tags[i+1] == "{/" + tags[i][1:]:
|
if tags[i+1] == "{/" + tags[i][1:]:
|
||||||
del tags[i:i+2]
|
del tags[i:i+2]
|
||||||
return self._validate_tags(tags)
|
return self._validate_tags(tags, False)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _process_lyrics(self):
|
def _process_lyrics(self):
|
||||||
|
@ -382,7 +382,7 @@ class TestUtils(TestCase):
|
|||||||
mocked_page_object = MagicMock()
|
mocked_page_object = MagicMock()
|
||||||
mock_urlopen.return_value = mocked_page_object
|
mock_urlopen.return_value = mocked_page_object
|
||||||
fake_url = 'this://is.a.fake/url'
|
fake_url = 'this://is.a.fake/url'
|
||||||
user_agent_header = ('User-Agent', 'OpenLP/2.1.0')
|
user_agent_header = ('User-Agent', 'OpenLP/2.2.0')
|
||||||
|
|
||||||
# WHEN: The get_web_page() method is called
|
# WHEN: The get_web_page() method is called
|
||||||
returned_page = get_web_page(fake_url, header=user_agent_header)
|
returned_page = get_web_page(fake_url, header=user_agent_header)
|
||||||
|
57
tests/functional/openlp_plugins/songs/test_editsongform.py
Normal file
57
tests/functional/openlp_plugins/songs/test_editsongform.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
"""
|
||||||
|
This module contains tests for the lib submodule of the Songs plugin.
|
||||||
|
"""
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
from openlp.core.common import Registry, Settings
|
||||||
|
from openlp.core.lib import ServiceItem
|
||||||
|
from openlp.plugins.songs.forms.editsongform import EditSongForm
|
||||||
|
from openlp.plugins.songs.lib.db import AuthorType
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
from tests.helpers.testmixin import TestMixin
|
||||||
|
|
||||||
|
|
||||||
|
class TestEditSongForm(TestCase, TestMixin):
|
||||||
|
"""
|
||||||
|
Test the functions in the :mod:`lib` module.
|
||||||
|
"""
|
||||||
|
def setUp(self):
|
||||||
|
"""
|
||||||
|
Set up the components need for all tests.
|
||||||
|
"""
|
||||||
|
Registry.create()
|
||||||
|
Registry().register('service_list', MagicMock())
|
||||||
|
Registry().register('main_window', MagicMock())
|
||||||
|
with patch('openlp.plugins.songs.forms.editsongform.EditSongForm.__init__', return_value=None):
|
||||||
|
self.edit_song_form = EditSongForm(None, MagicMock(), MagicMock())
|
||||||
|
self.setup_application()
|
||||||
|
self.build_settings()
|
||||||
|
QtCore.QLocale.setDefault(QtCore.QLocale('en_GB'))
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
"""
|
||||||
|
Delete all the C++ objects at the end so that we don't have a segfault
|
||||||
|
"""
|
||||||
|
self.destroy_settings()
|
||||||
|
|
||||||
|
def validate_matching_tags_test(self):
|
||||||
|
# Given a set of tags
|
||||||
|
tags = ['{r}', '{/r}', '{bl}', '{/bl}', '{su}', '{/su}']
|
||||||
|
|
||||||
|
# WHEN we validate them
|
||||||
|
valid = self.edit_song_form._validate_tags(tags)
|
||||||
|
|
||||||
|
# THEN they should be valid
|
||||||
|
self.assertTrue(valid, "The tags list should be valid")
|
||||||
|
|
||||||
|
def validate_nonmatching_tags_test(self):
|
||||||
|
# Given a set of tags
|
||||||
|
tags = ['{r}', '{/r}', '{bl}', '{/bl}', '{br}', '{su}', '{/su}']
|
||||||
|
|
||||||
|
# WHEN we validate them
|
||||||
|
valid = self.edit_song_form._validate_tags(tags)
|
||||||
|
|
||||||
|
# THEN they should be valid
|
||||||
|
self.assertTrue(valid, "The tags list should be valid")
|
Loading…
Reference in New Issue
Block a user