diff --git a/app.go b/app.go index 6a03dfa..eb8b2a0 100644 --- a/app.go +++ b/app.go @@ -95,6 +95,34 @@ func (a *App) DeleteConnection(id string) error { return config.SaveConfig(a.cfg) } +func (a *App) ReorderConnections(ids []string) error { + var newConns []config.ConnectionConfig + connMap := make(map[string]config.ConnectionConfig) + for _, c := range a.cfg.Connections { + connMap[c.ID] = c + } + + for _, id := range ids { + if c, ok := connMap[id]; ok { + newConns = append(newConns, c) + } + } + + // Add any connections that might have been missed + added := make(map[string]bool) + for _, c := range newConns { + added[c.ID] = true + } + for _, c := range a.cfg.Connections { + if !added[c.ID] { + newConns = append(newConns, c) + } + } + + a.cfg.Connections = newConns + return config.SaveConfig(a.cfg) +} + func (a *App) getExplorerForConnection(id string) (explorer.Explorer, error) { if id == "local" { return local.New(), nil diff --git a/frontend/src/main.js b/frontend/src/main.js index 50b03d1..a6d943f 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -1,4 +1,4 @@ -import { GetVersion, ListDir, GetConnections, SaveConnection, DeleteConnection, Delete, Rename, PromptUploadFiles, PromptUploadDirectory, PromptDownload, TransferItems, GetTransfers, ClearTransfers } from '../wailsjs/go/main/App.js'; +import { GetVersion, ListDir, GetConnections, SaveConnection, DeleteConnection, Delete, Rename, PromptUploadFiles, PromptUploadDirectory, PromptDownload, TransferItems, GetTransfers, ClearTransfers, ReorderConnections } from '../wailsjs/go/main/App.js'; let currentConn = 'local'; let currentPath = ''; @@ -8,6 +8,7 @@ let lastSelectedPath = null; let showHiddenFiles = false; let sortField = 'name'; let sortAsc = true; +let draggedConnId = null; function uuidv4() { return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c => @@ -79,6 +80,42 @@ async function loadConnections() { el.className = `conn-item ${currentConn === c.id ? 'active' : ''}`; el.innerHTML = `${c.protocol} ${c.name} `; el.onclick = () => switchConn(c.id); + + el.draggable = true; + el.addEventListener('dragstart', (e) => { + draggedConnId = c.id; + e.dataTransfer.effectAllowed = 'move'; + el.style.opacity = '0.5'; + }); + el.addEventListener('dragend', () => { + draggedConnId = null; + el.style.opacity = '1'; + }); + el.addEventListener('dragover', (e) => { + e.preventDefault(); + e.dataTransfer.dropEffect = 'move'; + }); + el.addEventListener('drop', async (e) => { + e.preventDefault(); + if (!draggedConnId || draggedConnId === c.id) return; + + const ids = connectionsCache.map(conn => conn.id); + const draggedIdx = ids.indexOf(draggedConnId); + const targetIdx = ids.indexOf(c.id); + + if (draggedIdx !== -1 && targetIdx !== -1) { + ids.splice(draggedIdx, 1); + ids.splice(targetIdx, 0, draggedConnId); + + try { + await ReorderConnections(ids); + await loadConnections(); + } catch (err) { + console.error("Failed to reorder connections:", err); + } + } + }); + list.appendChild(el); }); } diff --git a/frontend/wailsjs/go/main/App.d.ts b/frontend/wailsjs/go/main/App.d.ts index c3f43c3..8aca504 100755 --- a/frontend/wailsjs/go/main/App.d.ts +++ b/frontend/wailsjs/go/main/App.d.ts @@ -27,10 +27,12 @@ export function PromptUploadDirectory(arg1:string,arg2:string):Promise; export function PromptUploadFiles(arg1:string,arg2:string):Promise; -export function QueueTransfer(arg1:string,arg2:string,arg3:string,arg4:string,arg5:string,arg6:string,arg7:number):Promise; +export function QueueTransfer(arg1:string,arg2:string,arg3:string,arg4:string,arg5:string,arg6:string,arg7:number,arg8:boolean,arg9:number):Promise; export function Rename(arg1:string,arg2:string,arg3:string):Promise; +export function ReorderConnections(arg1:Array):Promise; + export function SaveConnection(arg1:config.ConnectionConfig,arg2:string):Promise; -export function TransferItems(arg1:string,arg2:string,arg3:string,arg4:Array):Promise; +export function TransferItems(arg1:string,arg2:string,arg3:string,arg4:Array,arg5:boolean,arg6:number):Promise; diff --git a/frontend/wailsjs/go/main/App.js b/frontend/wailsjs/go/main/App.js index 1e0950e..9b0e0d1 100755 --- a/frontend/wailsjs/go/main/App.js +++ b/frontend/wailsjs/go/main/App.js @@ -46,18 +46,22 @@ export function PromptUploadFiles(arg1, arg2) { return window['go']['main']['App']['PromptUploadFiles'](arg1, arg2); } -export function QueueTransfer(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { - return window['go']['main']['App']['QueueTransfer'](arg1, arg2, arg3, arg4, arg5, arg6, arg7); +export function QueueTransfer(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { + return window['go']['main']['App']['QueueTransfer'](arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); } export function Rename(arg1, arg2, arg3) { return window['go']['main']['App']['Rename'](arg1, arg2, arg3); } +export function ReorderConnections(arg1) { + return window['go']['main']['App']['ReorderConnections'](arg1); +} + export function SaveConnection(arg1, arg2) { return window['go']['main']['App']['SaveConnection'](arg1, arg2); } -export function TransferItems(arg1, arg2, arg3, arg4) { - return window['go']['main']['App']['TransferItems'](arg1, arg2, arg3, arg4); +export function TransferItems(arg1, arg2, arg3, arg4, arg5, arg6) { + return window['go']['main']['App']['TransferItems'](arg1, arg2, arg3, arg4, arg5, arg6); } diff --git a/frontend/wailsjs/go/models.ts b/frontend/wailsjs/go/models.ts index c32dbbd..61fed85 100755 --- a/frontend/wailsjs/go/models.ts +++ b/frontend/wailsjs/go/models.ts @@ -9,6 +9,7 @@ export namespace config { bucket?: string; region?: string; path_style?: boolean; + secure?: boolean; username?: string; keychain_key?: string; @@ -26,6 +27,7 @@ export namespace config { this.bucket = source["bucket"]; this.region = source["region"]; this.path_style = source["path_style"]; + this.secure = source["secure"]; this.username = source["username"]; this.keychain_key = source["keychain_key"]; } @@ -96,6 +98,8 @@ export namespace transfer { eta_seconds: number; status: string; error?: string; + verify: boolean; + limit_mbps: number; static createFrom(source: any = {}) { return new Transfer(source); @@ -113,6 +117,8 @@ export namespace transfer { this.eta_seconds = source["eta_seconds"]; this.status = source["status"]; this.error = source["error"]; + this.verify = source["verify"]; + this.limit_mbps = source["limit_mbps"]; } } diff --git a/frontend/wailsjs/runtime/package.json b/frontend/wailsjs/runtime/package.json old mode 100644 new mode 100755 diff --git a/frontend/wailsjs/runtime/runtime.d.ts b/frontend/wailsjs/runtime/runtime.d.ts old mode 100644 new mode 100755 diff --git a/frontend/wailsjs/runtime/runtime.js b/frontend/wailsjs/runtime/runtime.js old mode 100644 new mode 100755