Просмотр исходного кода

Add SFTP context menu download for files (#10971)

Leonardo Berbert 2 недель назад
Родитель
Сommit
85061732fa

+ 1 - 2
locale/pt-BR.po

@@ -710,7 +710,7 @@ msgstr "Abaixo"
 
 #: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43
 msgid "Download"
-msgstr "Transferir"
+msgstr "Download"
 
 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23
 msgid "Draw bold text in bright colors"
@@ -2571,4 +2571,3 @@ msgstr "Diminuir zoom"
 msgctxt "[Dynamic] port forwarding"
 msgid "id.port-forwarding.dynamic"
 msgstr "Dinâmico"
-

+ 20 - 0
tabby-ssh/src/components/sftpPanel.component.ts

@@ -170,6 +170,26 @@ export class SFTPPanelComponent {
         }
     }
 
+    async downloadItem (item: SFTPFile): Promise<void> {
+        if (item.isDirectory) {
+            await this.downloadFolder(item)
+            return
+        }
+
+        if (item.isSymlink) {
+            const target = path.resolve(this.path, await this.sftp.readlink(item.fullPath))
+            const stat = await this.sftp.stat(target)
+            if (stat.isDirectory) {
+                await this.downloadFolder(item)
+                return
+            }
+            await this.download(item.fullPath, stat.mode, stat.size)
+            return
+        }
+
+        await this.download(item.fullPath, item.mode, item.size)
+    }
+
     async openCreateDirectoryModal (): Promise<void> {
         const modal = this.ngbModal.open(SFTPCreateDirectoryModalComponent)
         const directoryName = await modal.result.catch(() => null)

+ 7 - 0
tabby-ssh/src/sftpContextMenu.ts

@@ -39,6 +39,13 @@ export class CommonSFTPContextMenu extends SFTPContextMenuItemProvider {
             })
         }
 
+        if (!item.isDirectory) {
+            items.push({
+                click: () => panel.downloadItem(item),
+                label: this.translate.instant('Download'),
+            })
+        }
+
         items.push({
             click: async () => {
                 if ((await this.platform.showMessageBox({