diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java index 60ea385e7..9d53e543d 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java @@ -166,32 +166,37 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { var fs = new WrapperFileSystem(fileSystemFactory.apply(getEntry().asNeeded())); - Platform.runLater(() -> { - getFileSystemNameSuffix().set(fs.getSuffix()); - }); - if (fs.getShell().isPresent()) { - ProcModuleProvider.get().withDefaultScripts(fs.getShell().get()); - } - fs.open(); - - // Listen to kill after init as the shell might get killed during init for certain reasons - if (fs.getRawShellControl().isPresent()) { - fs.getRawShellControl().get().onKill(() -> { - browserModel.closeAsync(this); + try { + Platform.runLater(() -> { + getFileSystemNameSuffix().set(fs.getSuffix()); }); - } - this.fileSystem = fs; - - // Cache for later usage - if (fs.getShell().isPresent()) { - fs.getShell().get().view().getPasswdFile(); - fs.getShell().get().view().getGroupFile(); - } - - for (var a : ActionProvider.ALL) { - if (a instanceof BrowserMenuItemProvider ba) { - ba.init(this); + if (fs.getShell().isPresent()) { + ProcModuleProvider.get().withDefaultScripts(fs.getShell().get()); } + fs.open(); + + // Listen to kill after init as the shell might get killed during init for certain reasons + if (fs.getRawShellControl().isPresent()) { + fs.getRawShellControl().get().onKill(() -> { + browserModel.closeAsync(this); + }); + } + this.fileSystem = fs; + + // Cache for later usage + if (fs.getShell().isPresent()) { + fs.getShell().get().view().getPasswdFile(); + fs.getShell().get().view().getGroupFile(); + } + + for (var a : ActionProvider.ALL) { + if (a instanceof BrowserMenuItemProvider ba) { + ba.init(this); + } + } + } catch (Exception e) { + fs.close(); + throw e; } }); this.savedState = BrowserFileSystemSavedState.loadForStore(this); diff --git a/app/src/main/java/io/xpipe/app/fs/ShellFileSystem.java b/app/src/main/java/io/xpipe/app/fs/ShellFileSystem.java index 16ccc98e9..e56e33e58 100644 --- a/app/src/main/java/io/xpipe/app/fs/ShellFileSystem.java +++ b/app/src/main/java/io/xpipe/app/fs/ShellFileSystem.java @@ -247,6 +247,7 @@ public class ShellFileSystem implements FileSystem { if (!shellControl.getTtyState().isPreservesOutput() || !shellControl.getTtyState().isSupportsInput()) { + shellControl.close(); var ex = new UnsupportedOperationException( "Shell has a PTY allocated and as a result does not support file system operations."); ErrorEventFactory.preconfigure(