Stream workstationStartingProgress()

in ui/lib/modules/my_services/data/cloud_workstations_repository.dart [461:504]


Stream<bool> workstationStartingProgress(WorkstationStartingProgressRef ref,
    {required String projectId,
    required String clusterName,
    required String configName,
    required String instanceName,
    required String region}) async* {

  StreamSubscription? subscription;
  final streamController = StreamController<bool>();

  final bool inProgress = true;
  final bool started = false;
  final String startingStatus = "STARTING";

  ref.onDispose(() {
    streamController.close();
    subscription?.cancel();
  });

  final servicesRepository = ref.watch(cloudWorkstationsRepositoryProvider);

  subscription = Stream.periodic(const Duration(seconds: 5), (e) {
    return servicesRepository.getWorkstations(
        projectId, clusterName, configName, region);
  }).listen((futureWorkstationsList) async {

    List<Workstation> ws = await futureWorkstationsList;
    String state = ws.firstWhere((element) => element.displayName == instanceName).state;

    if (state.contains(startingStatus)) {
      if (!streamController.isClosed) {
        streamController.add(inProgress);
      }
    } else {
      if (!streamController.isClosed) {
        streamController.add(started);
      }
      streamController.close();
      subscription?.cancel();
    }
  });

  yield* streamController.stream;
}