mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
fix #189
This commit is contained in:
@@ -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;
|
||||
// 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}');
|
||||
final localPath = joinPath(await Paths.doc, 'install.sh');
|
||||
final file = File(localPath);
|
||||
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;
|
||||
}
|
||||
if (sftpFailed) {
|
||||
final err = sftp.get(reqId)?.error;
|
||||
if (err != null) {
|
||||
throw err;
|
||||
}
|
||||
} 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,12 +322,23 @@ 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();
|
||||
if (raw == null || raw.isEmpty || segments == null || segments.isEmpty) {
|
||||
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 = 'Seperate segments failed, raw:\n$raw';
|
||||
s.status.failedInfo = e.toString();
|
||||
_setServerState(s, ServerState.failed);
|
||||
Loggers.app.warning('Get status from ${spi.name} failed', e);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user