Fixing Themes hot reload when using ServiceItem context menu (Song theme level)

This commit is contained in:
Mateus Meyer Jiacomelli 2022-12-12 08:04:28 +00:00 committed by Tim Bentley
parent 70c9377e5a
commit 18e3969746
3 changed files with 19 additions and 60 deletions

View File

@ -1777,8 +1777,14 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
if not theme:
theme = None
item = self.find_service_item()[0]
self.service_items[item]['service_item'].update_theme(theme)
self.regenerate_service_items(True)
service_item = self.service_items[item]['service_item']
# Needs to be checked before updating theme on service, as it generates a new identifier
is_selected_item_live = self.live_controller.service_item and \
service_item.unique_identifier == self.live_controller.service_item.unique_identifier
service_item.update_theme(theme)
# self.regenerate_service_items(True)
if self.settings.value('themes/hot reload') and is_selected_item_live:
self.live_controller.refresh_service_item(service_item)
def on_make_live_action_triggered(self, checked):
"""

View File

@ -833,14 +833,15 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
# See bug #791050
self.toolbar.show()
def refresh_service_item(self):
def refresh_service_item(self, service_item=None):
"""
Method to update the service item if the screen has changed
Method to update the current service item
"""
if self.service_item.is_text() or self.service_item.is_image():
item = self.service_item
item.render()
self._process_item(item, self.selected_row)
selected_row = self.selected_row
if not service_item:
service_item = self.service_item
self._process_item(service_item, selected_row, True)
self.slide_selected()
def add_service_item(self, item):
"""

View File

@ -567,67 +567,19 @@ def test_refresh_service_item_text(settings):
mocked_service_item.is_text.return_value = True
mocked_service_item.is_image.return_value = False
mocked_process_item = MagicMock()
mocked_slide_selected = MagicMock()
slide_controller = SlideController(None)
slide_controller.service_item = mocked_service_item
slide_controller._process_item = mocked_process_item
slide_controller.slide_selected = mocked_slide_selected
slide_controller.selected_row = 5
# WHEN: The refresh_service_item method() is called
slide_controller.refresh_service_item()
# THEN: The item should be re-processed
mocked_service_item.is_text.assert_called_once_with()
assert 0 == mocked_service_item.is_image.call_count, 'is_image should not have been called'
mocked_service_item.render.assert_called_once_with()
mocked_process_item.assert_called_once_with(mocked_service_item, 5)
def test_refresh_service_item_image(settings):
"""
Test that the refresh_service_item() method refreshes a image service item
"""
# GIVEN: A mock service item and a fresh slide controller
mocked_service_item = MagicMock()
mocked_service_item.is_text.return_value = False
mocked_service_item.is_image.return_value = True
mocked_process_item = MagicMock()
slide_controller = SlideController(None)
slide_controller.service_item = mocked_service_item
slide_controller._process_item = mocked_process_item
slide_controller.selected_row = 5
# WHEN: The refresh_service_item method() is called
slide_controller.refresh_service_item()
# THEN: The item should be re-processed
mocked_service_item.is_text.assert_called_once_with()
mocked_service_item.is_image.assert_called_once_with()
mocked_service_item.render.assert_called_once_with()
mocked_process_item.assert_called_once_with(mocked_service_item, 5)
def test_refresh_service_item_not_image_or_text(settings):
"""
Test that the refresh_service_item() method does not refresh a service item if it's neither text or an image
"""
# GIVEN: A mock service item and a fresh slide controller
mocked_service_item = MagicMock()
mocked_service_item.is_text.return_value = False
mocked_service_item.is_image.return_value = False
mocked_process_item = MagicMock()
slide_controller = SlideController(None)
slide_controller.service_item = mocked_service_item
slide_controller._process_item = mocked_process_item
slide_controller.selected_row = 5
# WHEN: The refresh_service_item method() is called
slide_controller.refresh_service_item()
# THEN: The item should be re-processed
mocked_service_item.is_text.assert_called_once_with()
mocked_service_item.is_image.assert_called_once_with()
assert 0 == mocked_service_item.render.call_count, 'The render() method should not have been called'
assert 0 == mocked_process_item.call_count, 'The mocked_process_item() method should not have been called'
slide_controller._process_item.assert_called_once_with(mocked_service_item, 5, True)
slide_controller.slide_selected.assert_called_once()
def test_add_service_item_with_song_edit(settings):