From: "Enrico Weigelt, metux IT consult" <[email protected]>
---
.../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
[email protected]
https://lists.sourceforge.net/lists/listinfo/freecol-developers