From 24913221caf8a9d7b4add45ccace3d299a5c40a6 Mon Sep 17 00:00:00 2001 From: tobias <tobias@thecodedev.de> Date: Fri, 6 Sep 2019 21:30:55 +0200 Subject: [PATCH] Rewrite project open method; fixed playout log project switch error --- .../java/de/tobias/playpad/PlayPadImpl.java | 35 ++++++++++++++----- .../DesktopMenuToolbarViewController.java | 32 +++++------------ .../playpad/viewcontroller/LaunchDialog.java | 15 ++------ .../main/MainViewController.java | 25 ++++++------- .../initialize/OpenLastDocumentTask.scala | 7 ++-- .../initialize/ProjectParameterOpenTask.scala | 6 +--- .../main/java/de/tobias/playpad/PlayPad.java | 10 ++++-- .../tobias/playpad/plugin/GlobalAdapter.java | 16 +++++++++ .../tobias/playpad/plugin/GlobalListener.java | 4 ++- .../main/IMainViewController.java | 2 ++ .../resources/lang/playoutlog_de.properties | 2 +- .../plugin/playout/ProjectListener.scala | 12 ++++--- .../websocket/listener/ProjectListener.scala | 12 +++++++ .../websocket/methods/ProjectOpenMethod.scala | 12 ++----- 14 files changed, 107 insertions(+), 83 deletions(-) create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalAdapter.java create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index 5d28708b..61fa1739 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java @@ -13,17 +13,26 @@ import de.tobias.playpad.design.ModernDesignHandler; import de.tobias.playpad.initialize.*; import de.tobias.playpad.log.LogSeasons; import de.tobias.playpad.plugin.*; +import de.tobias.playpad.profile.ProfileNotFoundException; import de.tobias.playpad.project.Project; +import de.tobias.playpad.project.ProjectNotFoundException; +import de.tobias.playpad.project.ProjectReader; +import de.tobias.playpad.project.loader.ProjectLoader; +import de.tobias.playpad.project.ref.ProjectReference; import de.tobias.playpad.server.ConnectionState; import de.tobias.playpad.server.Server; import de.tobias.playpad.server.Session; import de.tobias.playpad.server.SessionDelegate; import de.tobias.playpad.settings.GlobalSettings; +import de.tobias.playpad.viewcontroller.dialog.project.ProjectLoadDialog; +import de.tobias.playpad.viewcontroller.dialog.project.ProjectReaderDelegateImpl; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MainViewController; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.image.Image; +import javafx.stage.Window; +import org.dom4j.DocumentException; import java.io.IOException; import java.nio.file.Path; @@ -161,12 +170,24 @@ public class PlayPadImpl implements PlayPad { } @Override - public void openProject(Project project, Consumer<NVC> onLoaded) { + public void openProject(ProjectReference projectReference, Consumer<NVC> onLoaded) throws ProjectNotFoundException, ProjectReader.ProjectReaderDelegate.ProfileAbortException, ProfileNotFoundException, DocumentException, IOException { + if (mainViewController != null) { + mainViewController.closeProject(); + globalListeners.forEach(l -> l.projectClosed(currentProject)); + } + + Window owner = mainViewController != null ? mainViewController.getContainingWindow() : null; + + ProjectLoader loader = new ProjectLoader(projectReference); + loader.setDelegate(ProjectReaderDelegateImpl.getInstance(owner)); + loader.setListener(new ProjectLoadDialog()); + + currentProject = loader.load(); + if (mainViewController == null) { mainViewController = new MainViewController(e -> { - currentProject = project; - mainViewController.openProject(project); - globalListeners.forEach(l -> l.currentProjectDidChanged(project)); + mainViewController.openProject(currentProject); + globalListeners.forEach(l -> l.projectOpened(currentProject)); if (onLoaded != null) { onLoaded.accept(e); } @@ -174,10 +195,8 @@ public class PlayPadImpl implements PlayPad { Platform.setImplicitExit(true); }); } else { - currentProject = project; - mainViewController.openProject(project); - - globalListeners.forEach(l -> l.currentProjectDidChanged(project)); + mainViewController.openProject(currentProject); + globalListeners.forEach(l -> l.projectOpened(currentProject)); } } diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index 9db4259e..ef21688a 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -24,8 +24,7 @@ import de.tobias.playpad.profile.ref.ProfileReference; import de.tobias.playpad.profile.ref.ProfileReferenceManager; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectNotFoundException; -import de.tobias.playpad.project.ProjectReader; -import de.tobias.playpad.project.loader.ProjectLoader; +import de.tobias.playpad.project.ProjectReader.ProjectReaderDelegate.ProfileAbortException; import de.tobias.playpad.project.page.Page; import de.tobias.playpad.project.ref.ProjectReference; import de.tobias.playpad.project.ref.ProjectReferenceManager; @@ -41,7 +40,6 @@ import de.tobias.playpad.viewcontroller.dialog.AboutDialog; import de.tobias.playpad.viewcontroller.dialog.ModernPluginViewController; import de.tobias.playpad.viewcontroller.dialog.PrintDialog; import de.tobias.playpad.viewcontroller.dialog.ProfileViewController; -import de.tobias.playpad.viewcontroller.dialog.project.ProjectLoadDialog; import de.tobias.playpad.viewcontroller.dialog.project.ProjectManagerDialog; import de.tobias.playpad.viewcontroller.dialog.project.ProjectNewDialog; import de.tobias.playpad.viewcontroller.dialog.project.ProjectReaderDelegateImpl; @@ -491,10 +489,8 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro ProjectNewDialog dialog = new ProjectNewDialog(mainViewController.getStage()); dialog.showAndWait().ifPresent(projectReference -> { try { - ProjectLoader loader = new ProjectLoader(projectReference); - Project project = loader.load(); - PlayPadMain.getProgramInstance().openProject(project, null); - } catch (DocumentException | IOException | ProjectNotFoundException | ProfileNotFoundException | ProjectReader.ProjectReaderDelegate.ProfileAbortException e) { + PlayPadMain.getProgramInstance().openProject(projectReference, null); + } catch (DocumentException | IOException | ProjectNotFoundException | ProfileNotFoundException | ProfileAbortException e) { Logger.error(e); } }); @@ -513,13 +509,8 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro if (result.isPresent()) { ProjectReference ref = result.get(); - ProjectReader.ProjectReaderDelegate delegate = ProjectReaderDelegateImpl.getInstance(stage); try { - ProjectLoader loader = new ProjectLoader(result.get()); - loader.setDelegate(delegate); - loader.setListener(new ProjectLoadDialog()); - Project project = loader.load(); - PlayPadMain.getProgramInstance().openProject(project, null); + PlayPadMain.getProgramInstance().openProject(ref, null); createRecentDocumentMenuItems(); } catch (ProfileNotFoundException e) { @@ -533,8 +524,8 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro // Neues Profile wählen ProfileReference profile = null; try { - profile = delegate.getProfileReference(); - } catch (ProjectReader.ProjectReaderDelegate.ProfileAbortException ignored) { + profile = ProjectReaderDelegateImpl.getInstance(stage).getProfileReference(); + } catch (ProfileAbortException ignored) { } ref.setProfileReference(profile); } catch (ProjectNotFoundException e) { @@ -787,14 +778,9 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro MenuItem item = (MenuItem) event.getSource(); ProjectReference ref = (ProjectReference) item.getUserData(); - ProjectReader.ProjectReaderDelegate delegate = ProjectReaderDelegateImpl.getInstance(getContainingWindow()); try { // Speichern das alte Project in mvc.setProject(Project) - ProjectLoader loader = new ProjectLoader(ref); - loader.setDelegate(delegate); - loader.setListener(new ProjectLoadDialog()); - Project project = loader.load(); - PlayPadMain.getProgramInstance().openProject(project, null); + PlayPadMain.getProgramInstance().openProject(ref, null); } catch (ProfileNotFoundException e) { Logger.error(e); mainViewController.showError( @@ -803,8 +789,8 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro // Neues Profile wählen ProfileReference profile = null; try { - profile = delegate.getProfileReference(); - } catch (ProjectReader.ProjectReaderDelegate.ProfileAbortException ignored) { + profile = ProjectReaderDelegateImpl.getInstance(getContainingWindow()).getProfileReference(); + } catch (ProfileAbortException ignored) { } ref.setProfileReference(profile); } catch (ProjectNotFoundException e) { diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java index e1a5c599..ef0c65d9 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java @@ -14,18 +14,15 @@ import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.Strings; import de.tobias.playpad.profile.ProfileNotFoundException; import de.tobias.playpad.profile.ref.ProfileReference; -import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectNotFoundException; import de.tobias.playpad.project.ProjectReader; import de.tobias.playpad.project.importer.ProjectImporter; -import de.tobias.playpad.project.loader.ProjectLoader; import de.tobias.playpad.project.ref.ProjectReference; import de.tobias.playpad.project.ref.ProjectReferenceManager; import de.tobias.playpad.server.*; import de.tobias.playpad.viewcontroller.cell.ProjectCell; import de.tobias.playpad.viewcontroller.dialog.ModernPluginViewController; import de.tobias.playpad.viewcontroller.dialog.project.ProjectImportDialog; -import de.tobias.playpad.viewcontroller.dialog.project.ProjectLoadDialog; import de.tobias.playpad.viewcontroller.dialog.project.ProjectNewDialog; import de.tobias.playpad.viewcontroller.dialog.project.ProjectReaderDelegateImpl; import javafx.application.Platform; @@ -259,7 +256,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> Server server = PlayPadPlugin.getServerHandler().getServer(); server.connectionStateProperty().removeListener(this); - // Es fehlen Module + // Modules missing if (!ref.getMissedModules().isEmpty()) { showInfoMessage(Localization.getString(Strings.ERROR_PLUGINS_MISSING)); @@ -267,14 +264,8 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> pluginViewController.getStageContainer().ifPresent(NVCStage::showAndWait); } - ProjectReader.ProjectReaderDelegate delegate = ProjectReaderDelegateImpl.getInstance(getContainingWindow()); try { - ProjectLoader loader = new ProjectLoader(ref); - loader.setDelegate(delegate); - loader.setListener(new ProjectLoadDialog()); - - Project project = loader.load(); - PlayPadMain.getProgramInstance().openProject(project, e -> getStageContainer().ifPresent(NVCStage::close)); + PlayPadMain.getProgramInstance().openProject(ref, e -> getStageContainer().ifPresent(NVCStage::close)); } catch (ProfileNotFoundException e) { Logger.error(e); showErrorMessage(getString(Strings.ERROR_PROFILE_NOT_FOUND, ref.getProfileReference(), e.getLocalizedMessage())); @@ -282,7 +273,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> // Choose new profile ProfileReference profile = null; try { - profile = delegate.getProfileReference(); + profile = ProjectReaderDelegateImpl.getInstance(getContainingWindow()).getProfileReference(); } catch (ProjectReader.ProjectReaderDelegate.ProfileAbortException ignored) { } ref.setProfileReference(profile); diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java index c20e5b21..fa81a081 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -226,27 +226,22 @@ public class MainViewController extends NVC implements IMainViewController, Noti private void initKeyboardMapper() { registerKeyboardListener(KeyEvent.ANY, event -> { if (event.getTarget() instanceof AnchorPane) { - if(!event.isShortcutDown()) - { + if (!event.isShortcutDown()) { KeyCode code = null; KeyEventType type = null; - if(event.getEventType() == KeyEvent.KEY_PRESSED) - { + if (event.getEventType() == KeyEvent.KEY_PRESSED) { code = event.getCode(); type = KeyEventType.DOWN; - } - else if(event.getEventType() == KeyEvent.KEY_RELEASED) - { + } else if (event.getEventType() == KeyEvent.KEY_RELEASED) { code = event.getCode(); type = KeyEventType.UP; } // Only execute this, then the right event is triggered and this var is set - if(code != null) - { + if (code != null) { de.thecodelabs.midi.event.KeyEvent keyEvent = new de.thecodelabs.midi.event.KeyEvent(KeyType.KEYBOARD, type, code.ordinal()); KeyEventDispatcher.dispatchEvent(keyEvent); } @@ -377,7 +372,7 @@ public class MainViewController extends NVC implements IMainViewController, Noti } @Override - public void openProject(Project project) { + public void closeProject() { // Remove old listener if (this.openProject != null) { this.openProject.getProjectReference().nameProperty().removeListener(projectTitleListener); @@ -385,8 +380,15 @@ public class MainViewController extends NVC implements IMainViewController, Noti this.openProject.notFoundMediaProperty().removeListener(notFoundListener); this.openProject.close(); } - removePadContentsFromView(); + this.openProject = null; + } + + @Override + public void openProject(Project project) { + if (this.openProject != null) { + closeProject(); + } openProject = project; @@ -563,7 +565,6 @@ public class MainViewController extends NVC implements IMainViewController, Noti } } - @Override public void setGridColor(Color color) { this.gridColor = color; try { diff --git a/PlayWall/src/main/scala/de/tobias/playpad/initialize/OpenLastDocumentTask.scala b/PlayWall/src/main/scala/de/tobias/playpad/initialize/OpenLastDocumentTask.scala index 1622ce50..6d03affb 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/initialize/OpenLastDocumentTask.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/initialize/OpenLastDocumentTask.scala @@ -1,9 +1,9 @@ package de.tobias.playpad.initialize + import java.util.UUID import de.thecodelabs.utils.application import de.tobias.playpad.PlayPadImpl -import de.tobias.playpad.project.loader.ProjectLoader import de.tobias.playpad.project.ref.ProjectReferenceManager class OpenLastDocumentTask extends PlayPadInitializeTask { @@ -13,10 +13,7 @@ class OpenLastDocumentTask extends PlayPadInitializeTask { if (instance.getGlobalSettings.isOpenLastDocument) { val value = app.getUserDefaults.getData("project").asInstanceOf[UUID] if (value != null) { - val loader = new ProjectLoader(ProjectReferenceManager.getProject(value)) - val project = loader.load - instance.openProject(project, null) - + instance.openProject(ProjectReferenceManager.getProject(value), null) throw new PlayPadInitializeAbortException(this) } } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/initialize/ProjectParameterOpenTask.scala b/PlayWall/src/main/scala/de/tobias/playpad/initialize/ProjectParameterOpenTask.scala index 6a8fd104..a659cbc9 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/initialize/ProjectParameterOpenTask.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/initialize/ProjectParameterOpenTask.scala @@ -4,7 +4,6 @@ import java.util.UUID import de.thecodelabs.utils.application import de.tobias.playpad.PlayPadImpl -import de.tobias.playpad.project.loader.ProjectLoader import de.tobias.playpad.project.ref.ProjectReferenceManager ; @@ -18,10 +17,7 @@ class ProjectParameterOpenTask extends PlayPadInitializeTask { if (!parameter.getRaw.isEmpty) { if (parameter.getNamed.containsKey("project")) { val uuid = UUID.fromString(parameter.getNamed.get("project")) - val loader = new ProjectLoader(ProjectReferenceManager.getProject(uuid)) - val project = loader.load - instance.openProject(project, null) - + instance.openProject(ProjectReferenceManager.getProject(uuid), null) throw new PlayPadInitializeAbortException(this) } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java b/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java index 58f86d87..7b146c29 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java @@ -6,11 +6,17 @@ import de.tobias.playpad.plugin.GlobalListener; import de.tobias.playpad.plugin.PadListener; import de.tobias.playpad.plugin.SettingsListener; import de.tobias.playpad.plugin.WindowListener; +import de.tobias.playpad.profile.ProfileNotFoundException; import de.tobias.playpad.project.Project; +import de.tobias.playpad.project.ProjectNotFoundException; +import de.tobias.playpad.project.ProjectReader.ProjectReaderDelegate.ProfileAbortException; +import de.tobias.playpad.project.ref.ProjectReference; import de.tobias.playpad.settings.GlobalSettings; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.scene.image.Image; +import org.dom4j.DocumentException; +import java.io.IOException; import java.util.List; import java.util.function.Consumer; @@ -117,10 +123,10 @@ public interface PlayPad { /** * Open a project * - * @param project project + * @param projectReference project reference * @param onLoaded on project loaded callback */ - void openProject(Project project, Consumer<NVC> onLoaded); + void openProject(ProjectReference projectReference, Consumer<NVC> onLoaded) throws ProjectNotFoundException, ProfileAbortException, ProfileNotFoundException, DocumentException, IOException; UpdateService getUpdateService(); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalAdapter.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalAdapter.java new file mode 100644 index 00000000..fa59a432 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalAdapter.java @@ -0,0 +1,16 @@ +package de.tobias.playpad.plugin; + +import de.tobias.playpad.project.Project; + +public class GlobalAdapter implements GlobalListener { + + @Override + public void projectOpened(Project newProject) { + + } + + @Override + public void projectClosed(Project currentProject) { + + } +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalListener.java index 2d89b1d0..0885b0c3 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/GlobalListener.java @@ -4,5 +4,7 @@ import de.tobias.playpad.project.Project; public interface GlobalListener { - void currentProjectDidChanged(Project newProject); + void projectOpened(Project newProject); + + void projectClosed(Project currentProject); } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/IMainViewController.java index 8d3c1177..74d3f11e 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/IMainViewController.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/IMainViewController.java @@ -104,6 +104,8 @@ public interface IMainViewController extends NotificationHandler, Alertable { */ boolean showPage(Page page); + void closeProject(); + /** * Opens a project * diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources/lang/playoutlog_de.properties b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources/lang/playoutlog_de.properties index 14b1772a..8ec96c7c 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources/lang/playoutlog_de.properties +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources/lang/playoutlog_de.properties @@ -2,7 +2,7 @@ UI.Dialog.PlayoutLog.Title=PlayoutLog main.menuitem.log=Playout Log... PlayoutLogDialog.Label.Headline=PlayOut Log -PlayoutLogDialog.Checkbox.AutoStart=Automatisch Starten bei Programmstart +PlayoutLogDialog.Checkbox.AutoStart=Automatisch starten bei Programmstart PlayoutLogDialog.Button.Start=Starten PlayoutLogDialog.Button.Stop=Stoppen PlayoutLogDialog.Button.Export=Exportieren... diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/scala/de/tobias/playpad/plugin/playout/ProjectListener.scala b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/scala/de/tobias/playpad/plugin/playout/ProjectListener.scala index 348472da..3748f689 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/scala/de/tobias/playpad/plugin/playout/ProjectListener.scala +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/scala/de/tobias/playpad/plugin/playout/ProjectListener.scala @@ -5,23 +5,27 @@ import java.text.SimpleDateFormat import de.thecodelabs.logger.Logger import de.thecodelabs.storage.proxy.SettingsProxy import de.tobias.playpad.log.LogSeasons -import de.tobias.playpad.plugin.GlobalListener +import de.tobias.playpad.plugin.GlobalAdapter import de.tobias.playpad.plugin.playout.storage.PlayoutLogSettings import de.tobias.playpad.project.Project -class ProjectListener extends GlobalListener { +class ProjectListener extends GlobalAdapter { private val dateFormatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss") + private val nameFormat = "%s (%s)" - override def currentProjectDidChanged(newProject: Project): Unit = { + override def projectOpened(newProject: Project): Unit = { val autoStart = SettingsProxy.getSettings(classOf[PlayoutLogSettings]).autoStartLogging() if (autoStart) { Logger.info("Start new PlayOutLog session") val settings = newProject.getSettings - val logSeason = LogSeasons.createLogSeason(dateFormatter.format(System.currentTimeMillis), settings.getColumns, settings.getRows) + val logName = String.format(nameFormat, dateFormatter.format(System.currentTimeMillis), newProject.getProjectReference.getName) + val logSeason = LogSeasons.createLogSeason(logName, settings.getColumns, settings.getRows) logSeason.createProjectSnapshot(newProject) } } + + override def projectClosed(currentProject: Project): Unit = LogSeasons.stop() } diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala new file mode 100644 index 00000000..a099218e --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala @@ -0,0 +1,12 @@ +package de.tobias.playpad.plugin.api.websocket.listener + +import de.tobias.playpad.plugin.GlobalAdapter +import de.tobias.playpad.plugin.api.websocket.WebSocketHandler +import de.tobias.playpad.plugin.api.websocket.serialize.ProjectSerializer +import de.tobias.playpad.project.Project + +class ProjectListener extends GlobalAdapter { + override def projectOpened(newProject: Project): Unit = { + WebSocketHandler.instance.sendUpdate("project-changed", ProjectSerializer.serializeProject(newProject)) + } +} diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectOpenMethod.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectOpenMethod.scala index 793bad02..150f1f5a 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectOpenMethod.scala +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectOpenMethod.scala @@ -4,10 +4,8 @@ import java.util.UUID import com.google.gson.JsonObject import de.tobias.playpad.PlayPadPlugin +import de.tobias.playpad.plugin.api.websocket.MethodExecutable import de.tobias.playpad.plugin.api.websocket.message.Message -import de.tobias.playpad.plugin.api.websocket.serialize.ProjectSerializer -import de.tobias.playpad.plugin.api.websocket.{MethodExecutable, WebSocketHandler} -import de.tobias.playpad.project.loader.ProjectLoader import de.tobias.playpad.project.ref.ProjectReferenceManager import javafx.application.Platform import org.eclipse.jetty.websocket.api.Session @@ -17,13 +15,7 @@ class ProjectOpenMethod extends MethodExecutable { val requestedId = UUID.fromString(message.payload.get("id").getAsString) val reference = ProjectReferenceManager.getProject(requestedId) - Platform.runLater(() => { - val project = new ProjectLoader(reference).load() - - PlayPadPlugin.getInstance().openProject(project, _ => { - WebSocketHandler.sendResponse(session, message, ProjectSerializer.serializeProject(project)) - }) - }) + Platform.runLater(() => PlayPadPlugin.getInstance().openProject(reference, null)) null } } -- GitLab