From f22416be2c709d086a9df438e444390051ffdff0 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Tue, 21 Apr 2015 22:46:15 +0200 Subject: [PATCH] Pushed missing FileCopyHandler --- .../replaymod/registry/FileCopyHandler.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/main/java/eu/crushedpixel/replaymod/registry/FileCopyHandler.java diff --git a/src/main/java/eu/crushedpixel/replaymod/registry/FileCopyHandler.java b/src/main/java/eu/crushedpixel/replaymod/registry/FileCopyHandler.java new file mode 100644 index 00000000..30a97c14 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/registry/FileCopyHandler.java @@ -0,0 +1,59 @@ +package eu.crushedpixel.replaymod.registry; + +import org.apache.commons.lang3.tuple.Pair; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class FileCopyHandler extends Thread { + + public FileCopyHandler() { + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { + @Override + public void run() { + FileCopyHandler.this.shutdown(); + } + })); + } + + private Queue> filesToMove = new ConcurrentLinkedQueue>(); + + public void registerModifiedFile(File tempFile, File destination) { + filesToMove.add(Pair.of(tempFile, destination)); + + for(Pair p : new ArrayList>(filesToMove)) { + if(p.equals(tempFile)) { + filesToMove.remove(p); + } + } + } + + public void shutdown() { + shutdown = true; + } + + private boolean shutdown = false; + + @Override + public void run() { + while(!shutdown || !filesToMove.isEmpty()) { + Pair mv = filesToMove.poll(); + if(mv != null) { + try { + Files.move(mv.getLeft().toPath(), mv.getRight().toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch(IOException e) { + filesToMove.add(mv); + } + } + try { + Thread.sleep(1000); + } catch(Exception e) {} + } + } + +}