Improve shell control bookkeeping

This commit is contained in:
crschnick 2024-09-22 16:26:21 +00:00
parent acb2583100
commit dd542d6758
7 changed files with 28 additions and 6 deletions

View file

@ -19,6 +19,13 @@ public class LocalFileSystem {
}
}
public static void reset() throws Exception {
if (localFileSystem != null) {
localFileSystem.close();
localFileSystem = null;
}
}
public static FileEntry getLocalFileEntry(Path file) throws Exception {
if (localFileSystem == null) {
throw new IllegalStateException();

View file

@ -72,10 +72,11 @@ public final class OpenFileSystemModel extends BrowserSessionTab<FileSystemStore
@Override
public boolean canImmediatelyClose() {
return (progress.getValue() == null || progress.getValue().done())
|| (fileSystem != null
&& fileSystem.getShell().isPresent()
&& fileSystem.getShell().get().getLock().isLocked());
if (fileSystem == null || fileSystem.getShell().isEmpty() || !fileSystem.getShell().get().getLock().isLocked()) {
return true;
}
return progress.getValue() == null || progress.getValue().done();
}
@Override

View file

@ -51,7 +51,7 @@ public class BrowserSessionModel extends BrowserAbstractSessionModel<BrowserSess
for (var o : new ArrayList<>(sessionEntries)) {
// Don't close busy connections gracefully
// as we otherwise might lock up
if (o.canImmediatelyClose()) {
if (!o.canImmediatelyClose()) {
continue;
}

View file

@ -8,6 +8,7 @@ import io.xpipe.app.core.*;
import io.xpipe.app.core.check.*;
import io.xpipe.app.ext.ActionProvider;
import io.xpipe.app.ext.DataStoreProviders;
import io.xpipe.app.ext.ProcessControlProvider;
import io.xpipe.app.issue.TrackEvent;
import io.xpipe.app.prefs.AppPrefs;
import io.xpipe.app.resources.AppResources;
@ -74,7 +75,7 @@ public class BaseMode extends OperationMode {
public void onSwitchFrom() {}
@Override
public void finalTeardown() {
public void finalTeardown() throws Exception {
TrackEvent.info("Background mode shutdown started");
BrowserSessionModel.DEFAULT.reset();
SshLocalBridge.reset();
@ -82,6 +83,9 @@ public class BaseMode extends OperationMode {
DataStoreProviders.reset();
DataStorage.reset();
AppPrefs.reset();
DataStorageSyncHandler.getInstance().reset();
LocalShell.reset();
ProcessControlProvider.get().reset();
AppResources.reset();
AppExtensionManager.reset();
AppDataLock.unlock();

View file

@ -63,4 +63,10 @@ public class GuiMode extends PlatformMode {
UpdateChangelogAlert.showIfNeeded();
}
@Override
public void finalTeardown() throws Throwable {
LocalFileSystem.reset();
super.finalTeardown();
}
}

View file

@ -23,6 +23,8 @@ public abstract class ProcessControlProvider {
return INSTANCE;
}
public abstract void reset();
public abstract ShellControl withDefaultScripts(ShellControl pc);
public abstract ShellControl sub(

View file

@ -10,6 +10,8 @@ public interface DataStorageSyncHandler {
return (DataStorageSyncHandler) ProcessControlProvider.get().getGitStorageHandler();
}
void reset() throws Exception;
boolean validateConnection();
boolean supportsSync();