Files
flutter_server_box/lib/data/model/pkg/upgrade_info.dart
2024-06-11 22:06:29 +08:00

90 lines
2.2 KiB
Dart

import 'package:server_box/data/model/pkg/manager.dart';
class UpgradePkgInfo {
final PkgManager? _mgr;
late String package;
late String nowVersion;
late String newVersion;
late String arch;
UpgradePkgInfo(String raw, this._mgr) {
switch (_mgr) {
case PkgManager.apt:
_parseApt(raw);
break;
case PkgManager.yum:
_parseYum(raw);
break;
case PkgManager.zypper:
_parseZypper(raw);
break;
case PkgManager.pacman:
_parsePacman(raw);
break;
case PkgManager.opkg:
_parseOpkg(raw);
break;
case PkgManager.apk:
_parseApk(raw);
break;
default:
throw Exception('Unsupported pkg type: $_mgr');
}
}
void _parseApt(String raw) {
final split1 = raw.split("/");
package = split1[0];
final split2 = split1[1].split(" ");
newVersion = split2[1];
arch = split2[2];
nowVersion = split2[5].replaceFirst(']', '');
}
void _parseYum(String raw) {
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 = '';
}
void _parseZypper(String raw) {
final cols = raw.split("|");
package = cols[2].trim();
nowVersion = cols[3].trim();
newVersion = cols[4].trim();
arch = cols[5].trim();
}
void _parsePacman(String raw) {
final parts = raw.split(' ');
package = parts[0];
nowVersion = parts[1];
newVersion = parts[3];
arch = '';
}
void _parseOpkg(String raw) {
final parts = raw.split(' - ');
package = parts[0];
nowVersion = parts[1];
newVersion = parts[2];
arch = '';
}
// libcrypto3-3.0.8-r4 x86_64 {openssl} (Apache-2.0) [upgradable from: libcrypto3-3.0.8-r3]
void _parseApk(String raw) {
final parts = raw.split(' ');
final len = parts.length;
newVersion = parts[len - 1];
nowVersion = parts[0];
newVersion = newVersion.substring(0, newVersion.length - 1);
package = nowVersion;
arch = parts[1];
}
}