From 0e04d168e74d0f2f723a91cd612c96daee4a5502 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 10 May 2017 16:12:46 +0200 Subject: [PATCH] auto-save improvement --- .../src/org/diylc/common/IPlugInPort.java | 1 + .../src/org/diylc/presenter/Presenter.java | 2 +- .../plugins/autosave/AutoSavePlugin.java | 20 +++++++++++++++++-- diylc/diylc-swing/update.xml | 4 ++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index 9b3991af..17f22e76 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -42,6 +42,7 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final String CONTINUOUS_CREATION_KEY = "continuousCreation"; public static final String AUTO_EDIT_KEY = "autoEdit"; public static final String ABNORMAL_EXIT_KEY = "abnormalExit"; + public static final String HEARTBEAT = "heartbeat"; public static final String WHEEL_ZOOM_KEY = "wheelZoom"; public static final String OUTLINE_KEY = "outline"; public static final String THEME_KEY = "theme"; diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index b096bb0e..6317b5a5 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -366,7 +366,7 @@ public class Presenter implements IPlugInPort { for (Class clazz : classes) { if (IAutoCreator.class.isAssignableFrom(clazz)) { autoCreators.add((IAutoCreator) clazz.newInstance()); - LOG.debug("Loaded auto-cretor: " + clazz.getName()); + LOG.debug("Loaded auto-creator: " + clazz.getName()); } } } catch (Exception e) { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/autosave/AutoSavePlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/autosave/AutoSavePlugin.java index 54c06dd7..28d346de 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/autosave/AutoSavePlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/autosave/AutoSavePlugin.java @@ -1,6 +1,7 @@ package org.diylc.swing.plugins.autosave; import java.io.File; +import java.util.Date; import java.util.EnumSet; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -41,9 +42,12 @@ public class AutoSavePlugin implements IPlugIn { @Override public void run() { boolean wasAbnormal = ConfigurationManager.getInstance().readBoolean(IPlugInPort.ABNORMAL_EXIT_KEY, false); + Date lastHeartbeat = (Date) ConfigurationManager.getInstance().readObject(IPlugInPort.HEARTBEAT, new Date()); + long msSinceHeartbeat = new Date().getTime() - lastHeartbeat.getTime(); File autoSaved = new File(AUTO_SAVE_FILE_NAME); if (autoSaved.exists()) - if (wasAbnormal) { + // try to figure out if another instance is running. Only pull auto-saved file if there's no recent heartbeat + if (wasAbnormal && msSinceHeartbeat > autoSaveFrequency) { IPlugInPort testPresenter = new Presenter(new DummyView()); testPresenter.loadProjectFromFile(AUTO_SAVE_FILE_NAME); // Only prompt if there is something saved in the @@ -51,7 +55,7 @@ public class AutoSavePlugin implements IPlugIn { if (!testPresenter.getCurrentProject().getComponents().isEmpty()) { int decision = view.showConfirmDialog( - "It appears that aplication was not closed normally in the previous session. Do you want to open the last auto-saved file?", + "It appears that application was not closed normally in the previous session. Do you want to open the last auto-saved file?", "Auto-Save", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE); if (decision == IView.YES_OPTION) { AutoSavePlugin.this.plugInPort.loadProjectFromFile(AUTO_SAVE_FILE_NAME); @@ -64,6 +68,18 @@ public class AutoSavePlugin implements IPlugIn { ConfigurationManager.getInstance().writeValue(IPlugInPort.ABNORMAL_EXIT_KEY, true); } }); + // write heartbeat periodically + new Thread(new Runnable() { + + @Override + public void run() { + try { + Thread.sleep(autoSaveFrequency); + } catch (InterruptedException e) { + } + ConfigurationManager.getInstance().writeValue(IPlugInPort.HEARTBEAT, new Date()); + } + }).start(); } @Override diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 0f682498..536a0303 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1822,6 +1822,10 @@ NEW_FEATURE Using right click to draw a selection rectangle doesn't move objects under the cursor (useful for selecting multiple components that have a big board below) + + BUG_FIX + Auto-save dialog pops up when running multiple instances of the app at the same time + https://github.com/bancika/diy-layout-creator/releases