#1387286, playing audio CD clips on windows.

#1247025, Position fix for d'n'd to servicelist, copied from lp:~oliwee/openlp/bug-1247025.
Fix traceback on theme import in windows.

bzr-revno: 2436
This commit is contained in:
Tomas Groth 2014-11-01 11:09:10 +00:00 committed by Tim Bentley
commit 146a505ee6
7 changed files with 51 additions and 12 deletions

View File

@ -563,8 +563,11 @@ s
self.add_to_service(replace=self.remote_triggered) self.add_to_service(replace=self.remote_triggered)
else: else:
items = self.list_view.selectedIndexes() items = self.list_view.selectedIndexes()
drop_position = self.service_manager.get_drop_position()
for item in items: for item in items:
self.add_to_service(item) self.add_to_service(item, position=drop_position)
if drop_position != -1:
drop_position += 1
def add_to_service_remote(self, message): def add_to_service_remote(self, message):
""" """
@ -574,18 +577,19 @@ s
""" """
self.add_to_service(message[0], remote=message[1]) self.add_to_service(message[0], remote=message[1])
def add_to_service(self, item=None, replace=None, remote=False): def add_to_service(self, item=None, replace=None, remote=False, position=-1):
""" """
Add this item to the current service. Add this item to the current service.
:param item: Item to be processed :param item: Item to be processed
:param replace: Replace the existing item :param replace: Replace the existing item
:param remote: Triggered from remote :param remote: Triggered from remote
:param position: Position to place item
""" """
service_item = self.build_service_item(item, True, remote=remote, context=ServiceItemContext.Service) service_item = self.build_service_item(item, True, remote=remote, context=ServiceItemContext.Service)
if service_item: if service_item:
service_item.from_plugin = False service_item.from_plugin = False
self.service_manager.add_service_item(service_item, replace=replace) self.service_manager.add_service_item(service_item, replace=replace, position=position)
def on_add_edit_click(self): def on_add_edit_click(self):
""" """

View File

@ -168,6 +168,8 @@ class VlcPlayer(MediaPlayer):
path = os.path.normcase(file_path) path = os.path.normcase(file_path)
# create the media # create the media
if controller.media_info.media_type == MediaType.CD: if controller.media_info.media_type == MediaType.CD:
if is_win():
path = '/' + path
display.vlc_media = display.vlc_instance.media_new_location('cdda://' + path) display.vlc_media = display.vlc_instance.media_new_location('cdda://' + path)
display.vlc_media_player.set_media(display.vlc_media) display.vlc_media_player.set_media(display.vlc_media)
display.vlc_media_player.play() display.vlc_media_player.play()

View File

