mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
@@ -284,6 +284,10 @@ class SettingStore extends PersistentStore {
|
|||||||
|
|
||||||
late final letterCache = property('letterCache', false);
|
late final letterCache = property('letterCache', false);
|
||||||
|
|
||||||
|
/// Set it to `$EDITOR`, `vim` and etc. to use remote system editor in SSH terminal.
|
||||||
|
/// Set it empty to use local editor GUI.
|
||||||
|
late final sftpEditor = property('sftpEditor', '');
|
||||||
|
|
||||||
// Never show these settings for users
|
// Never show these settings for users
|
||||||
//
|
//
|
||||||
// ------BEGIN------
|
// ------BEGIN------
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Unbekannter Status",
|
"serverTabUnkown": "Unbekannter Status",
|
||||||
"setting": "Einstellungen",
|
"setting": "Einstellungen",
|
||||||
"sftpDlPrepare": "Verbindung vorbereiten...",
|
"sftpDlPrepare": "Verbindung vorbereiten...",
|
||||||
|
"sftpEditorTip": "Wenn leer, verwenden Sie den im App integrierten Dateieditor. Wenn ein Wert vorhanden ist, wird der Editor des Remote-Servers verwendet, z.B. `vim` (es wird empfohlen, automatisch gemäß `EDITOR` zu ermitteln).",
|
||||||
"sftpRmrDirSummary": "Verwenden Sie \"rm -r\", um das Verzeichnis in SFTP zu löschen.",
|
"sftpRmrDirSummary": "Verwenden Sie \"rm -r\", um das Verzeichnis in SFTP zu löschen.",
|
||||||
"sftpSSHConnected": "SFTP Verbunden",
|
"sftpSSHConnected": "SFTP Verbunden",
|
||||||
"sftpShowFoldersFirst": "Ordner zuerst anzeigen",
|
"sftpShowFoldersFirst": "Ordner zuerst anzeigen",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Unknown state",
|
"serverTabUnkown": "Unknown state",
|
||||||
"setting": "Settings",
|
"setting": "Settings",
|
||||||
"sftpDlPrepare": "Preparing to connect...",
|
"sftpDlPrepare": "Preparing to connect...",
|
||||||
|
"sftpEditorTip": "If empty, use the built-in file editor of the app. If a value is present, use the remote server’s editor, e.g., `vim` (recommended to automatically detect according to `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Use `rm -r` to delete a folder in SFTP.",
|
"sftpRmrDirSummary": "Use `rm -r` to delete a folder in SFTP.",
|
||||||
"sftpSSHConnected": "SFTP Connected",
|
"sftpSSHConnected": "SFTP Connected",
|
||||||
"sftpShowFoldersFirst": "Display folders first",
|
"sftpShowFoldersFirst": "Display folders first",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Estado desconocido",
|
"serverTabUnkown": "Estado desconocido",
|
||||||
"setting": "Configuración",
|
"setting": "Configuración",
|
||||||
"sftpDlPrepare": "Preparando para conectar al servidor...",
|
"sftpDlPrepare": "Preparando para conectar al servidor...",
|
||||||
|
"sftpEditorTip": "Si está vacío, use el editor de archivos incorporado de la aplicación. Si hay un valor, use el editor del servidor remoto, por ejemplo, `vim` (se recomienda detectar automáticamente según `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Usar `rm -r` en SFTP para eliminar directorios",
|
"sftpRmrDirSummary": "Usar `rm -r` en SFTP para eliminar directorios",
|
||||||
"sftpSSHConnected": "SFTP conectado...",
|
"sftpSSHConnected": "SFTP conectado...",
|
||||||
"sftpShowFoldersFirst": "Mostrar carpetas primero",
|
"sftpShowFoldersFirst": "Mostrar carpetas primero",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "État inconnu",
|
"serverTabUnkown": "État inconnu",
|
||||||
"setting": "Paramètres",
|
"setting": "Paramètres",
|
||||||
"sftpDlPrepare": "Préparation de la connexion...",
|
"sftpDlPrepare": "Préparation de la connexion...",
|
||||||
|
"sftpEditorTip": "Si vide, utilisez l’éditeur de fichiers intégré de l’application. Si une valeur est présente, utilisez l’éditeur du serveur distant, par exemple `vim` (il est recommandé de détecter automatiquement selon `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Utilisez `rm -r` pour supprimer un dossier en SFTP.",
|
"sftpRmrDirSummary": "Utilisez `rm -r` pour supprimer un dossier en SFTP.",
|
||||||
"sftpSSHConnected": "SFTP Connecté",
|
"sftpSSHConnected": "SFTP Connecté",
|
||||||
"sftpShowFoldersFirst": "Afficher d'abord les dossiers",
|
"sftpShowFoldersFirst": "Afficher d'abord les dossiers",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Negara yang tidak diketahui",
|
"serverTabUnkown": "Negara yang tidak diketahui",
|
||||||
"setting": "Pengaturan",
|
"setting": "Pengaturan",
|
||||||
"sftpDlPrepare": "Bersiap untuk terhubung ...",
|
"sftpDlPrepare": "Bersiap untuk terhubung ...",
|
||||||
|
"sftpEditorTip": "Jika kosong, gunakan editor file bawaan aplikasi. Jika ada nilai, gunakan editor server jarak jauh, misalnya `vim` (disarankan untuk mendeteksi secara otomatis sesuai `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Gunakan `rm -r` untuk menghapus dir di SFTP",
|
"sftpRmrDirSummary": "Gunakan `rm -r` untuk menghapus dir di SFTP",
|
||||||
"sftpSSHConnected": "Sftp terhubung",
|
"sftpSSHConnected": "Sftp terhubung",
|
||||||
"sftpShowFoldersFirst": "Folder ditampilkan lebih dulu",
|
"sftpShowFoldersFirst": "Folder ditampilkan lebih dulu",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "不明な状態",
|
"serverTabUnkown": "不明な状態",
|
||||||
"setting": "設定",
|
"setting": "設定",
|
||||||
"sftpDlPrepare": "サーバーへの接続を準備中...",
|
"sftpDlPrepare": "サーバーへの接続を準備中...",
|
||||||
|
"sftpEditorTip": "空の場合は、アプリ内蔵のファイルエディタを使用します。値がある場合は、リモートサーバーのエディタ(例:`vim`)を使用します(`EDITOR` に従って自動検出することをお勧めします)。",
|
||||||
"sftpRmrDirSummary": "SFTPで`rm -r`を使用してフォルダーを削除",
|
"sftpRmrDirSummary": "SFTPで`rm -r`を使用してフォルダーを削除",
|
||||||
"sftpSSHConnected": "SFTPに接続されました...",
|
"sftpSSHConnected": "SFTPに接続されました...",
|
||||||
"sftpShowFoldersFirst": "フォルダーを先に表示",
|
"sftpShowFoldersFirst": "フォルダーを先に表示",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Onbekende status",
|
"serverTabUnkown": "Onbekende status",
|
||||||
"setting": "Instellingen",
|
"setting": "Instellingen",
|
||||||
"sftpDlPrepare": "Voorbereiden om verbinding te maken...",
|
"sftpDlPrepare": "Voorbereiden om verbinding te maken...",
|
||||||
|
"sftpEditorTip": "Indien leeg, gebruik de ingebouwde bestandseditor van de app. Indien een waarde aanwezig is, gebruik de editor van de externe server, bijvoorbeeld `vim` (aanbevolen om automatisch te detecteren volgens `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Gebruik `rm -r` om een map te verwijderen in SFTP.",
|
"sftpRmrDirSummary": "Gebruik `rm -r` om een map te verwijderen in SFTP.",
|
||||||
"sftpSSHConnected": "SFTP Verbonden",
|
"sftpSSHConnected": "SFTP Verbonden",
|
||||||
"sftpShowFoldersFirst": "Mappen eerst weergeven",
|
"sftpShowFoldersFirst": "Mappen eerst weergeven",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "Estado desconhecido",
|
"serverTabUnkown": "Estado desconhecido",
|
||||||
"setting": "Configurações",
|
"setting": "Configurações",
|
||||||
"sftpDlPrepare": "Preparando para conectar ao servidor...",
|
"sftpDlPrepare": "Preparando para conectar ao servidor...",
|
||||||
|
"sftpEditorTip": "Se vazio, use o editor de arquivos integrado do aplicativo. Se houver um valor, use o editor do servidor remoto, por exemplo, `vim` (recomendado detectar automaticamente de acordo com `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Usar `rm -r` em SFTP para excluir pastas",
|
"sftpRmrDirSummary": "Usar `rm -r` em SFTP para excluir pastas",
|
||||||
"sftpSSHConnected": "SFTP conectado...",
|
"sftpSSHConnected": "SFTP conectado...",
|
||||||
"sftpShowFoldersFirst": "Mostrar pastas primeiro",
|
"sftpShowFoldersFirst": "Mostrar pastas primeiro",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "неизвестно",
|
"serverTabUnkown": "неизвестно",
|
||||||
"setting": "настройки",
|
"setting": "настройки",
|
||||||
"sftpDlPrepare": "Подготовка к подключению к серверу...",
|
"sftpDlPrepare": "Подготовка к подключению к серверу...",
|
||||||
|
"sftpEditorTip": "Если пусто, используйте встроенный редактор файлов приложения. Если значение указано, используйте редактор удаленного сервера, например, `vim` (рекомендуется автоматически определять согласно `EDITOR`).",
|
||||||
"sftpRmrDirSummary": "Использовать `rm -r` в SFTP для удаления папок",
|
"sftpRmrDirSummary": "Использовать `rm -r` в SFTP для удаления папок",
|
||||||
"sftpSSHConnected": "SFTP подключен...",
|
"sftpSSHConnected": "SFTP подключен...",
|
||||||
"sftpShowFoldersFirst": "показывать папки в начале",
|
"sftpShowFoldersFirst": "показывать папки в начале",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "未知状态",
|
"serverTabUnkown": "未知状态",
|
||||||
"setting": "设置",
|
"setting": "设置",
|
||||||
"sftpDlPrepare": "准备连接至服务器...",
|
"sftpDlPrepare": "准备连接至服务器...",
|
||||||
|
"sftpEditorTip": "如果为空, 使用App内置的文件编辑器. 如果有值, 这是用远程服务器的编辑器, 例如 `vim` (建议根据 `EDITOR` 自动获取).",
|
||||||
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 来删除文件夹",
|
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 来删除文件夹",
|
||||||
"sftpSSHConnected": "SFTP 已连接...",
|
"sftpSSHConnected": "SFTP 已连接...",
|
||||||
"sftpShowFoldersFirst": "文件夹显示在前",
|
"sftpShowFoldersFirst": "文件夹显示在前",
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
"serverTabUnkown": "未知狀態",
|
"serverTabUnkown": "未知狀態",
|
||||||
"setting": "設置",
|
"setting": "設置",
|
||||||
"sftpDlPrepare": "準備連接至伺服器...",
|
"sftpDlPrepare": "準備連接至伺服器...",
|
||||||
|
"sftpEditorTip": "如果為空, 使用App內置的文件編輯器。如果有值, 則使用遠程伺服器的編輯器, 例如 `vim`(建議根據 `EDITOR` 自動獲取)。",
|
||||||
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 來刪除文件夾",
|
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 來刪除文件夾",
|
||||||
"sftpSSHConnected": "SFTP 已連接...",
|
"sftpSSHConnected": "SFTP 已連接...",
|
||||||
"sftpShowFoldersFirst": "資料夾顯示在前",
|
"sftpShowFoldersFirst": "資料夾顯示在前",
|
||||||
|
|||||||
@@ -691,6 +691,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
Widget _buildSFTP() {
|
Widget _buildSFTP() {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
|
_buildSftpEditor(),
|
||||||
_buildSftpRmrDir(),
|
_buildSftpRmrDir(),
|
||||||
_buildSftpOpenLastPath(),
|
_buildSftpOpenLastPath(),
|
||||||
_buildSftpShowFoldersFirst(),
|
_buildSftpShowFoldersFirst(),
|
||||||
@@ -1237,4 +1238,40 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
trailing: StoreSwitch(prop: _setting.letterCache),
|
trailing: StoreSwitch(prop: _setting.letterCache),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildSftpEditor() {
|
||||||
|
return _setting.sftpEditor.listenable().listenVal(
|
||||||
|
(val) {
|
||||||
|
return ListTile(
|
||||||
|
leading: const Icon(MingCute.edit_fill),
|
||||||
|
title: TipText(text: l10n.editor, tip: l10n.sftpEditorTip),
|
||||||
|
trailing: Text(
|
||||||
|
val.isEmpty ? l10n.inner : val,
|
||||||
|
style: UIs.text15,
|
||||||
|
),
|
||||||
|
onTap: () async {
|
||||||
|
final ctrl = TextEditingController(text: val);
|
||||||
|
void onSave(String s) {
|
||||||
|
_setting.sftpEditor.put(s);
|
||||||
|
context.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
await context.showRoundDialog<bool>(
|
||||||
|
title: l10n.choose,
|
||||||
|
child: Input(
|
||||||
|
controller: ctrl,
|
||||||
|
autoFocus: true,
|
||||||
|
label: l10n.editor,
|
||||||
|
hint: '\$EDITOR / vim / nano ...',
|
||||||
|
icon: Icons.edit,
|
||||||
|
suggestion: false,
|
||||||
|
onSubmitted: onSave,
|
||||||
|
),
|
||||||
|
actions: Btns.oks(onTap: () => onSave(ctrl.text)),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -445,6 +445,18 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _edit(SftpName name) async {
|
Future<void> _edit(SftpName name) async {
|
||||||
|
context.pop();
|
||||||
|
|
||||||
|
// #489
|
||||||
|
final editor = Stores.setting.sftpEditor.fetch();
|
||||||
|
if (editor.isNotEmpty) {
|
||||||
|
// Use single quote to avoid escape
|
||||||
|
final cmd = "$editor '${_getRemotePath(name)}'";
|
||||||
|
await AppRoutes.ssh(spi: widget.spi, initCmd: cmd).go(context);
|
||||||
|
await _listDir();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final size = name.attr.size;
|
final size = name.attr.size;
|
||||||
if (size == null || size > Miscs.editorMaxSize) {
|
if (size == null || size > Miscs.editorMaxSize) {
|
||||||
context.showSnackBar(l10n.fileTooLarge(
|
context.showSnackBar(l10n.fileTooLarge(
|
||||||
@@ -454,7 +466,6 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
|||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
context.pop();
|
|
||||||
|
|
||||||
final remotePath = _getRemotePath(name);
|
final remotePath = _getRemotePath(name);
|
||||||
final localPath = await _getLocalPath(remotePath);
|
final localPath = await _getLocalPath(remotePath);
|
||||||
|
|||||||
@@ -385,8 +385,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "v1.0.88"
|
ref: "v1.0.89"
|
||||||
resolved-ref: fd87becb3c112edac090903e78d863b5ca93a70e
|
resolved-ref: "2ea7a87e7f4c1bd68902557799a4e9406e559dcf"
|
||||||
url: "https://github.com/lppcg/fl_lib"
|
url: "https://github.com/lppcg/fl_lib"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ dependencies:
|
|||||||
fl_lib:
|
fl_lib:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lppcg/fl_lib
|
url: https://github.com/lppcg/fl_lib
|
||||||
ref: v1.0.88
|
ref: v1.0.89
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
# dartssh2:
|
# dartssh2:
|
||||||
|
|||||||
Reference in New Issue
Block a user