Use CommonMixin for project registry.

startup
Ben Niemann 4 years ago
parent 7e0999fe96
commit 6d67e2a7c5

@ -150,7 +150,7 @@ class EditorApp(ui_base.AbstractEditorApp):
progress.setNumSteps(4)
with progress.step("Scanning projects..."):
self.project_registry = project_registry.ProjectRegistry(self.process.event_loop)
self.project_registry = project_registry.ProjectRegistry(context=self.context)
await self.project_registry.setup()
tab_page.showOpenDialog(self.project_registry)

@ -133,13 +133,7 @@ class ProjectTabPage(ui_base.CommonMixin, QtWidgets.QWidget):
async def __projectSelected(self, project: project_registry_lib.Project) -> None:
self.showLoadSpinner("Loading project \"%s\"..." % project.name)
await self.app.setup_complete.wait()
await project.open(
event_loop=self.event_loop,
server=self.app.process.server,
process_manager=self.app.process.manager,
node_db=self.app.node_db,
urid_mapper=self.app.urid_mapper,
tmp_dir=self.app.process.tmp_dir)
await project.open()
view = project_view.ProjectView(project_connection=project, context=self.context)
await view.setup()
self.__setPage(view)

@ -21,29 +21,18 @@
# @end:license
from noisidev import uitest
from noisidev import unittest_mixins
from noisicaa.constants import TEST_OPTS
from . import open_project_dialog
from . import project_registry
class OpenProjectDialogTest(
unittest_mixins.NodeDBMixin,
unittest_mixins.URIDMapperMixin,
unittest_mixins.ServerMixin,
uitest.UITestCase):
async def test_foo(self):
registry = project_registry.ProjectRegistry(
event_loop=self.loop,
tmp_dir=TEST_OPTS.TMP_DIR,
server=self.server,
process_manager=self.process_manager_client,
node_db=self.node_db,
urid_mapper=self.urid_mapper,
)
class OpenProjectDialogTest(uitest.UITestCase):
async def test_show(self):
registry = project_registry.ProjectRegistry(context=self.context)
await registry.setup()
try:
open_project_dialog.OpenProjectDialog(
dialog = open_project_dialog.OpenProjectDialog(
project_registry=registry)
dialog.show()
finally:
await registry.cleanup()

@ -20,26 +20,22 @@
#
# @end:license
import asyncio
import logging
import os.path
from typing import Dict, List, Iterable
from typing import Any, Dict, List, Iterable
from PyQt5 import QtCore
from noisicaa import lv2
from noisicaa import music
from noisicaa.core import ipc
from noisicaa import node_db as node_db_lib
from . import ui_base
logger = logging.getLogger(__name__)
class Project(object):
def __init__(
self,
path: str,
) -> None:
class Project(ui_base.CommonMixin, object):
def __init__(self, *, path: str, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.path = path
self.client = None # type: music.ProjectClient
@ -47,61 +43,23 @@ class Project(object):
def name(self) -> str:
return os.path.splitext(os.path.basename(self.path))[0]
async def __create_process(
self, *,
event_loop: asyncio.AbstractEventLoop,
server: ipc.Server,
process_manager: ipc.Stub,
node_db: node_db_lib.NodeDBClient,
urid_mapper: lv2.ProxyURIDMapper,
tmp_dir: str
) -> None:
async def __create_process(self) -> None:
self.client = music.ProjectClient(
event_loop=event_loop,
server=server,
node_db=node_db,
urid_mapper=urid_mapper,
manager=process_manager,
tmp_dir=tmp_dir,
event_loop=self.event_loop,
server=self.app.process.server,
node_db=self.app.node_db,
urid_mapper=self.app.urid_mapper,
manager=self.app.process.manager,
tmp_dir=self.app.process.tmp_dir,
)
await self.client.setup()
async def open(
self, *,
event_loop: asyncio.AbstractEventLoop,
server: ipc.Server,
process_manager: ipc.Stub,
node_db: node_db_lib.NodeDBClient,
urid_mapper: lv2.ProxyURIDMapper,
tmp_dir: str
) -> None:
await self.__create_process(
event_loop=event_loop,
server=server,
node_db=node_db,
urid_mapper=urid_mapper,
process_manager=process_manager,
tmp_dir=tmp_dir,
)
async def open(self) -> None:
await self.__create_process()
await self.client.open(self.path)
async def create(
self, *,
event_loop: asyncio.AbstractEventLoop,
server: ipc.Server,
process_manager: ipc.Stub,
node_db: node_db_lib.NodeDBClient,
urid_mapper: lv2.ProxyURIDMapper,
tmp_dir: str
) -> None:
await self.create_process(
event_loop=event_loop,
server=server,
node_db=node_db,
urid_mapper=urid_mapper,
process_manager=process_manager,
tmp_dir=tmp_dir,
)
async def create(self) -> None:
await self.__create_process()
await self.client.create(self.path)
async def close(self) -> None:
@ -111,11 +69,10 @@ class Project(object):
self.client = None
class ProjectRegistry(QtCore.QObject):
def __init__(self, event_loop: asyncio.AbstractEventLoop) -> None:
super().__init__()
class ProjectRegistry(ui_base.CommonMixin, QtCore.QObject):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.__event_loop = event_loop
self.__projects = {} # type: Dict[str, Project]
@property
@ -126,7 +83,7 @@ class ProjectRegistry(QtCore.QObject):
# TODO: get list of directories from settings
directories = ['~/Music/Noisicaä', '/lala']
projects = await self.__event_loop.run_in_executor(None, self.__scan_projects, directories)
projects = await self.event_loop.run_in_executor(None, self.__scan_projects, directories)
self.__projects = {project.path: project for project in projects}
async def cleanup(self) -> None:
@ -147,7 +104,7 @@ class ProjectRegistry(QtCore.QObject):
dirnames.remove(data_dir_name)
filepath = os.path.join(dirpath, filename)
projects.append(Project(filepath))
projects.append(Project(path=filepath, context=self.context))
return projects

@ -20,30 +20,12 @@
#
# @end:license
import os.path
from PyQt5.QtCore import Qt
from PyQt5 import QtCore
from noisidev import uitest
from noisidev import unittest_mixins
from noisicaa.constants import TEST_OPTS
from . import project_registry
class ProjectRegistryTest(
unittest_mixins.NodeDBMixin,
unittest_mixins.URIDMapperMixin,
unittest_mixins.ServerMixin,
uitest.UITestCase):
async def test_foo(self):
registry = project_registry.ProjectRegistry(
event_loop=self.loop,
tmp_dir=TEST_OPTS.TMP_DIR,
server=self.server,
process_manager=self.process_manager_client,
node_db=self.node_db,
urid_mapper=self.urid_mapper,
)
class ProjectRegistryTest(uitest.UITestCase):
async def test_setup(self):
registry = project_registry.ProjectRegistry(context=self.context)
await registry.setup()
await registry.cleanup()

@ -34,7 +34,6 @@ from noisicaa import audioproc
from noisicaa import music
from noisicaa import core
from . import selection_set as selection_set_lib
from . import project_registry
if typing.TYPE_CHECKING:
from . import device_list
@ -42,6 +41,7 @@ if typing.TYPE_CHECKING:
from noisicaa import node_db as node_db_lib
from noisicaa import runtime_settings as runtime_settings_lib
from noisicaa import lv2
from . import project_registry
class CommonContext(object):
@ -131,7 +131,7 @@ class CommonMixin(object):
class ProjectContext(CommonContext):
def __init__(
self, *,
project_connection: project_registry.Project,
project_connection: 'project_registry.Project',
selection_set: selection_set_lib.SelectionSet,
project_view: 'AbstractProjectView',
**kwargs: Any) -> None:
@ -149,7 +149,7 @@ class ProjectContext(CommonContext):
return self.__project_view
@property
def project_connection(self) -> project_registry.Project:
def project_connection(self) -> 'project_registry.Project':
return self.__project_connection
@property
@ -181,7 +181,7 @@ class ProjectMixin(CommonMixin):
return self._context.selection_set
@property
def project_connection(self) -> project_registry.Project:
def project_connection(self) -> 'project_registry.Project':
return self._context.project_connection
@property
@ -262,7 +262,7 @@ class AbstractEditorApp(object):
async def openProject(self, path: str) -> None:
raise NotImplementedError
async def removeProject(self, project_connection: project_registry.Project) -> None:
async def removeProject(self, project_connection: 'project_registry.Project') -> None:
raise NotImplementedError
def crashWithMessage(self, title: str, msg: str) -> None:

Loading…
Cancel
Save