fix(ui): implement cached startup pre-flight check in SessionService and propagate errors in StaleBanner
This commit is contained in:
+8
-5
@@ -33,11 +33,14 @@ class StaleBanner extends StatelessWidget {
|
|||||||
size: 18,
|
size: 18,
|
||||||
),
|
),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Text(
|
Expanded(
|
||||||
'⚠ status snapshot stale (last ok: $lastOkText)',
|
child: Text(
|
||||||
style: const TextStyle(
|
'⚠ status snapshot stale (last ok: $lastOkText)${poll.error != null ? ' — Error: ${poll.error}' : ''}',
|
||||||
color: AppColors.warning,
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.w600,
|
color: AppColors.warning,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
BIN
Binary file not shown.
+20
@@ -27,7 +27,27 @@ class SessionService {
|
|||||||
this.timeout = const Duration(seconds: 5),
|
this.timeout = const Duration(seconds: 5),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
bool _preflightChecked = false;
|
||||||
|
|
||||||
|
Future<void> _checkPreflight() async {
|
||||||
|
if (_preflightChecked) return;
|
||||||
|
|
||||||
|
final bashResult = await runCommand(['bash', '--version'], timeout: timeout);
|
||||||
|
if (bashResult.rc != 0) {
|
||||||
|
throw StatusFetchException('preflight failed: bash is missing or not executable');
|
||||||
|
}
|
||||||
|
|
||||||
|
final tmuxResult = await runCommand(['tmux', '-V'], timeout: timeout);
|
||||||
|
if (tmuxResult.rc != 0) {
|
||||||
|
throw StatusFetchException('preflight failed: tmux is missing or not executable');
|
||||||
|
}
|
||||||
|
|
||||||
|
_preflightChecked = true;
|
||||||
|
}
|
||||||
|
|
||||||
Future<SessionsSnapshot> fetchSnapshot() async {
|
Future<SessionsSnapshot> fetchSnapshot() async {
|
||||||
|
await _checkPreflight();
|
||||||
|
|
||||||
final result = await runCommand(
|
final result = await runCommand(
|
||||||
['bash', statusScriptPath, '--json'],
|
['bash', statusScriptPath, '--json'],
|
||||||
timeout: timeout,
|
timeout: timeout,
|
||||||
|
|||||||
Reference in New Issue
Block a user