From 32ac154f65fcb40b854a198575e174cd198956aa Mon Sep 17 00:00:00 2001 From: pengzhile Date: Wed, 11 Nov 2020 20:19:39 +0800 Subject: [PATCH] add option "Auto reset before per restart" Signed-off-by: pengzhile --- build.gradle | 4 +- .../intellij/ier/component/ResetTimer.java | 16 +++--- .../ier/listener/AppEventListener.java | 51 +++++++++++++++++++ .../intellij/ier/ui/form/MainForm.form | 2 +- .../intellij/ier/ui/form/MainForm.java | 2 + 5 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 src/main/java/io/zhile/research/intellij/ier/listener/AppEventListener.java diff --git a/build.gradle b/build.gradle index 8e529e0..a09832f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'io.zhile.research.intellij' -version '2.0.4' +version '2.1.0' sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -29,6 +29,8 @@ intellij { patchPluginXml { changeNotes """
+Release v2.1.0
+  1. add option "Auto reset before per restart"
 Release v2.0.4
   1. fix plugins reset
   2. reset more gracefully
diff --git a/src/main/java/io/zhile/research/intellij/ier/component/ResetTimer.java b/src/main/java/io/zhile/research/intellij/ier/component/ResetTimer.java
index 4fc5f9b..230e01b 100644
--- a/src/main/java/io/zhile/research/intellij/ier/component/ResetTimer.java
+++ b/src/main/java/io/zhile/research/intellij/ier/component/ResetTimer.java
@@ -1,9 +1,11 @@
 package io.zhile.research.intellij.ier.component;
 
+import com.intellij.ide.AppLifecycleListener;
 import com.intellij.ide.Prefs;
 import com.intellij.notification.Notification;
 import com.intellij.notification.NotificationType;
 import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
 import io.zhile.research.intellij.ier.action.RestartAction;
@@ -11,6 +13,7 @@ import io.zhile.research.intellij.ier.common.Resetter;
 import io.zhile.research.intellij.ier.helper.Constants;
 import io.zhile.research.intellij.ier.helper.DateTime;
 import io.zhile.research.intellij.ier.helper.NotificationHelper;
+import io.zhile.research.intellij.ier.listener.AppEventListener;
 
 import java.util.Arrays;
 import java.util.Timer;
@@ -36,6 +39,8 @@ public class ResetTimer {
     }
 
     public void start(final AnAction resetAction) {
+        ApplicationManager.getApplication().getMessageBus().connect().subscribe(AppLifecycleListener.TOPIC, new AppEventListener());
+
         new Timer().schedule(new TimerTask() {
             @Override
             public void run() {
@@ -60,17 +65,8 @@ public class ResetTimer {
                     break;
                 }
 
-                AnAction action = resetAction;
+                AnAction action = Resetter.isAutoReset() ? new RestartAction() : resetAction;
                 String message = "It has been a long time since the last reset!\nWould you like to reset it again?";
-
-                if (Resetter.isAutoReset()) {
-                    Resetter.reset(Resetter.getEvalRecords());
-                    ResetTimer.resetLastResetTime();
-
-                    action = new RestartAction();
-                    message = "Automatic reset successfully!\nWould like to restart your IDE?";
-                }
-
                 Notification notification = NotificationHelper.NOTIFICATION_GROUP.createNotification(Constants.PLUGIN_NAME, null, message, NotificationType.INFORMATION);
                 notification.addAction(action);
 
diff --git a/src/main/java/io/zhile/research/intellij/ier/listener/AppEventListener.java b/src/main/java/io/zhile/research/intellij/ier/listener/AppEventListener.java
new file mode 100644
index 0000000..48c2bb8
--- /dev/null
+++ b/src/main/java/io/zhile/research/intellij/ier/listener/AppEventListener.java
@@ -0,0 +1,51 @@
+package io.zhile.research.intellij.ier.listener;
+
+import com.intellij.ide.AppLifecycleListener;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Ref;
+import io.zhile.research.intellij.ier.common.Resetter;
+import io.zhile.research.intellij.ier.component.ResetTimer;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class AppEventListener implements AppLifecycleListener {
+    private static boolean enabled = true;
+
+    public synchronized static void disable() {
+        enabled = false;
+    }
+
+    public void appFrameCreated(String[] commandLineArgs, @NotNull Ref willOpenProject) {
+
+    }
+
+    @Override
+    public void appStarting(@Nullable Project projectFromCommandLine) {
+
+    }
+
+    @Override
+    public void projectFrameClosed() {
+
+    }
+
+    @Override
+    public void projectOpenFailed() {
+
+    }
+
+    @Override
+    public void welcomeScreenDisplayed() {
+
+    }
+
+    @Override
+    public void appClosing() {
+        if (!enabled || !Resetter.isAutoReset()) {
+            return;
+        }
+
+        Resetter.reset(Resetter.getEvalRecords());
+        ResetTimer.resetLastResetTime();
+    }
+}
diff --git a/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.form b/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.form
index 0f4ee58..151f0c4 100644
--- a/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.form
+++ b/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.form
@@ -34,7 +34,7 @@
           
             
             
-              
+              
             
           
           
diff --git a/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java b/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java
index 39854eb..6d199b9 100644
--- a/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java
+++ b/src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java
@@ -8,6 +8,7 @@ import io.zhile.research.intellij.ier.common.EvalRecord;
 import io.zhile.research.intellij.ier.common.Resetter;
 import io.zhile.research.intellij.ier.component.ResetTimer;
 import io.zhile.research.intellij.ier.helper.Constants;
+import io.zhile.research.intellij.ier.listener.AppEventListener;
 
 import javax.swing.*;
 import java.awt.*;
@@ -96,6 +97,7 @@ public class MainForm {
             dialogWrapper.close(0);
         }
 
+        AppEventListener.disable();
         ApplicationManager.getApplication().invokeLater(() -> ApplicationManager.getApplication().restart());
     }