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