Skip to content

Commit

Permalink
Repo: add RepoWithCache for default
Browse files Browse the repository at this point in the history
  • Loading branch information
PeratX committed Apr 11, 2022
1 parent 9c4226d commit 98e29e7
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 21 deletions.
8 changes: 5 additions & 3 deletions src/main/java/org/itxtech/mcl/Loader.java
Expand Up @@ -167,17 +167,19 @@ public void start(String[] args) throws Exception {
options.addOption(Option.builder("z").desc("Skip boot phase").longOpt("dry-run").build());

packageManager = new PackageManager(this);

repo = new Repository(this);
manager = new ModuleManager(this);
downloader = new DefaultDownloader(this);

parseCli(args, false);
tryCatching(() -> manager.loadAllModules()); //此阶段脚本只能修改loader中变量
parseCli(args, true);
tryCatching(() -> manager.phaseCli()); //此阶段脚本处理命令行参数
repo = new Repository(this);
downloader = new DefaultDownloader(this);
tryCatching(() -> manager.phaseLoad()); //此阶段脚本下载包

saveConfig();
boot = true;

if (!cli.hasOption("z")) {
tryCatching(() -> manager.phaseBoot()); //此阶段脚本启动mirai,且应该只有一个脚本实现
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/itxtech/mcl/component/Config.java
Expand Up @@ -69,7 +69,7 @@ public class Config {
public int logLevel = Logger.LOG_INFO;

@SerializedName("modules_props")
public HashMap<String, String> modulesProps = new HashMap<>();
public HashMap<String, String> moduleProps = new HashMap<>();

public static Config load(File file) {
try {
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/org/itxtech/mcl/component/Repository.java
Expand Up @@ -50,7 +50,7 @@ public class Repository {

public HttpClient client;

private final Loader loader;
public Loader loader;

public Repository(Loader loader) {
this.loader = loader;
Expand Down Expand Up @@ -134,7 +134,7 @@ public Metadata getMetadataFromFile(File file) throws Exception {

public String getSha1Url(MclPackage pkg, PackageInfo info, String jarUrl) {
if (info != null && info.repo != null) {
RepoInfo repoInfo = info.repo.get(pkg.version);
var repoInfo = info.repo.get(pkg.version);
if (repoInfo != null && repoInfo.sha1 != null && !repoInfo.sha1.isBlank()) {
return repoInfo.sha1;
}
Expand All @@ -144,7 +144,7 @@ public String getSha1Url(MclPackage pkg, PackageInfo info, String jarUrl) {

public String getJarUrl(MclPackage pkg, PackageInfo info) {
if (info != null && info.repo != null) {
RepoInfo repoInfo = info.repo.get(pkg.version);
var repoInfo = info.repo.get(pkg.version);
if (repoInfo != null && repoInfo.archive != null && !repoInfo.archive.isBlank()) {
return repoInfo.archive;
}
Expand All @@ -168,7 +168,7 @@ public String getJarUrl(MclPackage pkg, PackageInfo info) {

public String getMetadataUrl(MclPackage pkg, PackageInfo info) {
if (info != null && info.repo != null) {
RepoInfo repoInfo = info.repo.get(pkg.version);
var repoInfo = info.repo.get(pkg.version);
if (repoInfo != null && repoInfo.metadata != null && !repoInfo.metadata.isBlank()) {
return repoInfo.metadata;
}
Expand Down Expand Up @@ -239,6 +239,11 @@ public static class PackageInfo {
public String defaultChannel;
public Map<String, ArrayList<String>> channels;
public Map<String, RepoInfo> repo;

public String getLatestVersion(String chan) {
var c = channels.get(chan);
return c.get(c.size() - 1);
}
}

public static class RepoInfo {
Expand Down
Expand Up @@ -33,7 +33,7 @@ public String getName() {

@Override
public void load() {
loader.logger.info("Fetching Mirai Console Loader Announcement...");
loader.logger.info("Fetching MCL Announcement...");
try {
var pkg = loader.repo.fetchPackage("org.itxtech:mcl");
loader.logger.info("Mirai Console Loader Announcement:");
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/org/itxtech/mcl/module/builtin/Boot.java
Expand Up @@ -43,11 +43,12 @@ public String getName() {
}

public String getBootEntry() {
return loader.config.modulesProps.getOrDefault("boot.entry", "net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader");
return loader.config.moduleProps.getOrDefault("boot.entry",
"net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader");
}

public String getBootArgs() {
return loader.config.modulesProps.getOrDefault("boot.args", "");
return loader.config.moduleProps.getOrDefault("boot.args", "");
}

@Override
Expand All @@ -63,11 +64,11 @@ public void prepare() {
@Override
public void cli() {
if (loader.cli.hasOption("f")) {
loader.config.modulesProps.put("boot.entry", loader.cli.getOptionValue("f"));
loader.config.moduleProps.put("boot.entry", loader.cli.getOptionValue("f"));
loader.saveConfig();
}
if (loader.cli.hasOption("g")) {
loader.config.modulesProps.put("boot.args", loader.cli.getOptionValue("g", ""));
loader.config.moduleProps.put("boot.args", loader.cli.getOptionValue("g", ""));
loader.saveConfig();
}
if (loader.cli.hasOption("b")) {
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/org/itxtech/mcl/module/builtin/Repo.java
Expand Up @@ -3,7 +3,6 @@
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.itxtech.mcl.Utility;
import org.itxtech.mcl.component.Repository;
import org.itxtech.mcl.module.MclModule;

import java.sql.Timestamp;
Expand Down Expand Up @@ -53,7 +52,7 @@ public void cli() {
try {
if (loader.cli.hasOption("j")) {
loader.logger.info("Fetching packages from " + loader.config.miraiRepo);
var index = new Repository(loader).fetchPackages();
var index = loader.repo.fetchPackages();

loader.logger.info("---------- Mirai Repo Index Metadata ----------");
loader.logger.info("Name: " + index.metadata.name);
Expand All @@ -62,7 +61,7 @@ public void cli() {
.format(new Timestamp(index.metadata.timestamp).toLocalDateTime()));
loader.logger.info("");

for (java.util.Map.Entry<String, Repository.PackageIndex> pkg : index.packages.entrySet()) {
for (var pkg : index.packages.entrySet()) {
var info = pkg.getValue();
loader.logger.info("---------- Package: " + pkg.getKey() + " ----------");
loader.logger.info("Name: " + info.name);
Expand All @@ -77,10 +76,9 @@ public void cli() {
}

if (loader.cli.hasOption("i")) {
var repo = new Repository(loader);
var pkg = loader.cli.getOptionValue("i");
loader.logger.info("Fetching channel info for package \"" + pkg + "\"");
for (java.util.Map.Entry<String, java.util.ArrayList<String>> chan : repo.fetchPackage(pkg).channels.entrySet()) {
for (var chan : loader.repo.fetchPackage(pkg).channels.entrySet()) {
loader.logger.info("---------- Channel: " + chan.getKey() + " ----------");
loader.logger.info("Version: " + Utility.join(", ", chan.getValue()));
loader.logger.info("");
Expand Down
85 changes: 85 additions & 0 deletions src/main/java/org/itxtech/mcl/module/builtin/RepoCache.java
@@ -0,0 +1,85 @@
package org.itxtech.mcl.module.builtin;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.itxtech.mcl.component.Repository;
import org.itxtech.mcl.module.MclModule;

import java.util.HashMap;

public class RepoCache extends MclModule {
private static final String DISABLED_KEY = "repowithcache.disabled";
private static final String AUTO_CLEAR_KEY = "repowithcache.auto-clear";

@Override
public String getName() {
return "repowithcache";
}

@Override
public void prepare() {
var mainGroup = new OptionGroup();
mainGroup.addOption(Option.builder().desc("Disable Repo With Cache")
.longOpt("disable-repo-with-cache").build());
mainGroup.addOption(Option.builder().desc("Enable Repo With Cache")
.longOpt("enable-repo-with-cache").build());
loader.options.addOptionGroup(mainGroup);


var clearGroup = new OptionGroup();
clearGroup.addOption(Option.builder().desc("Disable Repo With Cache auto clear")
.longOpt("disable-auto-clear").build());
clearGroup.addOption(Option.builder().desc("Enable Repo With Cache auto clear")
.longOpt("enable-auto-clear").build());
loader.options.addOptionGroup(clearGroup);

if (loader.config.moduleProps.getOrDefault(DISABLED_KEY, "false").equals("false")) {
loader.repo = new RepoWithCache(loader.repo);
loader.logger.debug("RepoWithCache has been initialized");
}
}

@Override
public void cli() {
if (loader.cli.hasOption("disable-repo-with-cache")) {
loader.config.moduleProps.put(DISABLED_KEY, "true");
loader.logger.info("RepoWithCache has been disabled. Restart MCL to take effect.");
}
if (loader.cli.hasOption("enable-repo-with-cache")) {
loader.config.moduleProps.put(DISABLED_KEY, "false");
loader.logger.info("RepoWithCache has been enabled. Restart MCL to take effect.");
}

if (loader.cli.hasOption("enable-auto-clear")) {
loader.config.moduleProps.put(AUTO_CLEAR_KEY, "true");
}
if (loader.cli.hasOption("disable-auto-clear")) {
loader.config.moduleProps.put(AUTO_CLEAR_KEY, "false");
}
}

@Override
public void boot() {
if (loader.config.moduleProps.getOrDefault(AUTO_CLEAR_KEY, "true").equals("true")) {
loader.logger.debug("RepoWithCache has been cleared");
}
}

public static class RepoWithCache extends Repository {
private final HashMap<String, PackageInfo> packageInfoCache = new HashMap<>();

public RepoWithCache(Repository base) {
super(base.loader);
}

@Override
public PackageInfo fetchPackage(String id) throws Exception {
if (packageInfoCache.containsKey(id)) {
return packageInfoCache.get(id);
}
var info = super.fetchPackage(id);
packageInfoCache.put(id, info);
return info;
}
}
}
4 changes: 1 addition & 3 deletions src/main/java/org/itxtech/mcl/module/builtin/Updater.java
Expand Up @@ -3,7 +3,6 @@
import org.apache.commons.cli.Option;
import org.fusesource.jansi.Ansi;
import org.itxtech.mcl.Utility;
import org.itxtech.mcl.component.Config;
import org.itxtech.mcl.component.Repository;
import org.itxtech.mcl.module.MclModule;
import org.itxtech.mcl.pkg.MclPackage;
Expand Down Expand Up @@ -115,8 +114,7 @@ public void check(MclPackage pack) throws Exception {
loader.saveConfig();
return;
}
var target = info.channels.get(pack.channel);
ver = target.get(target.size() - 1);
ver = info.getLatestVersion(pack.channel);
}

if ((update && !pack.version.equals(ver) && !force) || pack.version.trim().equals("")) {
Expand Down

0 comments on commit 98e29e7

Please sign in to comment.