tweaks724/src/main/java/eu/m724/tweaks/updater/UpdateChecker.java
Minecon724 740fab869e
Some checks failed
/ deploy (push) Failing after 1m5s
add license
2024-11-27 20:46:13 +01:00

61 lines
2.3 KiB
Java

/*
* Copyright (C) 2024 Minecon724
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
* in the project root for the full license text.
*/
package eu.m724.tweaks.updater;
import eu.m724.tweaks.updater.cache.VersionedResource;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CompletionException;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class UpdateChecker extends BukkitRunnable {
private final Set<VersionedResource> resources;
private final Logger logger;
private final File cacheFile;
UpdateChecker(Plugin plugin, Set<VersionedResource> resources) {
this.logger = Logger.getLogger(plugin.getLogger().getName() + "." + getClass().getSimpleName());
this.resources = resources; // TODO make a copy?
this.cacheFile = new File(plugin.getDataFolder(), "version cache");
}
private void checkAll() {
logger.info("Now checking all plugins");
for (VersionedResource versionedResource : Set.copyOf(resources)) {
logger.info(versionedResource.resource().resourceId() + " " + versionedResource.resource().plugin().getName());
int page = versionedResource.running() != null ? versionedResource.running().page() : 1;
try {
VersionedResource newResource = new VersionFinder(versionedResource.resource(), page).join(); // this runs async so it's ok
if (!versionedResource.equals(newResource)) {
resources.remove(versionedResource);
resources.add(newResource);
// TODO notify and all
}
} catch (CompletionException e) {
logger.severe("Unable to refresh %s: %s".formatted(versionedResource.resource().plugin().getName(), e.getMessage()));
}
}
}
@Override
public void run() {
checkAll();
try (FileOutputStream outputStream = new FileOutputStream(cacheFile)) {
VersionCheckCache.writeAll(outputStream, resources.stream().map(VersionedResource::running).collect(Collectors.toSet()));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}