mirror of https://gitlab.com/openlp/openlp.git
parent
c4681e60e3
commit
ff421df2bf
|
@ -63,8 +63,8 @@ class OpenLP(QtWidgets.QApplication, LogMixin):
|
||||||
The core application class. This class inherits from Qt's QApplication
|
The core application class. This class inherits from Qt's QApplication
|
||||||
class in order to provide the core of the application.
|
class in order to provide the core of the application.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
args = []
|
args = []
|
||||||
|
worker_threads = {}
|
||||||
|
|
||||||
def exec(self):
|
def exec(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -50,12 +50,12 @@ def run_thread(worker, thread_name, can_start=True):
|
||||||
"""
|
"""
|
||||||
if not thread_name:
|
if not thread_name:
|
||||||
raise ValueError('A thread_name is required when calling the "run_thread" function')
|
raise ValueError('A thread_name is required when calling the "run_thread" function')
|
||||||
main_window = Registry().get('main_window')
|
application = Registry().get('application')
|
||||||
if thread_name in main_window.threads:
|
if thread_name in application.worker_threads:
|
||||||
raise KeyError('A thread with the name "{}" has already been created, please use another'.format(thread_name))
|
raise KeyError('A thread with the name "{}" has already been created, please use another'.format(thread_name))
|
||||||
# Create the thread and add the thread and the worker to the parent
|
# Create the thread and add the thread and the worker to the parent
|
||||||
thread = QtCore.QThread()
|
thread = QtCore.QThread()
|
||||||
main_window.threads[thread_name] = {
|
application.worker_threads[thread_name] = {
|
||||||
'thread': thread,
|
'thread': thread,
|
||||||
'worker': worker
|
'worker': worker
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ def get_thread_worker(thread_name):
|
||||||
:param str thread_name: The name of the thread
|
:param str thread_name: The name of the thread
|
||||||
:returns: The worker for this thread name
|
:returns: The worker for this thread name
|
||||||
"""
|
"""
|
||||||
return Registry().get('main_window').threads.get(thread_name)
|
return Registry().get('application').worker_threads.get(thread_name)
|
||||||
|
|
||||||
|
|
||||||
def is_thread_finished(thread_name):
|
def is_thread_finished(thread_name):
|
||||||
|
@ -88,8 +88,8 @@ def is_thread_finished(thread_name):
|
||||||
:param str thread_name: The name of the thread
|
:param str thread_name: The name of the thread
|
||||||
:returns: True if the thread is finished, False if it is still running
|
:returns: True if the thread is finished, False if it is still running
|
||||||
"""
|
"""
|
||||||
main_window = Registry().get('main_window')
|
app = Registry().get('application')
|
||||||
return thread_name not in main_window.threads or main_window.threads[thread_name]['thread'].isFinished()
|
return thread_name not in app.worker_threads or app.worker_threads[thread_name]['thread'].isFinished()
|
||||||
|
|
||||||
|
|
||||||
def make_remove_thread(thread_name):
|
def make_remove_thread(thread_name):
|
||||||
|
@ -105,7 +105,7 @@ def make_remove_thread(thread_name):
|
||||||
|
|
||||||
:param str thread_name: The name of the thread to stop and remove
|
:param str thread_name: The name of the thread to stop and remove
|
||||||
"""
|
"""
|
||||||
main_window = Registry().get('main_window')
|
application = Registry().get('application')
|
||||||
if thread_name in main_window.threads:
|
if thread_name in application.worker_threads:
|
||||||
del main_window.threads[thread_name]
|
del application.worker_threads[thread_name]
|
||||||
return remove_thread
|
return remove_thread
|
||||||
|
|
|
@ -477,7 +477,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||||
"""
|
"""
|
||||||
super(MainWindow, self).__init__()
|
super(MainWindow, self).__init__()
|
||||||
Registry().register('main_window', self)
|
Registry().register('main_window', self)
|
||||||
self.threads = {}
|
|
||||||
self.clipboard = self.application.clipboard()
|
self.clipboard = self.application.clipboard()
|
||||||
self.arguments = ''.join(self.application.args)
|
self.arguments = ''.join(self.application.args)
|
||||||
# Set up settings sections for the main application (not for use by plugins).
|
# Set up settings sections for the main application (not for use by plugins).
|
||||||
|
@ -557,11 +556,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||||
wait_dialog.setAutoClose(False)
|
wait_dialog.setAutoClose(False)
|
||||||
wait_dialog.setCancelButton(None)
|
wait_dialog.setCancelButton(None)
|
||||||
wait_dialog.show()
|
wait_dialog.show()
|
||||||
for thread_name in self.threads.keys():
|
for thread_name in self.application.worker_threads.keys():
|
||||||
log.debug('Waiting for thread %s', thread_name)
|
log.debug('Waiting for thread %s', thread_name)
|
||||||
self.application.processEvents()
|
self.application.processEvents()
|
||||||
thread = self.threads[thread_name]['thread']
|
thread = self.application.worker_threads[thread_name]['thread']
|
||||||
worker = self.threads[thread_name]['worker']
|
worker = self.application.worker_threads[thread_name]['worker']
|
||||||
try:
|
try:
|
||||||
if worker and hasattr(worker, 'stop'):
|
if worker and hasattr(worker, 'stop'):
|
||||||
# If the worker has a stop method, run it
|
# If the worker has a stop method, run it
|
||||||
|
|
|
@ -47,9 +47,9 @@ def test_run_thread_exists(MockRegistry):
|
||||||
Test that trying to run a thread with a name that already exists will throw a KeyError
|
Test that trying to run a thread with a name that already exists will throw a KeyError
|
||||||
"""
|
"""
|
||||||
# GIVEN: A mocked registry with a main window object
|
# GIVEN: A mocked registry with a main window object
|
||||||
mocked_main_window = MagicMock()
|
mocked_application = MagicMock()
|
||||||
mocked_main_window.threads = {'test_thread': MagicMock()}
|
mocked_application.worker_threads = {'test_thread': MagicMock()}
|
||||||
MockRegistry.return_value.get.return_value = mocked_main_window
|
MockRegistry.return_value.get.return_value = mocked_application
|
||||||
|
|
||||||
# WHEN: run_thread() is called
|
# WHEN: run_thread() is called
|
||||||
try:
|
try:
|
||||||
|
@ -66,18 +66,19 @@ def test_run_thread(MockRegistry, MockQThread):
|
||||||
Test that running a thread works correctly
|
Test that running a thread works correctly
|
||||||
"""
|
"""
|
||||||
# GIVEN: A mocked registry with a main window object
|
# GIVEN: A mocked registry with a main window object
|
||||||
mocked_main_window = MagicMock()
|
mocked_application = MagicMock()
|
||||||
mocked_main_window.threads = {}
|
mocked_application.worker_threads = {}
|
||||||
MockRegistry.return_value.get.return_value = mocked_main_window
|
MockRegistry.return_value.get.return_value = mocked_application
|
||||||
|
|
||||||
# WHEN: run_thread() is called
|
# WHEN: run_thread() is called
|
||||||
run_thread(MagicMock(), 'test_thread')
|
run_thread(MagicMock(), 'test_thread')
|
||||||
|
|
||||||
# THEN: The thread should be in the threads list and the correct methods should have been called
|
# THEN: The thread should be in the threads list and the correct methods should have been called
|
||||||
assert len(mocked_main_window.threads.keys()) == 1, 'There should be 1 item in the list of threads'
|
assert len(mocked_application.worker_threads.keys()) == 1, 'There should be 1 item in the list of threads'
|
||||||
assert list(mocked_main_window.threads.keys()) == ['test_thread'], 'The test_thread item should be in the list'
|
assert list(mocked_application.worker_threads.keys()) == ['test_thread'], \
|
||||||
mocked_worker = mocked_main_window.threads['test_thread']['worker']
|
'The test_thread item should be in the list'
|
||||||
mocked_thread = mocked_main_window.threads['test_thread']['thread']
|
mocked_worker = mocked_application.worker_threads['test_thread']['worker']
|
||||||
|
mocked_thread = mocked_application.worker_threads['test_thread']['thread']
|
||||||
mocked_worker.moveToThread.assert_called_once_with(mocked_thread)
|
mocked_worker.moveToThread.assert_called_once_with(mocked_thread)
|
||||||
mocked_thread.started.connect.assert_called_once_with(mocked_worker.start)
|
mocked_thread.started.connect.assert_called_once_with(mocked_worker.start)
|
||||||
expected_quit_calls = [call(mocked_thread.quit), call(mocked_worker.deleteLater)]
|
expected_quit_calls = [call(mocked_thread.quit), call(mocked_worker.deleteLater)]
|
||||||
|
|
Loading…
Reference in New Issue