From 7c8a9ccd269f102d1ca585c450cdc5c8a0aeb269 Mon Sep 17 00:00:00 2001 From: a2geek Date: Sun, 4 Oct 2026 17:36:46 -0500 Subject: [PATCH] Filetype does NOT apply to every file system. Removing it. --- .../javafx/settings/ExportOption.java | 3 +- .../javafx/settings/ExportOptionTest.java | 5 -- .../storage/DiskFileStoreAdapter.java | 4 -- .../archive/shrinkit/ShrinkitFileEntry.java | 9 ++- .../archive/shrinkit/ShrinkitFileStore.java | 8 +-- .../archive/zip/ZipFileEntry.java | 9 --- .../applecommander/filestore/FileEntry.java | 5 +- .../filestore/ProdosAttributes.java | 57 +++++++++++++++++++ .../os/gamedos/GamedosFileEntry.java | 2 - 9 files changed, 68 insertions(+), 34 deletions(-) create mode 100644 lib/ac-api/src/main/java/org/applecommander/filestore/ProdosAttributes.java diff --git a/app/gui-javafx/src/main/java/org/applecommander/javafx/settings/ExportOption.java b/app/gui-javafx/src/main/java/org/applecommander/javafx/settings/ExportOption.java index 0cf7d2bc..5b7a139e 100644 --- a/app/gui-javafx/src/main/java/org/applecommander/javafx/settings/ExportOption.java +++ b/app/gui-javafx/src/main/java/org/applecommander/javafx/settings/ExportOption.java @@ -104,7 +104,8 @@ public enum ExportOption { try { List paths = new ArrayList<>(); String name = fileEntry.getName(); - String ext = fileEntry.getFiletype().toLowerCase(); + // TODO FIXME + String ext = ""; //fileEntry.getFiletype().toLowerCase(); int idx = name.lastIndexOf('.'); if (idx > -1) { ext = name.substring(idx + 1).toLowerCase(); diff --git a/app/gui-javafx/src/test/java/org/applecommander/javafx/settings/ExportOptionTest.java b/app/gui-javafx/src/test/java/org/applecommander/javafx/settings/ExportOptionTest.java index b45065b1..39e5495c 100644 --- a/app/gui-javafx/src/test/java/org/applecommander/javafx/settings/ExportOptionTest.java +++ b/app/gui-javafx/src/test/java/org/applecommander/javafx/settings/ExportOptionTest.java @@ -159,11 +159,6 @@ public class ExportOptionTest { return size; } - @Override - public String getFiletype() { - return filetype; - } - @Override public DataBuffer getDataFork() { return dataFork; diff --git a/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/DiskFileStoreAdapter.java b/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/DiskFileStoreAdapter.java index e9aea03c..0cf3b273 100644 --- a/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/DiskFileStoreAdapter.java +++ b/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/DiskFileStoreAdapter.java @@ -250,10 +250,6 @@ public class DiskFileStoreAdapter implements FileStore { return fileEntry.getSize(); } @Override - public String getFiletype() { - return fileEntry.getFiletype(); - } - @Override public ContentType getContentType() { if (fileEntry instanceof ProdosFileEntry prodosFileEntry) { return FileMagic.getProdosContentType(prodosFileEntry.getFiletypeByte(), diff --git a/lib/ac-api/src/main/java/org/applecommander/archive/shrinkit/ShrinkitFileEntry.java b/lib/ac-api/src/main/java/org/applecommander/archive/shrinkit/ShrinkitFileEntry.java index 4b031557..2ff74cf8 100644 --- a/lib/ac-api/src/main/java/org/applecommander/archive/shrinkit/ShrinkitFileEntry.java +++ b/lib/ac-api/src/main/java/org/applecommander/archive/shrinkit/ShrinkitFileEntry.java @@ -69,8 +69,7 @@ public class ShrinkitFileEntry implements FileEntry { return headerBlock.getUncompressedSize(); } - @Override - public String getFiletype() { + public String getFiletypeText() { if (headerBlock.getFileSysId() == 1) { return FileMagic.getProdosFileTypeText((int) headerBlock.getFileType(), (int) headerBlock.getExtraType()); } @@ -81,7 +80,7 @@ public class ShrinkitFileEntry implements FileEntry { public int getStorageType() { return headerBlock.getStorageType(); } - public String getStorageTypeString() { + public String getStorageTypeText() { return switch (getStorageType()) { case 0x1 -> "Seedling"; case 0x2 -> "Sapling"; @@ -100,7 +99,7 @@ public class ShrinkitFileEntry implements FileEntry { public Date getArchiveWhen() { return headerBlock.getArchiveWhen(); } - public String getThreadFormat() { + public String getThreadFormatText() { return headerBlock.getDataForkThreadRecord() .or(headerBlock::getResourceForkThreadRecord) .map(ThreadRecord::getThreadFormat) @@ -132,7 +131,7 @@ public class ShrinkitFileEntry implements FileEntry { public long getAccess() { return headerBlock.getAccess(); } - public String getAccessString() { + public String getAccessText() { StringBuilder sb = new StringBuilder(); String flags = "RWI--BRD"; // string index is bit value for (int i=0; i 0) { - return entry.getName().substring(pos + 1); - } - return "?"; - } - public FileTime getLastModifiedTime() { return entry.getLastModifiedTime(); } diff --git a/lib/ac-api/src/main/java/org/applecommander/filestore/FileEntry.java b/lib/ac-api/src/main/java/org/applecommander/filestore/FileEntry.java index 364ae8d3..a6fdecda 100644 --- a/lib/ac-api/src/main/java/org/applecommander/filestore/FileEntry.java +++ b/lib/ac-api/src/main/java/org/applecommander/filestore/FileEntry.java @@ -25,6 +25,7 @@ import org.applecommander.util.DataBuffer; import java.util.Optional; /// A `FileEntry` represents a single file in a file store. +/// The generic interface is intentionally spare to keep useless methods to a minimum. public interface FileEntry extends Container { /// The parent `Directory`, if applicable. Can return `null` if this is the root directory. @@ -45,10 +46,6 @@ public interface FileEntry extends Container { /// It may be approximate (based off a sector count, for instance). long getSize(); - /// Return the textual representation of the file type, such as "BAS" or "A" for Applesoft. - // TODO file type is not always a concept, maybe take this out of the general interface? (CP/M, Zip files for instance) - String getFiletype(); - /// Return the file's data. /// This does not include any metadata that may be embedded with the file. DataBuffer getDataFork(); diff --git a/lib/ac-api/src/main/java/org/applecommander/filestore/ProdosAttributes.java b/lib/ac-api/src/main/java/org/applecommander/filestore/ProdosAttributes.java new file mode 100644 index 00000000..f9f81c0b --- /dev/null +++ b/lib/ac-api/src/main/java/org/applecommander/filestore/ProdosAttributes.java @@ -0,0 +1,57 @@ +package org.applecommander.filestore; + +import java.util.Date; + +public record ProdosAttributes(String name, int access, int fileType, int auxType, long size, Date creation, Date modified) { + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private String name; + private int access; + private int fileType; + private int auxType; + private long size; + private Date creation; + private Date modified; + + public Builder name(String name) { + this.name = name; + return this; + } + public Builder locked() { + return access(0x21); + } + public Builder unlocked() { + return access(0xe3); + } + public Builder access(int access) { + this.access = access; + return this; + } + public Builder fileType(int fileType) { + this.fileType = fileType; + return this; + } + public Builder auxType(int auxType) { + this.auxType = auxType; + return this; + } + public Builder size(long size) { + this.size = size; + return this; + } + public Builder creation(Date creation) { + this.creation = creation; + return this; + } + public Builder modification(Date modified) { + this.modified = modified; + return this; + } + public ProdosAttributes build() { + return new ProdosAttributes(name, access, fileType, auxType, size, creation, modified); + } + } +} diff --git a/lib/ac-api/src/main/java/org/applecommander/os/gamedos/GamedosFileEntry.java b/lib/ac-api/src/main/java/org/applecommander/os/gamedos/GamedosFileEntry.java index 09747e14..27db1de4 100644 --- a/lib/ac-api/src/main/java/org/applecommander/os/gamedos/GamedosFileEntry.java +++ b/lib/ac-api/src/main/java/org/applecommander/os/gamedos/GamedosFileEntry.java @@ -70,11 +70,9 @@ public class GamedosFileEntry implements FileEntry, GamedosConstants { return (long) getSectorCount() * TrackSectorDevice.SECTOR_SIZE; } - @Override public String getFiletype() { return readEntry().getFixedLengthString(ENTRY_TYPE_OFFSET,1); } - public int getFirstTrack() { return readEntry().getUnsignedByte(ENTRY_TRACK_OFFSET); }