readIdeLockfile method
Read and parse an IDE lockfile.
Implementation
Future<IdeLockfileInfo?> readIdeLockfile(String path) async {
try {
final content = await File(path).readAsString();
List<String> workspaceFolders = [];
int? pid;
String? ideName;
bool useWebSocket = false;
bool runningInWindows = false;
String? authToken;
try {
final parsed = jsonDecode(content) as Map<String, dynamic>;
final jsonContent = LockfileJsonContent.fromJson(parsed);
workspaceFolders = jsonContent.workspaceFolders ?? [];
pid = jsonContent.pid;
ideName = jsonContent.ideName;
useWebSocket = jsonContent.transport == 'ws';
runningInWindows = jsonContent.runningInWindows ?? false;
authToken = jsonContent.authToken;
} catch (_) {
// Older format - just a list of paths
workspaceFolders = content.split('\n').map((l) => l.trim()).toList();
}
// Extract port from filename
final filename = path.split(Platform.pathSeparator).last;
final portStr = filename.replaceAll('.lock', '');
final port = int.tryParse(portStr);
if (port == null) return null;
return IdeLockfileInfo(
workspaceFolders: workspaceFolders,
port: port,
pid: pid,
ideName: ideName,
useWebSocket: useWebSocket,
runningInWindows: runningInWindows,
authToken: authToken,
);
} catch (e) {
_logError(e);
return null;
}
}