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

View File

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