#50 new: docker shell
This commit is contained in:
@@ -46,7 +46,8 @@ enum DockerMenuType {
|
||||
stop,
|
||||
restart,
|
||||
rm,
|
||||
logs;
|
||||
logs,
|
||||
terminal;
|
||||
|
||||
static List<DockerMenuType> items(bool running) {
|
||||
if (running) {
|
||||
@@ -68,6 +69,8 @@ enum DockerMenuType {
|
||||
return Icons.delete;
|
||||
case DockerMenuType.logs:
|
||||
return Icons.logo_dev;
|
||||
case DockerMenuType.terminal:
|
||||
return Icons.terminal;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,6 +86,8 @@ enum DockerMenuType {
|
||||
return s.delete;
|
||||
case DockerMenuType.logs:
|
||||
return s.log;
|
||||
case DockerMenuType.terminal:
|
||||
return s.terminal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
class BuildData {
|
||||
static const String name = "ServerBox";
|
||||
static const int build = 320;
|
||||
static const int build = 321;
|
||||
static const String engine = "3.10.2";
|
||||
static const String buildAt = "2023-05-26 20:00:35.224841";
|
||||
static const int modifications = 5;
|
||||
static const String buildAt = "2023-05-26 20:09:33.821996";
|
||||
static const int modifications = 2;
|
||||
}
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
"sureDirEmpty": "Stelle sicher, dass der Ordner leer ist.",
|
||||
"sureNoPwd": "Bist du sicher, dass du kein Passwort verwenden willst?",
|
||||
"sureToDeleteServer": "Bist du sicher, dass du [{server}] löschen willst?",
|
||||
"terminal": "Terminal",
|
||||
"theme": "Themen",
|
||||
"themeMode": "Thememodus",
|
||||
"times": "x",
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
"sureDirEmpty": "Make sure dir is empty.",
|
||||
"sureNoPwd": "Are you sure to use no password?",
|
||||
"sureToDeleteServer": "Are you sure to delete server [{server}]?",
|
||||
"terminal": "Terminal",
|
||||
"theme": "Theme",
|
||||
"themeMode": "Theme mode",
|
||||
"times": "Times",
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
"sureDirEmpty": "请确保文件夹为空",
|
||||
"sureNoPwd": "确认使用无密码?",
|
||||
"sureToDeleteServer": "你确定要删除服务器 [{server}] 吗?",
|
||||
"terminal": "终端",
|
||||
"theme": "主题",
|
||||
"themeMode": "主题模式",
|
||||
"times": "次",
|
||||
|
||||
@@ -2,7 +2,9 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:toolbox/core/extension/navigator.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/widget/input_field.dart';
|
||||
|
||||
import '../../core/utils/ui.dart';
|
||||
@@ -499,6 +501,9 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
case DockerMenuType.stop:
|
||||
_docker.stop(dItem.containerId);
|
||||
break;
|
||||
case DockerMenuType.restart:
|
||||
_docker.restart(dItem.containerId);
|
||||
break;
|
||||
case DockerMenuType.logs:
|
||||
final logs = await _docker.logs(dItem.containerId);
|
||||
showRoundDialog(
|
||||
@@ -514,9 +519,14 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
],
|
||||
);
|
||||
break;
|
||||
case DockerMenuType.restart:
|
||||
_docker.restart(dItem.containerId);
|
||||
break;
|
||||
case DockerMenuType.terminal:
|
||||
AppRoute(
|
||||
SSHPage(
|
||||
spi: widget.spi,
|
||||
initCmd: 'docker exec -it ${dItem.containerId} /bin/sh',
|
||||
),
|
||||
'Docker terminal',
|
||||
).go(context);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -25,7 +25,8 @@ import '../../locator.dart';
|
||||
|
||||
class SSHPage extends StatefulWidget {
|
||||
final ServerPrivateInfo spi;
|
||||
const SSHPage({Key? key, required this.spi}) : super(key: key);
|
||||
final String? initCmd;
|
||||
const SSHPage({Key? key, required this.spi, this.initCmd}) : super(key: key);
|
||||
|
||||
@override
|
||||
_SSHPageState createState() => _SSHPageState();
|
||||
@@ -341,6 +342,11 @@ class _SSHPageState extends State<SSHPage> {
|
||||
_listen(session.stdout);
|
||||
_listen(session.stderr);
|
||||
|
||||
if (widget.initCmd != null) {
|
||||
_terminal.write(widget.initCmd!);
|
||||
_terminal.keyInput(TerminalKey.enter);
|
||||
}
|
||||
|
||||
await session.done;
|
||||
if (mounted) {
|
||||
context.pop();
|
||||
|
||||
Reference in New Issue
Block a user