add option: Reset Automatically

Signed-off-by: pengzhile <pengzhile@gmail.com>
pull/8/head
pengzhile 4 years ago
parent 7932de383a
commit 26b65b36e5

@ -4,7 +4,7 @@ plugins {
}
group 'io.zhile.research.intellij'
version '2.0.0'
version '2.0.1'
sourceCompatibility = 1.7
targetCompatibility = 1.7
@ -28,18 +28,21 @@ intellij {
}
patchPluginXml {
changeNotes """
release v2.0.0
1. add ui
2. more stable and accurate
release v1.0.5
1. update for 2020.2.x
release v1.0.4
1. reset completely
release v1.0.3
1. bug fix
release v1.0.2
1. compatibility fix"""
changeNotes """<pre>
Release v2.0.1
1. add option: Reset Automatically
Release v2.0.0
1. add ui
2. more stable and accurate
Release v1.0.5
1. update for 2020.2.x
Release v1.0.4
1. reset completely
Release v1.0.3
1. bug fix
Release v1.0.2
1. compatibility fix
</pre>"""
sinceBuild "145.258"
untilBuild null

@ -1,29 +1,62 @@
package io.zhile.research.intellij.ier.action;
import com.intellij.icons.AllIcons;
import com.intellij.notification.Notification;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowEP;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
import io.zhile.research.intellij.ier.component.ResetTimer;
import io.zhile.research.intellij.ier.helper.Constants;
import io.zhile.research.intellij.ier.helper.ProjectHelper;
import io.zhile.research.intellij.ier.tw.MainToolWindowFactory;
import io.zhile.research.intellij.ier.ui.dialog.MainDialog;
import org.jetbrains.annotations.NotNull;
public class ResetAction extends AnAction implements DumbAware {
private static final String ACTION_NAME = "Eval Reset";
private static final DataKey<Notification> NOTIFICATION_KEY = DataKey.create("Notification");
public ResetAction() {
super("Eval Reset", "Reset my IDE eval information", AllIcons.General.Reset);
super(ACTION_NAME, "Reset my IDE eval information", AllIcons.General.Reset);
new ResetTimer().start(this);
}
@Override
public void actionPerformed(@NotNull AnActionEvent anActionEvent) {
Project project = anActionEvent.getProject();
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = ProjectHelper.getProject(e);
Notification notification = NOTIFICATION_KEY.getData(e.getDataContext());
if (null != notification) {
notification.expire();
}
if (project == null) {
MainDialog mainDialog = new MainDialog();
mainDialog.show();
} else {
ToolWindowManager.getInstance(project).getToolWindow("Eval Reset").show(null);
return;
}
ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ACTION_NAME);
if (null == toolWindow) {
ToolWindowEP ep = new ToolWindowEP();
ep.id = ACTION_NAME;
ep.anchor = ToolWindowAnchor.BOTTOM.toString();
ep.icon = "AllIcons.General.Reset";
ep.factoryClass = MainToolWindowFactory.class.getName();
ep.setPluginDescriptor(Constants.PLUGIN_DESC);
ToolWindowManagerEx.getInstanceEx(project).initToolWindow(ep);
toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ACTION_NAME);
}
toolWindow.show(null);
}
}

@ -0,0 +1,19 @@
package io.zhile.research.intellij.ier.action;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.DumbAware;
import org.jetbrains.annotations.NotNull;
public class RestartAction extends AnAction implements DumbAware {
public RestartAction() {
super("Restart IDE", "Restart my IDE", AllIcons.Actions.Restart);
}
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
ApplicationManager.getApplication().restart();
}
}

