package org.pixelgaffer.turnierserver.codr;
import java.io.File;
import java.io.IOException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.apache.commons.io.FileUtils;
import org.pixelgaffer.turnierserver.codr.utilities.Dialog;
import org.pixelgaffer.turnierserver.codr.utilities.ErrorLog;
import org.pixelgaffer.turnierserver.codr.utilities.Paths;
/**
* Managet das Laden der
* - in Codr gespeicherten KIs
* - extern gespeicherten KIs
* - SimplePlayer-KIs
*
* @author Philip
*/
public class AiManager {
public ObservableList<AiSimple> ais = FXCollections.observableArrayList();
/**
* Lädt alle Spieler aus dem Dateisystem in die Liste
*/
public void loadAis() {
ais.clear();
// Task<AiSimple> load = new Task<AiSimple>() {
//
// public AiSimple call() {
// in Codr gespeicherte KIs
File dir = new File(Paths.aiFolder());
dir.mkdirs();
File[] playerDirs = dir.listFiles();
if (playerDirs == null) {
ErrorLog.write("keine Spieler vorhanden");
} else {
for (int i = 0; i < playerDirs.length; i++) {
if (playerDirs[i].isDirectory()) {
AiSaved newAi = new AiSaved(playerDirs[i].getName());
if (newAi.gametype.equals(MainApp.actualGameType.get()))
ais.add(newAi);
}
}
}
// extern gespeicherte KIs
File externDir = new File(Paths.aiExternFolder());
externDir.mkdirs();
File[] externDirs = externDir.listFiles();
if (externDirs == null) {
ErrorLog.write("keine externen Spieler vorhanden");
} else {
for (int i = 0; i < externDirs.length; i++) {
if (externDirs[i].isDirectory()) {
AiExtern newAi = new AiExtern(externDirs[i].getName());
if (newAi.gametype.equals(MainApp.actualGameType.get())) {
if (!new File(newAi.path).exists()) {
if (Dialog.okAbort("Der Pfad der KI " + newAi.title + " existiert nicht.\nWollen Sie die KI behalten?\nWenn Sie auf 'Abbrechen' klicken, wird die KI verworfen.")) {
File result = Dialog.folderChooser(MainApp.stage, "Wählen Sie einen neuen Ordner aus.");
if (result != null) {
newAi.path = result.getPath();
newAi.storeProps();
ais.add(newAi);
} else {
try {
FileUtils.deleteDirectory(new File(Paths.ai(newAi)));
} catch (IOException e) {
}
}
} else {
try {
FileUtils.deleteDirectory(new File(Paths.ai(newAi)));
} catch (IOException e) {
}
}
} else {
ais.add(newAi);
}
}
}
}
}
// simplePlayer, die aus dem Download-Ordner geladen werden
File simpleDir = new File(Paths.simplePlayerFolder(MainApp.actualGameType.get()));
simpleDir.mkdirs();
File[] simpleDirs = simpleDir.listFiles();
if (simpleDirs == null) {
ErrorLog.write("keine SimplePlayer vorhanden");
} else {
for (int i = 0; i < simpleDirs.length; i++) {
if (simpleDirs[i].isDirectory())
ais.add(new AiSimple(simpleDirs[i].getName()));
}
}
// return null;
// }
// };
// load.valueProperty().addListener((observableValue, oldValue, newValue) -> {
// if (newValue == null)
// return;
//
// switch (newValue.mode) {
// case extern:
// if (!new File(((AiExtern) newValue).path).exists()) {
// if (Dialog.okAbort("Der Pfad der KI " + newValue.title + " existiert nicht.\nWollen Sie die KI behalten?\nWenn Sie auf 'Abbrechen' klicken, wird die KI verworfen.")) {
// File result = Dialog.folderChooser(MainApp.stage, "Wählen Sie einen neuen Ordner aus.");
// if (result != null) {
// ((AiExtern) newValue).path = result.getPath();
// ((AiExtern) newValue).storeProps();
// ais.add(newValue);
// } else {
// try {
// FileUtils.deleteDirectory(new File(Paths.ai(newValue)));
// } catch (IOException e) {
// }
// }
// } else {
// try {
// FileUtils.deleteDirectory(new File(Paths.ai(newValue)));
// } catch (IOException e) {
// }
// }
// } else {
// ais.add(newValue);
// }
// break;
// case saved:
// ais.add(newValue);
// break;
// case simplePlayer:
// ais.add(newValue);
// break;
// default:
// break;
// }
//
// });
//
//
// Thread thread = new Thread(load, "updateLoggedIn");
// thread.setDaemon(true);
// thread.start();
}
}