@ -324,7 +324,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
self.inactive = build_icon(':/media/auto-start_inactive.png') self.inactive = build_icon(':/media/auto-start_inactive.png')
self.service_items = [] self.service_items = []
self.suffixes = [] self.suffixes = []
self.drop_position = 0 self.drop_position = -1
self.service_id = 0 self.service_id = 0
# is a new service and has not been saved # is a new service and has not been saved
self._modified = False self._modified = False
@ -1377,7 +1377,8 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
self.live_controller.replace_service_manager_item(new_item) self.live_controller.replace_service_manager_item(new_item)
self.set_modified() self.set_modified()
def add_service_item(self, item, rebuild=False, expand=None, replace=False, repaint=True, selected=False): def add_service_item(self, item, rebuild=False, expand=None, replace=False, repaint=True, selected=False,
position=-1):
""" """
Add a Service item to the list Add a Service item to the list
@ -1387,11 +1388,13 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
:param replace: Is the service item a replacement (Default False) :param replace: Is the service item a replacement (Default False)
:param repaint: Do we need to repaint the service item list (Default True) :param repaint: Do we need to repaint the service item list (Default True)
:param selected: Has the item been selected (Default False) :param selected: Has the item been selected (Default False)
:param position: The position where the item is dropped (Default -1)
""" """
# if not passed set to config value # if not passed set to config value
if expand is None: if expand is None:
expand = Settings().value('advanced/expand service item') expand = Settings().value('advanced/expand service item')
item.from_service = True item.from_service = True
self.drop_position = position
if replace: if replace:
s_item, child = self.find_service_item() s_item, child = self.find_service_item()
item.merge(self.service_items[s_item]['service_item']) item.merge(self.service_items[s_item]['service_item'])
@ -1401,7 +1404,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
else: else:
item.render() item.render()
# nothing selected for dnd # nothing selected for dnd
if self.drop_position == 0: if self.drop_position == -1:
if isinstance(item, list): if isinstance(item, list):
for ind_item in item: for ind_item in item:
self.service_items.append({'service_item': ind_item, self.service_items.append({'service_item': ind_item,
@ -1421,7 +1424,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
# if rebuilding list make sure live is fixed. # if rebuilding list make sure live is fixed.
if rebuild: if rebuild:
self.live_controller.replace_service_manager_item(item) self.live_controller.replace_service_manager_item(item)
self.drop_position = 0 self.drop_position = -1
self.set_modified() self.set_modified()
def make_preview(self): def make_preview(self):
@ -1604,7 +1607,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
item.setSelected(True) item.setSelected(True)
replace = True replace = True
else: else:
self.drop_position = self._get_parent_item_data(item) self.drop_position = self._get_parent_item_data(item) - 1
Registry().execute('%s_add_service_item' % plugin, replace) Registry().execute('%s_add_service_item' % plugin, replace)
def update_theme_list(self, theme_list): def update_theme_list(self, theme_list):
@ -1666,3 +1669,9 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
""" """
setting_dialog = PrintServiceForm() setting_dialog = PrintServiceForm()
setting_dialog.exec_() setting_dialog.exec_()
def get_drop_position(self):
"""
Getter for drop_position. Used in: MediaManagerItem
"""
return self.drop_position

View File

@ -563,12 +563,12 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ThemeManager, R
else: else:
abort_import = False abort_import = False
for name in theme_zip.namelist(): for name in theme_zip.namelist():
name = name.replace('/', os.path.sep) out_name = name.replace('/', os.path.sep)
split_name = name.split(os.path.sep) split_name = out_name.split(os.path.sep)
if split_name[-1] == '' or len(split_name) == 1: if split_name[-1] == '' or len(split_name) == 1:
# is directory or preview file # is directory or preview file
continue continue
full_name = os.path.join(directory, name) full_name = os.path.join(directory, out_name)
check_directory_exists(os.path.dirname(full_name)) check_directory_exists(os.path.dirname(full_name))
if os.path.splitext(name)[1].lower() == '.xml': if os.path.splitext(name)[1].lower() == '.xml':
file_xml = str(theme_zip.read(name), 'utf-8') file_xml = str(theme_zip.read(name), 'utf-8')

View File

@ -219,7 +219,7 @@ class MediaClipSelectorForm(QtGui.QDialog, Ui_MediaClipSelector, RegistryPropert
return return
# VLC behaves a bit differently on windows and linux when loading, which creates problems when trying to # VLC behaves a bit differently on windows and linux when loading, which creates problems when trying to
# detect if we're dealing with a DVD or CD, so we use different loading approaches depending on the OS. # detect if we're dealing with a DVD or CD, so we use different loading approaches depending on the OS.
if os.name == 'nt': if is_win():
# If the given path is in the format "D:\" or "D:", prefix it with "/" to make VLC happy # If the given path is in the format "D:\" or "D:", prefix it with "/" to make VLC happy
pattern = re.compile('^\w:\\\\*$') pattern = re.compile('^\w:\\\\*$')
if pattern.match(path): if pattern.match(path):

View File

@ -31,9 +31,11 @@ Package to test the openlp.core.ui.thememanager package.
""" """
import zipfile import zipfile
import os import os
import shutil
from unittest import TestCase from unittest import TestCase
from tests.interfaces import MagicMock from tests.interfaces import MagicMock
from tempfile import mkdtemp
from openlp.core.ui import ThemeManager from openlp.core.ui import ThemeManager
from openlp.core.common import Registry from openlp.core.common import Registry
@ -135,3 +137,25 @@ class TestThemeManager(TestCase):
# THEN: The mocked_copyfile should not have been called # THEN: The mocked_copyfile should not have been called
self.assertTrue(mocked_copyfile.called, 'shutil.copyfile should be called') self.assertTrue(mocked_copyfile.called, 'shutil.copyfile should be called')
def unzip_theme_test(self):
"""
Test that unzipping of themes works
"""
# GIVEN: A theme file, a output folder and some mocked out internal functions
with patch('openlp.core.ui.thememanager.critical_error_message_box') \
as mocked_critical_error_message_box:
theme_manager = ThemeManager(None)
theme_manager._create_theme_from_xml = MagicMock()
theme_manager.generate_and_save_image = MagicMock()
theme_manager.path = ''
folder = mkdtemp()
theme_file = os.path.join(TEST_RESOURCES_PATH, 'themes', 'Moss_on_tree.otz')
# WHEN: We try to unzip it
theme_manager.unzip_theme(theme_file, folder)
# THEN: Files should be unpacked
self.assertTrue(os.path.exists(os.path.join(folder, 'Moss on tree', 'Moss on tree.xml')))
self.assertEqual(mocked_critical_error_message_box.call_count, 0, 'No errors should have happened')
shutil.rmtree(folder)

Binary file not shown.