new: snippet fmt

This commit is contained in:
lollipopkit
2024-01-21 17:42:43 +08:00
parent 07cc0a22e8
commit 7414dcc8da
28 changed files with 229 additions and 178 deletions

View File

@@ -206,7 +206,8 @@ class BackupPage extends StatelessWidget {
try {
context.showLoadingDialog();
final backup = await Computer.shared.start(Backup.fromJsonString, text.trim());
final backup =
await Computer.shared.start(Backup.fromJsonString, text.trim());
if (backupFormatVersion != backup.version) {
context.showSnackBar(l10n.backupVersionNotMatch);
return;

View File

@@ -6,6 +6,7 @@ import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/model/app/menu/container.dart';
import 'package:toolbox/data/model/container/image.dart';
import 'package:toolbox/data/model/container/type.dart';
import 'package:toolbox/data/res/store.dart';
@@ -15,7 +16,6 @@ import 'package:toolbox/view/widget/input_field.dart';
import '../../data/model/container/ps.dart';
import '../../data/model/server/server_private_info.dart';
import '../../data/provider/container.dart';
import '../../data/model/app/menu.dart';
import '../../data/res/ui.dart';
import '../widget/appbar.dart';
import '../widget/popup_menu.dart';

View File

@@ -1,10 +1,13 @@
import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:toolbox/core/extension/context/common.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/widget.dart';
import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/view/widget/cardx.dart';
import 'package:toolbox/view/widget/input_field.dart';
import '../../../data/model/server/snippet.dart';
@@ -147,10 +150,21 @@ class _SnippetEditPageState extends State<SnippetEditPage>
label: l10n.snippet,
icon: Icons.code,
),
_buildTip(),
],
);
}
Widget _buildTip() {
return CardX(
child: MarkdownBody(data: '''
📌 ${l10n.supportFmtArgs}
${Snippet.fmtArgs.keys.map((e) => '`$e`').join(', ')}
''').padding(const EdgeInsets.all(13)),
);
}
@override
void afterFirstLayout(BuildContext context) {
if (widget.snippet != null) {

View File

@@ -1,12 +1,9 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../data/model/server/server.dart';
import '../../../data/model/server/snippet.dart';
import '../../../data/res/ui.dart';
import '../../widget/tag.dart';
@@ -115,28 +112,24 @@ class _SnippetListPageState extends State<SnippetListPage> {
AppRoute.snippetEdit(snippet: snippet).go(context),
icon: const Icon(Icons.edit),
),
IconButton(
onPressed: () => _runSnippet(snippet),
icon: const Icon(Icons.play_arrow),
),
],
),
),
);
}
Future<void> _runSnippet(Snippet snippet) async {
final servers = await context.showPickDialog<Server>(
items: Pros.server.servers.toList(),
name: (e) => e.spi.name,
);
if (servers == null) {
return;
}
final ids = servers.map((e) => e.spi.id).toList();
final results = await Pros.server.runSnippetsMulti(ids, snippet);
if (results.isNotEmpty) {
AppRoute.snippetResult(results: results).go(context);
}
}
// Future<void> _runSnippet(Snippet snippet) async {
// final servers = await context.showPickDialog<Server>(
// items: Pros.server.servers.toList(),
// name: (e) => e.spi.name,
// );
// if (servers == null) {
// return;
// }
// final ids = servers.map((e) => e.spi.id).toList();
// final results = await Pros.server.runSnippetsMulti(ids, snippet);
// if (results.isNotEmpty) {
// AppRoute.snippetResult(results: results).go(context);
// }
// }
}

View File

@@ -9,15 +9,16 @@ import 'package:toolbox/core/extension/ssh_client.dart';
import 'package:toolbox/core/extension/uint8list.dart';
import 'package:toolbox/core/utils/platform/base.dart';
import 'package:toolbox/core/utils/platform/path.dart';
import 'package:toolbox/data/model/app/menu/server_func.dart';
import 'package:toolbox/data/model/app/shell_func.dart';
import 'package:toolbox/data/model/pkg/manager.dart';
import 'package:toolbox/data/model/server/dist.dart';
import 'package:toolbox/data/model/server/snippet.dart';
import 'package:toolbox/data/res/path.dart';
import 'package:toolbox/data/res/provider.dart';
import '../../core/route.dart';
import '../../core/utils/server.dart';
import '../../data/model/app/menu.dart';
import '../../data/model/pkg/upgrade_info.dart';
import '../../data/model/server/server_private_info.dart';
import 'popup_menu.dart';
@@ -98,7 +99,7 @@ class ServerFuncBtns extends StatelessWidget {
(e) => IconButton(
onPressed: () => _onTapMoreBtns(e, spi, context),
padding: EdgeInsets.zero,
tooltip: e.name,
tooltip: e.toStr,
icon: Icon(e.icon, size: iconSize ?? 15),
),
)
@@ -122,29 +123,18 @@ void _onTapMoreBtns(
check: () => _checkClient(context, spi.id),
);
break;
// case ServerTabMenuType.snippet:
// final snippets = await context.showPickDialog<Snippet>(
// items: Pros.snippet.snippets,
// name: (e) => e.name,
// multi: false
// );
// if (snippets == null || snippets.isEmpty) {
// return;
// }
// final result = await Pros.server.runSnippets(spi.id, snippets.first);
// if (result != null && result.isNotEmpty) {
// context.showRoundDialog(
// title: Text(l10n.result),
// child: Text(result),
// actions: [
// TextButton(
// onPressed: () => copy2Clipboard(result),
// child: Text(l10n.copy),
// )
// ],
// );
// }
// break;
case ServerTabMenu.snippet:
final snippet = await context.showPickSingleDialog<Snippet>(
items: Pros.snippet.snippets,
name: (e) => e.name,
);
if (snippet == null) return;
AppRoute.ssh(spi: spi, initCmd: snippet.fmtWith(spi)).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
);
break;
case ServerTabMenu.container:
AppRoute.docker(spi: spi).checkGo(
context: context,