package de.iani.cubequest;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;

public class AccessLogger {
    
    private static List<UUID> accesses = new ArrayList<>();
    
    public static void log(UUID id) {
        accesses.add(id);
    }
    
    public static void save() {
        List<UUID> toSave = accesses;
        accesses = new ArrayList<>(toSave.size());
        new Thread(() -> fullSave(toSave)).start();
    }
    
    public static void fullSave() {
        List<UUID> toSave = accesses;
        accesses = new ArrayList<>(toSave.size());
        fullSave(toSave);
    }
    
    public static synchronized void fullSave(List<UUID> toSave) {
        int fileIndex = 0;
        File folder = new File(CubeQuest.getInstance().getDataFolder(), "access_logs");
        folder.mkdirs();
        File file;
        do {
            file = new File(folder, "log" + fileIndex + ".txt");
        } while (file.exists());
        
        try (Writer writer =
                new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)))) {
            for (UUID id : toSave) {
                writer.write(id.toString());
                writer.write("\n");
            }
        } catch (IOException e) {
            CubeQuest.getInstance().getLogger().log(Level.SEVERE, "Could not save access log.", e);
        }
    }
    
}

@@ -19,19 +19,17 @@
 bequest;
-%0D%0A%0D
+%0A
 %0Aimport 
@@ -47,25 +47,24 @@
 feredWriter;
-%0D
 %0Aimport java
@@ -72,17 +72,16 @@
 io.File;
-%0D
 %0Aimport 
@@ -105,17 +105,16 @@
 tStream;
-%0D
 %0Aimport 
@@ -133,17 +133,16 @@
 ception;
-%0D
 %0Aimport 
@@ -164,25 +164,24 @@
 treamWriter;
-%0D
 %0Aimport java
@@ -191,17 +191,16 @@
 .Writer;
-%0D
 %0Aimport 
@@ -215,25 +215,24 @@
 l.ArrayList;
-%0D
 %0Aimport java
@@ -242,17 +242,16 @@
 il.List;
-%0D
 %0Aimport 
@@ -265,17 +265,16 @@
 il.UUID;
-%0D
 %0Aimport 
@@ -301,11 +301,9 @@
 vel;
-%0D%0A%0D
+%0A
 %0Apub
@@ -326,23 +326,21 @@
 Logger %7B
-%0D
 %0A    
-%0D
 %0A    pri
@@ -391,23 +391,21 @@
 ist%3C%3E();
-%0D
 %0A    
-%0D
 %0A    pub
@@ -434,17 +434,16 @@
 ID id) %7B
-%0D
 %0A       
@@ -460,30 +460,27 @@
 add(id);
-%0D
 %0A    %7D
-%0D
 %0A    
-%0D
 %0A    pub
@@ -499,25 +499,24 @@
 oid save() %7B
-%0D
 %0A        Lis
@@ -533,33 +533,32 @@
 Save = accesses;
-%0D
 %0A        accesse
@@ -584,33 +584,32 @@
 (toSave.size());
-%0D
 %0A        new Thr
@@ -644,30 +644,27 @@
 start();
-%0D
 %0A    %7D
-%0D
 %0A    
-%0D
 %0A    pub
@@ -691,17 +691,16 @@
 Save() %7B
-%0D
 %0A       
@@ -729,17 +729,16 @@
 ccesses;
-%0D
 %0A       
@@ -776,25 +776,24 @@
 ave.size());
-%0D
 %0A        ful
@@ -806,30 +806,27 @@
 toSave);
-%0D
 %0A    %7D
-%0D
 %0A    
-%0D
 %0A    pub
@@ -875,33 +875,32 @@
 %3CUUID%3E toSave) %7B
-%0D
 %0A        int fil
@@ -910,17 +910,16 @@
 dex = 0;
-%0D
 %0A       
@@ -998,17 +998,16 @@
 _logs%22);
-%0D
 %0A       
@@ -1023,17 +1023,16 @@
 kdirs();
-%0D
 %0A       
@@ -1042,17 +1042,16 @@
 le file;
-%0D
 %0A       
@@ -1055,17 +1055,16 @@
     do %7B
-%0D
 %0A       
@@ -1120,17 +1120,41 @@
 %22.txt%22);
-%0D
+%0A            fileIndex++;
 %0A       
@@ -1174,25 +1174,24 @@
 e.exists());
-%0D
 %0A        %0D%0A 
@@ -1187,17 +1187,16 @@
         
-%0D
 %0A       
@@ -1216,17 +1216,16 @@
 writer =
-%0D
 %0A       
@@ -1306,17 +1306,16 @@
 le)))) %7B
-%0D
 %0A       
@@ -1339,25 +1339,24 @@
  : toSave) %7B
-%0D
 %0A           
@@ -1388,17 +1388,16 @@
 ring());
-%0D
 %0A       
@@ -1424,17 +1424,16 @@
 e(%22%5Cn%22);
-%0D
 %0A       
@@ -1434,25 +1434,24 @@
            %7D
-%0D
 %0A        %7D c
@@ -1472,17 +1472,16 @@
 ion e) %7B
-%0D
 %0A       
@@ -1572,17 +1572,16 @@
 g.%22, e);
-%0D
 %0A       
@@ -1586,22 +1586,18 @@
    %7D
-%0D
 %0A    %7D
-%0D
 %0A    
-%0D
 %0A%7D
-%0D
 %0A

Fix infinite loop