From: "Enrico Weigelt, metux IT consult" <enrico.weig...@gr13.net>
--- .../sf/freecol/common/io/FreeColDirectories.java | 71 ++++++++++++---------- src/net/sf/freecol/tools/SaveGameValidator.java | 2 +- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/src/net/sf/freecol/common/io/FreeColDirectories.java b/src/net/sf/freecol/common/io/FreeColDirectories.java index 901d06c5fe6..09432988dfb 100644 --- a/src/net/sf/freecol/common/io/FreeColDirectories.java +++ b/src/net/sf/freecol/common/io/FreeColDirectories.java @@ -50,9 +50,6 @@ public class FreeColDirectories { // No logger! Many of these routines are called before logging is // initialized. - private static final Comparator<File> fileModificationComparator - = Comparator.comparingLong(File::lastModified); - private static final Comparator<File> fileNameComparator = Comparator.comparing(File::getName); @@ -141,14 +138,6 @@ public class FreeColDirectories { Utils.fileAnySuffix(f, MOD_FILE_SUFFIX, ZIP_FILE_SUFFIX) || Utils.directoryAllPresent(f, MOD_DESCRIPTOR_FILE_NAME); - /** - * Predicate to select readable files that look like saved games. - * Public for SaveGameValidator. - */ - public static final Predicate<File> saveGameFilter = f -> - f.isFile() && f.canRead() - && f.getName().endsWith(SAVE_GAME_SUFFIX); - /** Predicate to filter suitable candidates to be made into TCs. */ private static final Predicate<File> tcFileFilter = f -> Utils.fileAnySuffix(f, TC_FILE_SUFFIX, ZIP_FILE_SUFFIX) @@ -977,15 +966,18 @@ public class FreeColDirectories { return new File(getDataDirectory(), MAPS_DIRECTORY); } + public static boolean checkSavegameFile(File f) { + return f.isFile() && f.canRead() + && f.getName().endsWith(SAVE_GAME_SUFFIX); + } + /** * Get the map files. * * @return A list of map files, or null on error. */ public static List<File> getMapFileList() { - final File mapsDirectory = getMapsDirectory(); - return (mapsDirectory == null || !mapsDirectory.isDirectory()) ? null - : collectFiles(mapsDirectory, saveGameFilter); + return getSavegameFileList(getMapsDirectory()); } /** @@ -1093,24 +1085,19 @@ public class FreeColDirectories { * Gets the save game files in a given directory. * * @param directory The base directory, or the default locations if null. - * @return A stream of save game {@code File}s. - */ - public static Stream<File> getSavegameFiles(File directory) { - return (directory == null) - ? flatten(Stream.of(FreeColDirectories.getSaveDirectory(), - FreeColDirectories.getAutosaveDirectory()), - d -> fileStream(d, saveGameFilter)) - : fileStream(directory, saveGameFilter); - } - - /** - * Gets the save game files in a given directory. - * - * @param directory The base directory, or the default locations if null. * @return A list of save game {@code File}s. */ public static List<File> getSavegameFileList(File directory) { - return toList(getSavegameFiles(directory)); + if ((directory == null) || (!directory.isDirectory())) + return Collections.<File>emptyList(); + + List<File> result = new ArrayList<>(); + for (File walk : directory.listFiles()) + if (checkSavegameFile(walk)) + result.add(walk); + + Collections.sort(result); + return result; } /** @@ -1141,8 +1128,30 @@ public class FreeColDirectories { * @return The recent save game {@code File}, or null if not found. */ public static File getLastSaveGameFile() { - return maximize(getSavegameFiles(null), - fileModificationComparator); + long last_mtime = -1; + File last_file = null; + + for (File walk : getSaveDirectory().listFiles()) { + if (checkSavegameFile(walk)) { + long mtime = walk.lastModified(); + if (mtime > last_mtime) { + last_mtime = mtime; + last_file = walk; + } + } + } + + for (File walk : getAutosaveDirectory().listFiles()) { + if (checkSavegameFile(walk)) { + long mtime = walk.lastModified(); + if (mtime > last_mtime) { + last_mtime = mtime; + last_file = walk; + } + } + } + + return last_file; } /** diff --git a/src/net/sf/freecol/tools/SaveGameValidator.java b/src/net/sf/freecol/tools/SaveGameValidator.java index 936b56f33d7..ee0323a34b4 100644 --- a/src/net/sf/freecol/tools/SaveGameValidator.java +++ b/src/net/sf/freecol/tools/SaveGameValidator.java @@ -55,7 +55,7 @@ public class SaveGameValidator { if (file.exists()) { if (file.isDirectory()) { allFiles.addAll(FreeColDirectories.getSavegameFileList(file)); - } else if (FreeColDirectories.saveGameFilter.test(file)) { + } else if (FreeColDirectories.checkSavegameFile(file)) { allFiles.add(file); } } -- 2.11.0.rc0.7.gbe5a750 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Freecol-developers mailing list Freecol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freecol-developers