61 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
|         }
 | |
|     }
 | |
| }
 | 
