首页>代码>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");
    }
}
最近下载更多
最代码官方  LV168 2024年11月3日
最近浏览更多
YafengLiang  LV15 6月9日
酷少小新  LV2 6月7日
dongxiaoyu  LV1 5月15日
597117933  LV9 5月13日
栈道小生  LV10 4月24日
ninuxf  LV12 4月24日
15515998549  LV1 4月22日
慵懒的小橘猫  LV11 4月11日
jackychen1012  LV2 3月29日
niuwa666 3月27日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友