From 5da84ae0821da53b5b9b76e5b4b14b57c4cb44b3 Mon Sep 17 00:00:00 2001 From: Rob Greene Date: Wed, 25 Oct 2023 18:29:17 -0500 Subject: [PATCH] Fixing listing for empty disks to display header and footer in acx; otherwise output is empty. Inspired by this PR: https://github.com/AppleCommander/AppleCommander/pull/95 --- .../applecommander/util/filestreamer/FileStreamer.java | 10 ++++++++-- .../applecommander/util/filestreamer/FileTuple.java | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileStreamer.java b/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileStreamer.java index 8d19380..9340959 100644 --- a/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileStreamer.java +++ b/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileStreamer.java @@ -173,7 +173,7 @@ public class FileStreamer { private FileTupleIterator() { for (FormattedDisk formattedDisk : formattedDisks) { - files.addAll(toTupleList(FileTuple.of(formattedDisk))); + files.add(FileTuple.of(formattedDisk)); } } @@ -190,6 +190,12 @@ public class FileStreamer { currentDisk = tuple.formattedDisk; beforeDisk.accept(currentDisk); } + // Handle disks independently and guarantee disk events fire for empty disks + if (tuple.isDisk()) { + tuple = files.removeFirst(); + files.addAll(0, toTupleList(tuple)); + return hasNext(); + } } else { if (currentDisk != null) { afterDisk.accept(currentDisk); @@ -203,7 +209,7 @@ public class FileStreamer { public FileTuple next() { if (hasNext()) { FileTuple tuple = files.removeFirst(); - if (recursiveFlag && tuple.fileEntry.isDirectory()) { + if (recursiveFlag && tuple.isDirectory()) { FileTuple newTuple = tuple.pushd(tuple.fileEntry); files.addAll(0, toTupleList(newTuple)); } diff --git a/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileTuple.java b/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileTuple.java index 9bd9a1f..73df375 100644 --- a/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileTuple.java +++ b/lib/ac-api/src/main/java/com/webcodepro/applecommander/util/filestreamer/FileTuple.java @@ -52,6 +52,16 @@ public class FileTuple { newPaths.add(directoryEntry.getFilename()); return new FileTuple(formattedDisk, newPaths, (DirectoryEntry)directoryEntry, null); } + public boolean isDisk() { + // Just in case directoryEntry is unset or is a disk - looks like either cna occur! + return fileEntry == null && (directoryEntry == null || directoryEntry == formattedDisk); + } + public boolean isDirectory() { + return !isDisk() && (fileEntry == null || fileEntry.isDirectory()); + } + public boolean isFile() { + return fileEntry != null && !fileEntry.isDirectory(); + } public FileTuple of(FileEntry fileEntry) { return new FileTuple(formattedDisk, paths, directoryEntry, fileEntry); }