P4: SFTP provider, connection store, connection manager UI
- SftpProvider (ssh2): password + key auth, keepalive, clean-dispose vs unexpected-close distinction, POSIX path helpers, s->ms attr normalization - ConnectionStore: plain JSON at appDataDir, 0600, atomic writes, folders - connect/disconnect + store CRUD handlers; sessionClosed push -> panels fall back to local and in-flight jobs fail - UI: session dropdown per panel (local/saved connections/manage), disconnect button, connection manager modal (folders, edit form, save/connect) - electrobun bundler: external cpu-features/*.node (ssh2 optional natives) - RpcService: gate requests on RPC socket open; defer initial panel loads past first render - verified against 192.168.10.122: full op matrix, upload/download/remote-remote recursive transfers, roundtrip integrity, recursive remote delete, store CRUD Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,16 @@
|
||||
<header class="flex items-center gap-2 border-b border-border px-3 py-1.5">
|
||||
<ng-icon name="mynaArrowLeftRight" class="text-muted-foreground" size="0.9rem" />
|
||||
<h1 class="text-[13px] font-semibold tracking-tight">{{ appName }}</h1>
|
||||
<div class="flex-1"></div>
|
||||
@if (rpc.available) {
|
||||
<button
|
||||
(click)="dialogs.manager.set(true)"
|
||||
title="Manage connections"
|
||||
class="grid size-6 place-items-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground"
|
||||
>
|
||||
<ng-icon name="mynaCog" size="0.95rem" />
|
||||
</button>
|
||||
}
|
||||
</header>
|
||||
|
||||
@if (!rpc.available) {
|
||||
@@ -70,6 +80,9 @@
|
||||
}
|
||||
|
||||
<!-- dialogs -->
|
||||
@if (dialogs.manager()) {
|
||||
<app-connection-manager />
|
||||
}
|
||||
@if (dialogs.prompt(); as req) {
|
||||
<app-prompt-dialog [request]="req" />
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user