ModUpdater/src/main/java/com/thebrokenrail/modupdater/strategy/ModUpdateStrategies.java

74 lines
2.5 KiB
Java

package com.thebrokenrail.modupdater.strategy;
import com.thebrokenrail.modupdater.ModUpdater;
import com.thebrokenrail.modupdater.util.ConfigObject;
import com.thebrokenrail.modupdater.util.HardcodedData;
import com.thebrokenrail.modupdater.util.ModUpdate;
import com.thebrokenrail.modupdater.util.ModUpdateStrategy;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.metadata.ModMetadata;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ModUpdateStrategies {
private static final Map<String, ModUpdateStrategy> data = new HashMap<>();
private static ModUpdate checkForUpdate(ModMetadata metadata, ConfigObject obj, String name) {
String oldVersion = metadata.getVersion().toString();
String strategy;
try {
strategy = obj.getString("strategy");
} catch (ConfigObject.MissingValueException e) {
ModUpdater.invalidModUpdaterConfig(name);
return null;
}
ModUpdateStrategy strategyObj = data.get(strategy);
if (strategyObj == null) {
ModUpdater.invalidModUpdaterConfig(name);
return null;
}
return strategyObj.checkForUpdate(obj, oldVersion, name);
}
public static ModUpdate[] findAvailableUpdates() {
List<ModUpdate> updates = new ArrayList<>();
for (ModContainer mod : FabricLoader.getInstance().getAllMods()) {
ModMetadata metadata = mod.getMetadata();
String name = metadata.getName() + " (" + metadata.getId() + ')';
ModUpdate update = null;
if (metadata.containsCustomValue(ModUpdater.NAMESPACE)) {
try {
update = checkForUpdate(metadata, new ConfigObject.ConfigObjectCustom(metadata.getCustomValue(ModUpdater.NAMESPACE).getAsObject()), name);
} catch (ClassCastException e) {
ModUpdater.invalidModUpdaterConfig(name);
}
} else {
ConfigObject obj = HardcodedData.getData(metadata.getId());
if (obj != null) {
update = checkForUpdate(metadata, obj, name);
}
}
if (update != null) {
updates.add(update);
}
}
return updates.toArray(new ModUpdate[0]);
}
static {
data.put("curseforge", new CurseForgeStrategy());
data.put("maven", new MavenStrategy());
}
}