@ -29,6 +29,7 @@ public class Resetter {
private static final String DEVICE_ID_KEY = DEFAULT_VENDOR + ".device_id";
private static final String IDE_EVAL_PREFIX = DEFAULT_VENDOR + "/" + Constants.IDE_NAME_LOWER + "/" + Constants.IDE_HASH;
private static final String EVAL_KEY = "evlsprt";
private static final String AUTO_RESET_KEY = Constants.PLUGIN_PREFS_PREFIX + ".auto_reset";
private static final PropertiesComponentImpl PROPS = (PropertiesComponentImpl) PropertiesComponent.getInstance();
@ -151,6 +152,14 @@ public class Resetter {
}
}
public static boolean isAutoReset() {
return Prefs.getBoolean(AUTO_RESET_KEY, false);
}
public static void setAutoReset(boolean isAutoReset) {
Prefs.putBoolean(AUTO_RESET_KEY, isAutoReset);
}
protected static File getSharedFile(String fileName) {
String appData = System.getenv("APPDATA");
if (appData == null) {

@ -4,6 +4,10 @@ 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.project.Project;
import com.intellij.openapi.project.ProjectManager;
import io.zhile.research.intellij.ier.action.RestartAction;
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;
@ -13,7 +17,7 @@ import java.util.TimerTask;
public class ResetTimer {
private static final long RESET_PERIOD = 2160000000L; // 25 days
private static final String RESET_KEY = "Ide-Eval-Reset." + Constants.IDE_NAME_LOWER + "." + Constants.IDE_HASH;
private static final String RESET_KEY = Constants.PLUGIN_PREFS_PREFIX + "." + Constants.IDE_NAME_LOWER + "." + Constants.IDE_HASH;
public static long getLastResetTime() {
return Prefs.getLong(RESET_KEY, 0L);
@ -49,12 +53,34 @@ public class ResetTimer {
@Override
public void run() {
if (System.currentTimeMillis() - lastResetTime > RESET_PERIOD) {
do {
if (System.currentTimeMillis() - lastResetTime <= RESET_PERIOD) {
break;
}
AnAction action = 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(resetAction);
notification.notify(null);
}
notification.addAction(action);
Project[] projects = ProjectManager.getInstance().getOpenProjects();
if (projects.length == 0) {
notification.notify(null);
} else {
for (Project project : projects) {
notification.notify(project);
}
}
} while (false);
new Timer().schedule(new ResetTimerTask(lastResetTime, resetAction), 3600000); // 60 min
}

@ -1,5 +1,6 @@
package io.zhile.research.intellij.ier.helper;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.cl.PluginClassLoader;
import com.intellij.openapi.application.ApplicationNamesInfo;
@ -10,8 +11,10 @@ import com.intellij.openapi.util.io.FileUtil;
public class Constants {
public static final PluginClassLoader CLASS_LOADER = (PluginClassLoader) Constants.class.getClassLoader();
public static final PluginId PLUGIN_ID = CLASS_LOADER.getPluginId();
public static final String PLUGIN_NAME = PluginManager.getPlugin(PLUGIN_ID).getName();
public static final IdeaPluginDescriptor PLUGIN_DESC = PluginManager.getPlugin(PLUGIN_ID);
public static final String PLUGIN_NAME = PLUGIN_DESC.getName();
public static final String IDE_NAME = ApplicationNamesInfo.getInstance().getProductName();
public static final String IDE_NAME_LOWER = IDE_NAME.toLowerCase();
public static final String IDE_HASH = Integer.toHexString(FileUtil.pathHashCode(PathManager.getHomePath()));
public static final String PLUGIN_PREFS_PREFIX = "Ide-Eval-Reset";
}

@ -0,0 +1,29 @@
package io.zhile.research.intellij.ier.helper;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
public class ProjectHelper {
public static Project getCurrentProject() {
if (ProjectManager.getInstance().getOpenProjects().length == 0) {
return null;
}
DataContext dataContext = DataManager.getInstance().getDataContextFromFocus().getResultSync();
return CommonDataKeys.PROJECT.getData(dataContext);
}
public static Project getProject(AnActionEvent e) {
Project project = e.getProject();
if (project == null) {
return getCurrentProject();
}
return project;
}
}

@ -31,10 +31,16 @@
<properties/>
<border type="none"/>
<children>
<component id="382d3" class="javax.swing.JButton" binding="btnReloadList">
<component id="3e8db" class="javax.swing.JCheckBox" binding="chkResetAuto">
<constraints/>
<properties>
<text value="⟳ Reload List"/>
<text value="Reset Automatically (per 25days)"/>
</properties>
</component>
<component id="382d3" class="javax.swing.JButton" binding="btnReload">
<constraints/>
<properties>
<text value="⟳ Reload"/>
</properties>
</component>
<component id="7f8d9" class="javax.swing.JButton" binding="btnReset">
@ -74,7 +80,7 @@
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="empty"/>
<border type="none"/>
<children>
<component id="5b0c2" class="javax.swing.JList" binding="lstMain">
<constraints/>

@ -19,9 +19,10 @@ public class MainForm {
private JButton btnReset;
private JList lstMain;
private JLabel lblLastResetTime;
private JButton btnReloadList;
private JButton btnReload;
private JLabel lblFound;
private JLabel lblLastResetTimeLabel;
private JCheckBox chkResetAuto;
private final DialogWrapper dialogWrapper;
private final DefaultListModel<String> listModel = new DefaultListModel<>();
@ -33,14 +34,23 @@ public class MainForm {
public JPanel getContent() {
boldFont(lblFound);
boldFont(lblLastResetTimeLabel);
reloadLastResetTime();
lblLastResetTime.setText(ResetTimer.getLastResetTimeStr());
lstMain.setModel(listModel);
chkResetAuto.setSelected(Resetter.isAutoReset());
chkResetAuto.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Resetter.setAutoReset(chkResetAuto.isSelected());
}
});
lstMain.setModel(listModel);
reloadRecordItems();
btnReloadList.addActionListener(new AbstractAction() {
btnReload.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
reloadLastResetTime();
reloadRecordItems();
}
});
@ -61,6 +71,10 @@ public class MainForm {
return rootPanel;
}
private void reloadLastResetTime() {
lblLastResetTime.setText(ResetTimer.getLastResetTimeStr());
}
private void reloadRecordItems() {
listModel.clear();

@ -10,11 +10,6 @@
<depends>com.intellij.modules.ultimate</depends>
<extensions defaultExtensionNs="com.intellij">
<toolWindow id="Eval Reset" anchor="bottom" icon="AllIcons.General.Reset"
factoryClass="io.zhile.research.intellij.ier.tw.MainToolWindowFactory"/>
</extensions>
<actions>
<action class="io.zhile.research.intellij.ier.action.ResetAction"
id="io.zhile.research.intellij.ier.action.ResetAction">

Loading…
Cancel
Save