pkg mgr support zypper pacman opkg

This commit is contained in:
lollipopkit
2023-01-27 19:19:11 +08:00
parent 092c3f522a
commit 7c84957230
5 changed files with 82 additions and 37 deletions

View File

@@ -1,30 +1,37 @@
import 'package:toolbox/data/model/server/dist.dart';
import 'package:toolbox/data/model/pkg/manager.dart';
class UpgradePkgInfo {
final String _raw;
final Dist _dist;
final PkgManager? _mgr;
late String package;
late String nowVersion;
late String newVersion;
late String arch;
UpgradePkgInfo(this._raw, this._dist) {
switch (_dist) {
case Dist.debian:
case Dist.ubuntu:
_parseApt();
UpgradePkgInfo(String raw, this._mgr) {
switch (_mgr) {
case PkgManager.apt:
_parseApt(raw);
break;
case Dist.centos:
_parseYum();
case PkgManager.yum:
_parseYum(raw);
break;
case PkgManager.zypper:
_parseZypper(raw);
break;
case PkgManager.pacman:
_parsePacman(raw);
break;
case PkgManager.opkg:
_parseOpkg(raw);
break;
default:
throw Exception('Unsupported dist: $_dist');
throw Exception('Unsupported pkg type: $_mgr');
}
}
void _parseApt() {
final split1 = _raw.split("/");
void _parseApt(String raw) {
final split1 = raw.split("/");
package = split1[0];
final split2 = split1[1].split(" ");
newVersion = split2[1];
@@ -32,8 +39,8 @@ class UpgradePkgInfo {
nowVersion = split2[5].replaceFirst(']', '');
}
void _parseYum() {
final result = RegExp(r'\S+').allMatches(_raw);
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];
@@ -41,4 +48,28 @@ class UpgradePkgInfo {
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 = '';
}
}