mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
Support yum.
This commit is contained in:
@@ -52,10 +52,10 @@ Support, but not tested|Windows/Linux
|
|||||||
- [x] Theme switch
|
- [x] Theme switch
|
||||||
- [x] Migrate from `ssh2` to `dartssh2`
|
- [x] Migrate from `ssh2` to `dartssh2`
|
||||||
- [x] Desktop support
|
- [x] Desktop support
|
||||||
- [ ] Apt manager
|
- [x] Apt manager
|
||||||
- [ ] SFTP
|
- [x] SFTP
|
||||||
- [ ] Snippet market
|
- [ ] Snippet market
|
||||||
- [ ] Docker manager
|
- [x] Docker manager
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
Please use `make.dart` to build.
|
Please use `make.dart` to build.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class ServerTabMenuItems {
|
|||||||
|
|
||||||
static const sftp = MenuItem(text: 'SFTP', icon: Icons.insert_drive_file);
|
static const sftp = MenuItem(text: 'SFTP', icon: Icons.insert_drive_file);
|
||||||
static const snippet = MenuItem(text: 'Snippet', icon: Icons.label);
|
static const snippet = MenuItem(text: 'Snippet', icon: Icons.label);
|
||||||
static const apt = MenuItem(text: 'Apt', icon: Icons.system_security_update);
|
static const apt = MenuItem(text: 'Apt/Yum', icon: Icons.system_security_update);
|
||||||
static const docker = MenuItem(text: 'Docker', icon: Icons.view_agenda);
|
static const docker = MenuItem(text: 'Docker', icon: Icons.view_agenda);
|
||||||
static const edit = MenuItem(text: 'Edit', icon: Icons.edit);
|
static const edit = MenuItem(text: 'Edit', icon: Icons.edit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:toolbox/data/model/distribution.dart';
|
import 'package:toolbox/data/model/distribution.dart';
|
||||||
|
|
||||||
class AptUpgradePkgInfo {
|
class UpgradePkgInfo {
|
||||||
final String _raw;
|
final String _raw;
|
||||||
final Distribution _dist;
|
final Distribution _dist;
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ class AptUpgradePkgInfo {
|
|||||||
late String newVersion;
|
late String newVersion;
|
||||||
late String arch;
|
late String arch;
|
||||||
|
|
||||||
AptUpgradePkgInfo(this._raw, this._dist) {
|
UpgradePkgInfo(this._raw, this._dist) {
|
||||||
switch (_dist) {
|
switch (_dist) {
|
||||||
case Distribution.debian:
|
case Distribution.debian:
|
||||||
case Distribution.unknown:
|
case Distribution.unknown:
|
||||||
@@ -29,5 +29,13 @@ class AptUpgradePkgInfo {
|
|||||||
nowVersion = split2[5].replaceFirst(']', '');
|
nowVersion = split2[5].replaceFirst(']', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
void _parseYum() {}
|
void _parseYum() {
|
||||||
|
final result = RegExp(r'\S+').allMatches(_raw);
|
||||||
|
final pkgAndArch = result.elementAt(0).group(0) ?? '.';
|
||||||
|
final split1 = pkgAndArch.split('.');
|
||||||
|
package = split1[0];
|
||||||
|
arch = split1[1];
|
||||||
|
newVersion = result.elementAt(1).group(0) ?? 'Unknown';
|
||||||
|
nowVersion = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class AptProvider extends BusyProvider {
|
|||||||
SSHClient? client;
|
SSHClient? client;
|
||||||
Distribution? dist;
|
Distribution? dist;
|
||||||
String? whoami;
|
String? whoami;
|
||||||
List<AptUpgradePkgInfo>? upgradeable;
|
List<UpgradePkgInfo>? upgradeable;
|
||||||
String? error;
|
String? error;
|
||||||
String? updateLog;
|
String? updateLog;
|
||||||
|
|
||||||
@@ -36,12 +36,10 @@ class AptProvider extends BusyProvider {
|
|||||||
error = 'No client';
|
error = 'No client';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await update();
|
|
||||||
final result = await client!.run('apt list --upgradeable').string;
|
final result = await _update();
|
||||||
try {
|
try {
|
||||||
final list = result.split('\n').sublist(4);
|
getUpgradeableList(result);
|
||||||
list.removeWhere((element) => element.isEmpty);
|
|
||||||
upgradeable = list.map((e) => AptUpgradePkgInfo(e, dist!)).toList();
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error = e.toString();
|
error = e.toString();
|
||||||
} finally {
|
} finally {
|
||||||
@@ -49,12 +47,34 @@ class AptProvider extends BusyProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> update() async {
|
void getUpgradeableList(String raw) {
|
||||||
if (client == null) {
|
switch (dist) {
|
||||||
error = 'No client';
|
case Distribution.rehl:
|
||||||
return;
|
var list = raw.split('\n').sublist(2);
|
||||||
|
list.removeWhere((element) => element.isEmpty);
|
||||||
|
final endLine = list.lastIndexWhere(
|
||||||
|
(element) => element.contains('Obsoleting Packages'));
|
||||||
|
list = list.sublist(0, endLine);
|
||||||
|
upgradeable = list.map((e) => UpgradePkgInfo(e, dist!)).toList();
|
||||||
|
break;
|
||||||
|
case Distribution.debian:
|
||||||
|
case Distribution.unknown:
|
||||||
|
default:
|
||||||
|
final list = raw.split('\n').sublist(4);
|
||||||
|
list.removeWhere((element) => element.isEmpty);
|
||||||
|
upgradeable = list.map((e) => UpgradePkgInfo(e, dist!)).toList();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> _update() async {
|
||||||
|
switch (dist) {
|
||||||
|
case Distribution.rehl:
|
||||||
|
return await client!.run('yum check-update').string;
|
||||||
|
case Distribution.debian:
|
||||||
|
default:
|
||||||
await client!.run('apt update');
|
await client!.run('apt update');
|
||||||
|
return await client!.run('apt list --upgradeable').string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> upgrade() async {
|
Future<void> upgrade() async {
|
||||||
@@ -64,11 +84,21 @@ class AptProvider extends BusyProvider {
|
|||||||
}
|
}
|
||||||
updateLog = null;
|
updateLog = null;
|
||||||
|
|
||||||
final session = await client!.execute('apt upgrade -y');
|
final session = await client!.execute(upgradeCmd);
|
||||||
session.stdout.listen((data) {
|
session.stdout.listen((data) {
|
||||||
updateLog = (updateLog ?? '') + data.string;
|
updateLog = (updateLog ?? '') + data.string;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
refreshInstalled();
|
refreshInstalled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get upgradeCmd {
|
||||||
|
switch (dist) {
|
||||||
|
case Distribution.rehl:
|
||||||
|
return 'yum upgrade -y';
|
||||||
|
case Distribution.debian:
|
||||||
|
default:
|
||||||
|
return 'apt upgrade -y';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
class BuildData {
|
class BuildData {
|
||||||
static const String name = "ServerBox";
|
static const String name = "ServerBox";
|
||||||
static const int build = 109;
|
static const int build = 110;
|
||||||
static const String engine =
|
static const String engine =
|
||||||
"Flutter 2.10.4 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision c860cba910 (12 days ago) • 2022-03-25 00:23:12 -0500\nEngine • revision 57d3bac3dd\nTools • Dart 2.16.2 • DevTools 2.9.2\n";
|
"Flutter 2.10.4 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision c860cba910 (12 days ago) • 2022-03-25 00:23:12 -0500\nEngine • revision 57d3bac3dd\nTools • Dart 2.16.2 • DevTools 2.9.2\n";
|
||||||
static const String buildAt = "2022-04-06 13:00:26.954649";
|
static const String buildAt = "2022-04-06 13:48:27.717376";
|
||||||
static const int modifications = 7;
|
static const int modifications = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class _AptManagePageState extends State<AptManagePage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildUpdateItem(AptUpgradePkgInfo info, AptProvider apt) {
|
Widget _buildUpdateItem(UpgradePkgInfo info, AptProvider apt) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
title: Text(info.package),
|
title: Text(info.package),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
|
|||||||
@@ -194,10 +194,9 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
|
_buildMemExplain((ss.memory.used * mb).convertBytes, pColor),
|
||||||
_buildMemExplain(
|
_buildMemExplain(
|
||||||
(ss.memory.used * mb).convertBytes, pColor),
|
(ss.memory.cache * mb).convertBytes, pColor.withAlpha(77)),
|
||||||
_buildMemExplain((ss.memory.cache * mb).convertBytes,
|
|
||||||
pColor.withAlpha(77)),
|
|
||||||
_buildMemExplain(
|
_buildMemExplain(
|
||||||
((ss.memory.total - ss.memory.used) * mb).convertBytes,
|
((ss.memory.total - ss.memory.used) * mb).convertBytes,
|
||||||
progressColor.resolve(context))
|
progressColor.resolve(context))
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ EXTERNAL SOURCES:
|
|||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
|
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
|
||||||
path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f
|
path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f
|
||||||
url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4
|
url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3
|
||||||
|
|
||||||
PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c
|
PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user