dissolve app/ into repo root (D-056)
Single Flutter package at the repo root. All code, tests, assets, and platform directories moved from app/ to root. Package renamed from clide_app to clide — all imports rewritten. Merged pubspec combines core (ffi) and app (flutter, yaml, xterm) dependencies. Makefile simplified: no APP_PRESENT conditionals, no cd, no daemon lifecycle. 317 tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:clide/kernel/src/events/bus.dart';
|
||||
import 'package:clide/kernel/src/events/types.dart';
|
||||
import 'package:clide/kernel/src/log.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class OsLifecycleEvent extends ClideEvent {
|
||||
const OsLifecycleEvent(this._kind);
|
||||
final String _kind;
|
||||
@override
|
||||
String get subsystem => 'os';
|
||||
@override
|
||||
String get kind => _kind;
|
||||
}
|
||||
|
||||
class OsBridge {
|
||||
OsBridge({required Logger log, required EventBus events})
|
||||
: _log = log,
|
||||
_events = events;
|
||||
|
||||
final Logger _log;
|
||||
final EventBus _events;
|
||||
|
||||
Future<bool> openURL(String url) async {
|
||||
final cmd = _openCommand();
|
||||
if (cmd == null) {
|
||||
_log.warn('os', 'openURL unsupported on ${Platform.operatingSystem}');
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
final r = await Process.run(cmd[0], [...cmd.skip(1), url]);
|
||||
return r.exitCode == 0;
|
||||
} catch (e) {
|
||||
_log.warn('os', 'openURL failed', error: e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> reveal(String path) async {
|
||||
final cmd = _revealCommand(path);
|
||||
if (cmd == null) return false;
|
||||
try {
|
||||
final r = await Process.run(cmd[0], cmd.skip(1).toList());
|
||||
return r.exitCode == 0;
|
||||
} catch (e) {
|
||||
_log.warn('os', 'reveal failed', error: e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// Fire an OS lifecycle event (called by the platform wiring).
|
||||
@visibleForTesting
|
||||
void fire(String kind) {
|
||||
_events.emit(OsLifecycleEvent(kind));
|
||||
}
|
||||
|
||||
static List<String>? _openCommand() {
|
||||
if (Platform.isLinux) return ['xdg-open'];
|
||||
if (Platform.isMacOS) return ['open'];
|
||||
if (Platform.isWindows) return ['cmd', '/c', 'start', ''];
|
||||
return null;
|
||||
}
|
||||
|
||||
static List<String>? _revealCommand(String path) {
|
||||
if (Platform.isLinux) return ['xdg-open', File(path).parent.path];
|
||||
if (Platform.isMacOS) return ['open', '-R', path];
|
||||
if (Platform.isWindows) return ['explorer', '/select,', path];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user