From 610f46da0d7feec2a53b3ad48c554963d0338954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Sat, 3 Aug 2024 14:52:39 +0800 Subject: [PATCH] opt.: bulk import servers (#512) --- .../model/server/server_private_info.dart | 22 +++++++++++++++++++ lib/l10n/app_de.arb | 1 - lib/l10n/app_en.arb | 1 - lib/l10n/app_es.arb | 1 - lib/l10n/app_fr.arb | 1 - lib/l10n/app_id.arb | 1 - lib/l10n/app_ja.arb | 1 - lib/l10n/app_nl.arb | 1 - lib/l10n/app_pt.arb | 1 - lib/l10n/app_ru.arb | 1 - lib/l10n/app_tr.arb | 7 ++---- lib/l10n/app_zh.arb | 1 - lib/l10n/app_zh_tw.arb | 1 - lib/view/page/backup.dart | 16 +++++--------- lib/view/page/snippet/edit.dart | 11 +++++++--- lib/view/page/snippet/list.dart | 2 +- 16 files changed, 39 insertions(+), 30 deletions(-) diff --git a/lib/data/model/server/server_private_info.dart b/lib/data/model/server/server_private_info.dart index c3d38267..2e988cd0 100644 --- a/lib/data/model/server/server_private_info.dart +++ b/lib/data/model/server/server_private_info.dart @@ -180,6 +180,28 @@ class ServerPrivateInfo { String toString() { return id; } + + static const example = ServerPrivateInfo( + name: 'name', + ip: 'ip', + port: 22, + user: 'root', + pwd: 'pwd', + keyId: 'private_key_id', + tags: ['tag1', 'tag2'], + alterUrl: 'user@ip:port', + autoConnect: true, + jumpId: 'jump_server_id', + custom: ServerCustom( + pveAddr: 'http://localhost:8006', + pveIgnoreCert: false, + cmds: { + 'echo': 'echo hello', + }, + preferTempDev: 'nvme-pci-0400', + logoUrl: 'https://example.com/logo.png', + ), + ); } class _IpPort { diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 3c02062f..6feb246c 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -30,7 +30,6 @@ "bioAuth": "Biozertifizierung", "browser": "Browser", "bulkImportServers": "Server im Batch importieren", - "bulkImportServersTip": "Sie können das [Format]({url}) hier finden.", "canPullRefresh": "Danach: herunterziehen zum Aktualisieren", "cancel": "Abbrechen", "choose": "Auswählen", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 3539189a..84f939a3 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -30,7 +30,6 @@ "bioAuth": "Biometric auth", "browser": "Browser", "bulkImportServers": "Batch import servers", - "bulkImportServersTip": "You can find the [format]({url}) here.", "canPullRefresh": "You can pull to refresh.", "cancel": "Cancel", "choose": "Choose", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 75fa0de6..cc1130e3 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -30,7 +30,6 @@ "bioAuth": "Autenticación biométrica", "browser": "Navegador", "bulkImportServers": "Importar servidores en masa", - "bulkImportServersTip": "Puede encontrar el [formato]]({url}) aquí.", "canPullRefresh": "Se puede deslizar hacia abajo para refrescar", "cancel": "Cancelar", "choose": "Elegir", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 5530be45..a399c930 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -30,7 +30,6 @@ "bioAuth": "Authentification biométrique", "browser": "Navigateur", "bulkImportServers": "Importation groupée des serveurs", - "bulkImportServersTip": "Vous pouvez trouver le [format]({url}) ici.", "canPullRefresh": "Vous pouvez tirer pour rafraîchir.", "cancel": "Annuler", "choose": "Choisir", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 926554f0..69cb4400 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -30,7 +30,6 @@ "bioAuth": "Biosertifikasi", "browser": "Peramban", "bulkImportServers": "Impor server secara massal", - "bulkImportServersTip": "Anda dapat menemukan [format]({url}) di sini.", "canPullRefresh": "Anda dapat menarik untuk menyegarkan.", "cancel": "Membatalkan", "choose": "Memilih", diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 2a1df99e..5c16e360 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -30,7 +30,6 @@ "bioAuth": "生体認証", "browser": "ブラウザ", "bulkImportServers": "サーバーを一括インポートする", - "bulkImportServersTip": "[こちら]({url})でフォーマットを見つけることができます", "canPullRefresh": "引っ張って更新できます", "cancel": "キャンセル", "choose": "選択", diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index be62021a..17a5b28f 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -30,7 +30,6 @@ "bioAuth": "Biometrische authenticatie", "browser": "Browser", "bulkImportServers": "Servers batchgewijs importeren", - "bulkImportServersTip": "U kunt het [formaat]({url}) hier vinden.", "canPullRefresh": "Je kunt verversen door te slepen.", "cancel": "Annuleren", "choose": "Kiezen", diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index ef480c49..53aaa5fe 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -30,7 +30,6 @@ "bioAuth": "Autenticação biométrica", "browser": "Navegador", "bulkImportServers": "Importar servidores em lote", - "bulkImportServersTip": "Você pode encontrar o [formato]({url}) aqui.", "canPullRefresh": "Pode puxar para atualizar", "cancel": "Cancelar", "choose": "Escolher", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index c487746f..dbca3c52 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -30,7 +30,6 @@ "bioAuth": "биометрическая аутентификация", "browser": "Браузер", "bulkImportServers": "Пакетный импорт серверов", - "bulkImportServersTip": "[Формат]({url}) можно найти здесь.", "canPullRefresh": "можно обновить, потянув вниз", "cancel": "отмена", "choose": "выбрать", diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 99dcffb3..99f0d65e 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -30,7 +30,6 @@ "bioAuth": "Biyometrik kimlik doğrulama", "browser": "Tarayıcı", "bulkImportServers": "Toplu sunucu içe aktarma", - "bulkImportServersTip": "[Formatı]({url}) burada bulabilirsiniz.", "canPullRefresh": "Yenilemek için aşağı çekebilirsiniz.", "cancel": "İptal", "choose": "Seç", @@ -75,7 +74,7 @@ "disk": "Disk", "diskIgnorePath": "Disk için göz ardı edilen yol", "displayCpuIndex": "CPU dizinini görüntüle", - "displayName": "Görünen ad", + "displayName": "Görünen ad", "dl2Local": "{fileName} dosyasını yerel olarak indirmek istiyor musunuz?", "doc": "Dokümantasyon", "dockerEditHost": "DOCKER_HOST'u düzenle", @@ -344,6 +343,4 @@ "write": "Yaz", "writeScriptFailTip": "Komut dosyasına yazma başarısız oldu, muhtemelen izin eksikliğinden veya dizin mevcut olmadığından kaynaklanıyor olabilir.", "writeScriptTip": "Sunucuya bağlandıktan sonra, sistem durumunu izlemek için ~/.config/server_box'a bir komut dosyası yazılacaktır. Komut dosyası içeriğini inceleyebilirsiniz." -} - - +} \ No newline at end of file diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index d8a25810..05d03d35 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -30,7 +30,6 @@ "bioAuth": "生物认证", "browser": "浏览器", "bulkImportServers": "批量导入服务器", - "bulkImportServersTip": "可以在这里找到[格式]({url})", "canPullRefresh": "可以下拉刷新", "cancel": "取消", "choose": "选择", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index 4405a8bd..4a0b8207 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -30,7 +30,6 @@ "bioAuth": "生物認證", "browser": "瀏覽器", "bulkImportServers": "批量導入伺服器", - "bulkImportServersTip": "您可以在此處找到[格式]({url})", "canPullRefresh": "可以下拉更新", "cancel": "取消", "choose": "選擇", diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index da176166..ed8f99af 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -4,7 +4,6 @@ import 'dart:io'; import 'package:computer/computer.dart'; import 'package:fl_lib/fl_lib.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/core/utils/sync/icloud.dart'; import 'package:server_box/core/utils/sync/webdav.dart'; @@ -12,7 +11,6 @@ import 'package:server_box/data/model/app/backup.dart'; import 'package:server_box/data/model/server/server_private_info.dart'; import 'package:server_box/data/res/misc.dart'; import 'package:server_box/data/res/store.dart'; -import 'package:server_box/data/res/url.dart'; class BackupPage extends StatelessWidget { BackupPage({super.key}); @@ -204,12 +202,6 @@ class BackupPage extends StatelessWidget { return CardX( child: ListTile( title: Text(l10n.bulkImportServers), - subtitle: SimpleMarkdown( - data: l10n.bulkImportServersTip(Urls.appWiki), - styleSheet: MarkdownStyleSheet( - p: UIs.textGrey, - ), - ), leading: const Icon(Icons.import_export), onTap: () => _onBulkImportServers(context), trailing: const Icon(Icons.keyboard_arrow_right), @@ -400,8 +392,12 @@ class BackupPage extends StatelessWidget { } void _onBulkImportServers(BuildContext context) async { - final text = await Pfs.pickFileString(); - if (text == null) return; + final data = await context.showImportDialog( + title: l10n.server, + modelDef: ServerPrivateInfo.example.toJson(), + ); + if (data == null) return; + final text = String.fromCharCodes(data); try { final (spis, err) = await context.showLoadingDialog( diff --git a/lib/view/page/snippet/edit.dart b/lib/view/page/snippet/edit.dart index b9de96ae..9902a9c6 100644 --- a/lib/view/page/snippet/edit.dart +++ b/lib/view/page/snippet/edit.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:computer/computer.dart'; import 'package:fl_lib/fl_lib.dart'; import 'package:flutter/material.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; @@ -105,7 +106,7 @@ class _SnippetEditPageState extends State Widget _buildBody() { return ListView( - padding: const EdgeInsets.symmetric(horizontal:13), + padding: const EdgeInsets.symmetric(horizontal: 13), children: [ _buildImport(), Input( @@ -198,8 +199,12 @@ class _SnippetEditPageState extends State ); if (data == null) return; final str = String.fromCharCodes(data); - final list = json.decode(str) as List; - if (list.isEmpty) return; + final (list, _) = await context.showLoadingDialog( + fn: () => Computer.shared.start((s) { + return json.decode(s) as List; + }, str), + ); + if (list == null || list.isEmpty) return; final snippets = []; final errs = []; for (final item in list) { diff --git a/lib/view/page/snippet/list.dart b/lib/view/page/snippet/list.dart index a4025048..1b55f095 100644 --- a/lib/view/page/snippet/list.dart +++ b/lib/view/page/snippet/list.dart @@ -52,7 +52,7 @@ class _SnippetListPageState extends State { .toList(); return ReorderableListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 13), + padding: const EdgeInsets.symmetric(horizontal: 11), itemCount: filtered.length, onReorder: (oldIdx, newIdx) => setState(() { provider.snippets.moveByItem(