fix: some fixes in the filesystem
This commit is contained in:
parent
e33cdbb172
commit
ba6462458c
@ -51,7 +51,7 @@ public class FilesystemLib {
|
||||
|
||||
try {
|
||||
if (fs.stat(path).type != EntryType.FILE) {
|
||||
throw new FilesystemException(ErrorReason.DOESNT_EXIST, "Not a file").setAction(ActionType.OPEN);
|
||||
throw new FilesystemException(ErrorReason.DOESNT_EXIST, "Not a file").setAction(ActionType.OPEN).setPath(path);
|
||||
}
|
||||
|
||||
return new FileLib(fs.open(path, _mode));
|
||||
|
@ -29,7 +29,11 @@ import me.topchetoeu.jscript.utils.filesystem.Mode;
|
||||
import me.topchetoeu.jscript.utils.filesystem.PhysicalFilesystem;
|
||||
import me.topchetoeu.jscript.utils.filesystem.RootFilesystem;
|
||||
import me.topchetoeu.jscript.utils.filesystem.STDFilesystem;
|
||||
import me.topchetoeu.jscript.utils.interop.Arguments;
|
||||
import me.topchetoeu.jscript.utils.interop.Expose;
|
||||
import me.topchetoeu.jscript.utils.interop.ExposeType;
|
||||
import me.topchetoeu.jscript.utils.interop.NativeWrapperProvider;
|
||||
import me.topchetoeu.jscript.utils.interop.WrapperName;
|
||||
import me.topchetoeu.jscript.utils.modules.ModuleRepo;
|
||||
import me.topchetoeu.jscript.utils.permissions.PermissionsManager;
|
||||
import me.topchetoeu.jscript.utils.permissions.PermissionsProvider;
|
||||
@ -43,6 +47,37 @@ public class JScriptRepl {
|
||||
static int j = 0;
|
||||
static String[] args;
|
||||
|
||||
public static interface Interface {
|
||||
void print();
|
||||
}
|
||||
|
||||
public static class Test implements Interface {
|
||||
public final int a = 10;
|
||||
public final int b = 5;
|
||||
|
||||
@Override
|
||||
public void print() {
|
||||
System.out.println("test!");
|
||||
}
|
||||
}
|
||||
|
||||
@WrapperName("Interface")
|
||||
public static class InterfaceLib {
|
||||
@Expose
|
||||
public static void __print(Arguments args) { args.self(Interface.class).print(); }
|
||||
}
|
||||
|
||||
@WrapperName("Testificate")
|
||||
public static class TestLib {
|
||||
@Expose(type = ExposeType.GETTER)
|
||||
public static int __a(Arguments args) { return args.self(Test.class).a; }
|
||||
@Expose(type = ExposeType.GETTER)
|
||||
public static int __b(Arguments args) { return args.self(Test.class).b; }
|
||||
|
||||
@Expose
|
||||
public static void __print(Arguments args) { System.out.println("NO!"); }
|
||||
}
|
||||
|
||||
private static void reader() {
|
||||
try {
|
||||
for (var arg : args) {
|
||||
@ -92,6 +127,9 @@ public class JScriptRepl {
|
||||
var wp = NativeWrapperProvider.get(environment);
|
||||
var glob = GlobalScope.get(environment);
|
||||
|
||||
wp.set(Interface.class, InterfaceLib.class);
|
||||
wp.set(Test.class, TestLib.class);
|
||||
|
||||
glob.define(null, false, new NativeFunction("exit", args -> {
|
||||
throw new InterruptException();
|
||||
}));
|
||||
@ -113,6 +151,12 @@ public class JScriptRepl {
|
||||
return null;
|
||||
}));
|
||||
|
||||
var test = new Test();
|
||||
|
||||
glob.define(environment, "test1", false, test);
|
||||
glob.define(environment, "test2", false, test);
|
||||
glob.define(environment, false, wp.getConstr(TestLib.class));
|
||||
|
||||
var fs = new RootFilesystem(PermissionsProvider.get(environment));
|
||||
fs.protocols.put("temp", new MemoryFilesystem(Mode.READ_WRITE));
|
||||
fs.protocols.put("file", new PhysicalFilesystem("."));
|
||||
|
@ -32,7 +32,7 @@ public abstract class BaseFile<T> implements File {
|
||||
@Override public synchronized long seek(long offset, int pos) {
|
||||
try {
|
||||
if (handle == null) throw new FilesystemException(ErrorReason.CLOSED);
|
||||
if (!mode.writable) throw new FilesystemException(ErrorReason.NO_PERMISSION, "File not open for seeking.");
|
||||
if (mode == Mode.NONE) throw new FilesystemException(ErrorReason.NO_PERMISSION, "File not open for seeking.");
|
||||
return onSeek(offset, pos);
|
||||
}
|
||||
catch (FilesystemException e) { throw e.setAction(ActionType.SEEK); }
|
||||
|
@ -54,16 +54,12 @@ public class FilesystemException extends RuntimeException {
|
||||
@Override public String getMessage() {
|
||||
var parts = new ArrayList<String>(10);
|
||||
|
||||
path = String.join(" ", parts).trim();
|
||||
if (path.isEmpty()) path = null;
|
||||
parts.clear();
|
||||
|
||||
parts.add(action == null ? "An action performed upon " : action.readable(reason.usePast));
|
||||
|
||||
if (entry == EntryType.FILE) parts.add("file");
|
||||
if (entry == EntryType.FOLDER) parts.add("folder");
|
||||
|
||||
if (path != null) parts.add(path);
|
||||
if (path != null && !path.isBlank()) parts.add(path.trim());
|
||||
|
||||
parts.add(reason.readable);
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package me.topchetoeu.jscript.utils.filesystem;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileAlreadyExistsException;
|
||||
import java.nio.file.Files;
|
||||
@ -35,7 +36,8 @@ public class PhysicalFilesystem implements Filesystem {
|
||||
));
|
||||
else return handles.put(new PhysicalFile(path, perms));
|
||||
}
|
||||
catch (IOException e) { throw new FilesystemException(ErrorReason.DOESNT_EXIST); }
|
||||
catch (FileNotFoundException e) { throw new FilesystemException(ErrorReason.DOESNT_EXIST); }
|
||||
catch (IOException e) { throw new FilesystemException(ErrorReason.NO_PERMISSION); }
|
||||
}
|
||||
catch (FilesystemException e) { throw e.setAction(ActionType.OPEN).setPath(_path); }
|
||||
}
|
||||
@ -68,12 +70,7 @@ public class PhysicalFilesystem implements Filesystem {
|
||||
|
||||
if (!Files.exists(path)) return new FileStat(Mode.NONE, EntryType.NONE);
|
||||
|
||||
var perms = Mode.NONE;
|
||||
|
||||
if (Files.isReadable(path)) {
|
||||
if (Files.isWritable(path)) perms = Mode.READ_WRITE;
|
||||
else perms = Mode.READ;
|
||||
}
|
||||
var perms = Mode.of(Files.isReadable(path), Files.isWritable(path));
|
||||
|
||||
if (perms == Mode.NONE) return new FileStat(Mode.NONE, EntryType.NONE);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user