fix & opt.

- fix: ssh paste
- opt.: docker logs & shell
This commit is contained in:
lollipopkit
2023-05-27 18:58:38 +08:00
parent 4f45ce3f50
commit 02494651fc
9 changed files with 36 additions and 55 deletions

View File

@@ -492,7 +492,7 @@ class SZh extends S {
@override @override
String sureDelete(Object name) { String sureDelete(Object name) {
return '确定删除[$name]'; return '确定删除 [$name]';
} }
@override @override
@@ -1078,7 +1078,7 @@ class SZhTw extends SZh {
@override @override
String sureDelete(Object name) { String sureDelete(Object name) {
return '確定刪除[$name]'; return '確定刪除 [$name]';
} }
@override @override

View File

@@ -30,8 +30,7 @@ Especially thanks to <a href="https://github.com/TerminalStudio/dartssh2">dartss
- [x] `Docker & Pkg` Manager - [x] `Docker & Pkg` Manager
- [x] Status charts - [x] Status charts
- [x] `Ping` and etc. - [x] `Ping` and etc.
- [x] i18n (English, 简体中文, Deutsch) - [x] Localization ( English, 简体中文, Deutsch, 繁體中文. [How to contribute?](#l10n-guide))
- Welcome contribution :), [How to contribute?](#l10n-guide)
- [x] Desktop support - [x] Desktop support

View File

@@ -30,8 +30,7 @@
- [x] `Docker & 包` 管理器 - [x] `Docker & 包` 管理器
- [x] 状态图表 - [x] 状态图表
- [x] `Ping` 和 更多 - [x] `Ping` 和 更多
- [x] 本地化 ( English, 简体中文, Deutsch ) - [x] 本地化 ( English, 简体中文, Deutsch, 繁體中文。 [如何贡献?](#l10n-guide))
- 欢迎贡献 :)[怎么贡献?](#l10n)
- [x] 桌面端支持 - [x] 桌面端支持

View File

@@ -51,7 +51,7 @@ enum DockerMenuType {
static List<DockerMenuType> items(bool running) { static List<DockerMenuType> items(bool running) {
if (running) { if (running) {
return [stop, restart, rm, logs]; return [stop, restart, rm, logs, terminal];
} else { } else {
return [start, rm, logs]; return [start, rm, logs];
} }

View File

@@ -163,14 +163,6 @@ class DockerProvider extends BusyProvider {
return null; return null;
} }
Future<String> logs(String id) async {
setBusyState();
final cmd = _wrap('docker logs $id');
final result = await client!.run(cmd);
setBusyState(false);
return result.string;
}
// judge whether to use DOCKER_HOST / sudo // judge whether to use DOCKER_HOST / sudo
String _wrap(String cmd) { String _wrap(String cmd) {
final dockerHost = dockerStore.getDockerHost(hostId!); final dockerHost = dockerStore.getDockerHost(hostId!);

View File

@@ -152,7 +152,7 @@
"start": "开始", "start": "开始",
"stop": "停止", "stop": "停止",
"success": "成功", "success": "成功",
"sureDelete": "确定删除[{name}]", "sureDelete": "确定删除 [{name}]",
"sureDirEmpty": "请确保文件夹为空", "sureDirEmpty": "请确保文件夹为空",
"sureNoPwd": "确认使用无密码?", "sureNoPwd": "确认使用无密码?",
"sureToDeleteServer": "你确定要删除服务器 [{server}] 吗?", "sureToDeleteServer": "你确定要删除服务器 [{server}] 吗?",

View File

@@ -152,7 +152,7 @@
"start": "開始", "start": "開始",
"stop": "停止", "stop": "停止",
"success": "成功", "success": "成功",
"sureDelete": "確定刪除[{name}]", "sureDelete": "確定刪除 [{name}]",
"sureDirEmpty": "請確保文件夾為空", "sureDirEmpty": "請確保文件夾為空",
"sureNoPwd": "確認使用無密碼?", "sureNoPwd": "確認使用無密碼?",
"sureToDeleteServer": "你確定要刪除服務器 [{server}] 嗎?", "sureToDeleteServer": "你確定要刪除服務器 [{server}] 嗎?",

View File

@@ -3,7 +3,6 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/navigator.dart'; import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/core/route.dart'; import 'package:toolbox/core/route.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/view/page/ssh.dart'; import 'package:toolbox/view/page/ssh.dart';
import 'package:toolbox/view/widget/input_field.dart'; import 'package:toolbox/view/widget/input_field.dart';
@@ -154,7 +153,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
context.pop(); context.pop();
final result = await _docker.run(cmd); final result = await _docker.run(cmd);
if (result != null) { if (result != null) {
showSnackBar(context, Text(getErrMsg(result) ?? _s.unknownError)); showSnackBar(context, Text(result.message ?? _s.unknownError));
} }
}, },
child: Text(_s.run), child: Text(_s.run),
@@ -176,13 +175,6 @@ class _DockerManagePageState extends State<DockerManagePage> {
return 'docker run -itd --name $name $suffix'; return 'docker run -itd --name $name $suffix';
} }
String? getErrMsg(DockerErr err) {
switch (err.type) {
default:
return err.message;
}
}
void onSubmitted() { void onSubmitted() {
if (_textController.text == '') { if (_textController.text == '') {
showRoundDialog( showRoundDialog(
@@ -308,7 +300,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
if (result != null) { if (result != null) {
showSnackBar( showSnackBar(
context, context,
Text(getErrMsg(result) ?? _s.unknownError), Text(result.message ?? _s.unknownError),
); );
} }
}, },
@@ -354,24 +346,25 @@ class _DockerManagePageState extends State<DockerManagePage> {
} }
Widget _buildEditHost() { Widget _buildEditHost() {
if (_docker.items!.isNotEmpty || _docker.images!.isNotEmpty) { final children = <Widget>[];
return placeholder; if (_docker.items!.isEmpty && _docker.images!.isEmpty) {
children.add(Padding(
padding: const EdgeInsets.fromLTRB(17, 17, 17, 0),
child: Text(
_s.dockerEmptyRunningItems,
textAlign: TextAlign.center,
),
));
} }
return Padding( children.add(
padding: const EdgeInsets.fromLTRB(17, 17, 17, 0), TextButton(
child: Column( onPressed: _showEditHostDialog,
children: [ child: Text(_s.dockerEditHost),
Text(
_s.dockerEmptyRunningItems,
textAlign: TextAlign.center,
),
TextButton(
onPressed: () => _showEditHostDialog(),
child: Text(_s.dockerEditHost),
)
],
), ),
); );
return Column(
children: children,
);
} }
Future<void> _showEditHostDialog() async { Future<void> _showEditHostDialog() async {
@@ -483,6 +476,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
case DockerMenuType.rm: case DockerMenuType.rm:
showRoundDialog( showRoundDialog(
context: context, context: context,
title: Text(_s.attention),
child: Text(_s.sureDelete(dItem.name)), child: Text(_s.sureDelete(dItem.name)),
actions: [ actions: [
TextButton( TextButton(
@@ -505,19 +499,13 @@ class _DockerManagePageState extends State<DockerManagePage> {
_docker.restart(dItem.containerId); _docker.restart(dItem.containerId);
break; break;
case DockerMenuType.logs: case DockerMenuType.logs:
final logs = await _docker.logs(dItem.containerId); AppRoute(
showRoundDialog( SSHPage(
context: context, spi: widget.spi,
child: SingleChildScrollView( initCmd: 'docker logs ${dItem.containerId}',
child: Text(logs),
), ),
actions: [ 'Docker logs',
TextButton( ).go(context);
onPressed: () => copy2Clipboard(logs),
child: Text(_s.copy),
)
],
);
break; break;
case DockerMenuType.terminal: case DockerMenuType.terminal:
AppRoute( AppRoute(

View File

@@ -288,6 +288,9 @@ class _SSHPageState extends State<SSHPage> {
), ),
); );
} }
if (children.isEmpty) {
return;
}
_menuController.show( _menuController.show(
context: context, context: context,
contextMenuBuilder: (context) { contextMenuBuilder: (context) {
@@ -343,7 +346,7 @@ class _SSHPageState extends State<SSHPage> {
_listen(session.stderr); _listen(session.stderr);
if (widget.initCmd != null) { if (widget.initCmd != null) {
_terminal.write(widget.initCmd!); _terminal.textInput(widget.initCmd!);
_terminal.keyInput(TerminalKey.enter); _terminal.keyInput(TerminalKey.enter);
} }