mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
fix: container parsing (#948)
This commit is contained in:
@@ -37,12 +37,12 @@ final class PodmanImg implements ContainerImg {
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
factory PodmanImg.fromJson(Map<String, dynamic> json) => PodmanImg(
|
||||
repository: json['repository'],
|
||||
tag: json['tag'],
|
||||
id: json['Id'],
|
||||
created: json['Created'],
|
||||
size: json['Size'],
|
||||
containers: json['Containers'],
|
||||
repository: _asString(json['repository']),
|
||||
tag: _asString(json['tag']),
|
||||
id: _asString(json['Id']),
|
||||
created: _asInt(json['Created']),
|
||||
size: _asInt(json['Size']),
|
||||
containers: _asInt(json['Containers']),
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
@@ -119,3 +119,16 @@ final class DockerImg implements ContainerImg {
|
||||
'Tag': tag,
|
||||
};
|
||||
}
|
||||
|
||||
String? _asString(dynamic val) {
|
||||
if (val == null) return null;
|
||||
if (val is String) return val;
|
||||
return val.toString();
|
||||
}
|
||||
|
||||
int? _asInt(dynamic val) {
|
||||
if (val == null) return null;
|
||||
if (val is int) return val;
|
||||
if (val is double) return val.toInt();
|
||||
return int.tryParse(val.toString());
|
||||
}
|
||||
|
||||
@@ -48,14 +48,7 @@ class ContainerNotifier extends _$ContainerNotifier {
|
||||
}
|
||||
|
||||
Future<void> setType(ContainerType type) async {
|
||||
state = state.copyWith(
|
||||
type: type,
|
||||
error: null,
|
||||
runLog: null,
|
||||
items: null,
|
||||
images: null,
|
||||
version: null,
|
||||
);
|
||||
state = state.copyWith(type: type, error: null, runLog: null, items: null, images: null, version: null);
|
||||
Stores.container.setType(type, hostId);
|
||||
sudoCompleter = Completer<bool>();
|
||||
await refresh();
|
||||
@@ -180,9 +173,13 @@ class ContainerNotifier extends _$ContainerNotifier {
|
||||
try {
|
||||
final statsLines = statsRaw.split('\n');
|
||||
statsLines.removeWhere((element) => element.isEmpty);
|
||||
for (var item in state.items!) {
|
||||
final items = state.items;
|
||||
if (items == null) return;
|
||||
|
||||
for (var item in items) {
|
||||
final id = item.id;
|
||||
if (id == null) continue;
|
||||
if (id.length < 5) continue;
|
||||
final statsLine = statsLines.firstWhereOrNull(
|
||||
/// Use 5 characters to match the container id, possibility of mismatch
|
||||
/// is very low.
|
||||
@@ -267,7 +264,6 @@ class ContainerNotifier extends _$ContainerNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const _jsonFmt = '--format "{{json .}}"';
|
||||
|
||||
enum ContainerCmdType {
|
||||
|
||||
Reference in New Issue
Block a user