readIdeLockfile method

Future<IdeLockfileInfo?> readIdeLockfile(
  1. String path
)

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;
  }
}