This commit is contained in:
lollipopkit
2023-10-21 18:38:41 +08:00
parent 476e0d5542
commit bcf7e2125c
2 changed files with 33 additions and 17 deletions

View File

@@ -279,35 +279,38 @@ class ServerProvider extends ChangeNotifier {
_setServerState(s, ServerState.connected);
// Write script to server
// by ssh
try {
final writeResult = await s.client?.run(installShellCmd).string;
if (writeResult == null || writeResult.isNotEmpty) {
throw Exception('$writeResult');
}
} catch (e) {
var sftpFailed = false;
try {
Loggers.app.warning('Using SFTP to write script to ${spi.name}');
// by sftp
final localPath = joinPath(await Paths.doc, 'install.sh');
final file = File(localPath);
try {
Loggers.app.warning('Using SFTP to write script to ${spi.name}');
file.writeAsString(ShellFunc.allScript);
final sftp = Pros.sftp;
final completer = Completer();
sftp.add(
final reqId = sftp.add(
SftpReq(spi, installShellPath, localPath, SftpReqType.upload),
completer: completer,
);
await completer.future;
await file.delete();
} catch (_) {
sftpFailed = true;
final err = sftp.get(reqId)?.error;
if (err != null) {
throw err;
}
if (sftpFailed) {
} catch (e) {
_limiter.inc(sid);
s.status.failedInfo = e.toString();
_setServerState(s, ServerState.failed);
Loggers.app.warning('Write script to ${spi.name} failed', e);
return;
} finally {
await file.delete();
}
}
}
@@ -319,14 +322,25 @@ class ServerProvider extends ChangeNotifier {
_setServerState(s, ServerState.loading);
}
final raw = await s.client?.run(ShellFunc.status.exec).string;
final segments = raw?.split(seperator).map((e) => e.trim()).toList();
List<String>? segments;
String? raw;
try {
raw = await s.client?.run(ShellFunc.status.exec).string;
segments = raw?.split(seperator).map((e) => e.trim()).toList();
if (raw == null || raw.isEmpty || segments == null || segments.isEmpty) {
_limiter.inc(sid);
s.status.failedInfo = 'Seperate segments failed, raw:\n$raw';
_setServerState(s, ServerState.failed);
return;
}
} catch (e) {
_limiter.inc(sid);
s.status.failedInfo = e.toString();
_setServerState(s, ServerState.failed);
Loggers.app.warning('Get status from ${spi.name} failed', e);
return;
}
final systemType = SystemType.parse(segments[0]);
if (!systemType.isSegmentsLenMatch(segments.length)) {

View File

@@ -12,12 +12,14 @@ class SftpProvider extends ChangeNotifier {
return _status.singleWhere((element) => element.id == id);
}
void add(SftpReq req, {Completer? completer}) {
_status.add(SftpReqStatus(
int add(SftpReq req, {Completer? completer}) {
final status = SftpReqStatus(
notifyListeners: notifyListeners,
completer: completer,
req: req,
));
);
_status.add(status);
return status.id;
}
@override