首页>代码>Idea插件,延长试用时间>/ide-eval-resetter-master/src/main/java/io/zhile/research/intellij/action/ResetAction.java
package io.zhile.research.intellij.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.application.PathManager;
import com.intellij.openapi.application.ex.ApplicationInfoEx;
import com.intellij.openapi.application.impl.ApplicationInfoImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import io.zhile.research.intellij.helper.Constants;
import io.zhile.research.intellij.helper.NotificationHelper;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.prefs.Preferences;
public class ResetAction extends AnAction {
private static final String OLD_MACHINE_ID_KEY = "JetBrains.UserIdOnMachine";
private static final String NEW_MACHINE_ID_KEY = "user_id_on_machine";
private static final String DEVICE_ID_KEY = "device_id";
private static final String DEFAULT_COMPANY_NAME = "jetbrains";
public ResetAction() {
super("Reset " + Constants.PRODUCT_NAME + "'s Eval", "Reset my IDE eval information", AllIcons.General.Reset);
}
@Override
public void actionPerformed(@NotNull AnActionEvent anActionEvent) {
Project project = anActionEvent.getProject();
File evalFile = getEvalFile();
if (evalFile.exists()) {
if (!FileUtil.delete(evalFile)) {
NotificationHelper.showError(project, "Remove eval folder failed!");
return;
}
}
File optionsFile = getOptionsFile();
if (optionsFile.exists()) {
try (Scanner scanner = new Scanner(optionsFile)) {
StringBuilder sbContent = new StringBuilder();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (!line.contains("name=\"evlsprt")) {
sbContent.append(line).append("\n");
}
}
Files.write(Paths.get(optionsFile.toURI()), sbContent.toString().getBytes());
} catch (IOException e) {
NotificationHelper.showError(project, e.getMessage());
return;
}
}
ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance();
String companyName = appInfo.getShortCompanyName();
String node = StringUtil.isEmptyOrSpaces(companyName) ? DEFAULT_COMPANY_NAME : companyName.toLowerCase();
Preferences prefsRoot = Preferences.userRoot();
Preferences prefs = prefsRoot.node(node);
prefsRoot.remove(OLD_MACHINE_ID_KEY);
prefs.remove(NEW_MACHINE_ID_KEY);
prefs.remove(DEVICE_ID_KEY);
Preferences.userRoot().node(Constants.PLUGIN_NAME).put(Constants.PRODUCT_NAME + Constants.PRODUCT_HASH, Long.toString(System.currentTimeMillis()));
if (appInfo.isVendorJetBrains() && SystemInfo.isWindows) {
String[] names = new String[]{"PermanentUserId", "PermanentDeviceId"};
for (String name : names) {
if (deleteSharedFile(name)) {
continue;
}
NotificationHelper.showError(project, "Remove " + name + " file failed!");
return;
}
}
NotificationHelper.showInfo(project, "Reset successfully!\nPlease restart your IDE and enjoy it!");
ApplicationManager.getApplication().invokeLater(() -> ApplicationManager.getApplication().restart());
}
@Override
public boolean isDumbAware() {
return false;
}
protected boolean deleteSharedFile(String fileName) {
String appData = System.getenv("APPDATA");
if (appData == null) {
return false;
}
File dir = Paths.get(appData, "JetBrains", fileName).toFile();
return !dir.exists() || dir.delete();
}
protected File getEvalFile() {
String configPath = PathManager.getConfigPath();
return new File(configPath, "eval");
}
protected File getOptionsFile() {
String configPath = PathManager.getConfigPath();
return new File(new File(configPath, "options"), "other.xml");
}
}

最近下载
最近浏览
