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

Reply via email to