async provideTextDocumentContent()

in src/desktop/ci/job_log_content_provider.ts [226:270]


  async provideTextDocumentContent(uri: vscode.Uri): Promise<string | undefined> {
    const { repositoryRoot, job: id } = fromJobLogUri(uri);

    if (!jobLogCache.get(id)) {
      const projectInRepository = getProjectRepository().getProjectOrFail(repositoryRoot);
      const gitlabService = getGitLabService(projectInRepository);

      const response = await gitlabService.getJobTrace(projectInRepository.project, id);
      assert(response);
      const { rawTrace, eTag } = response;

      const branchState = await currentBranchRefresher.getOrRetrieveState();
      let isRunning: boolean;

      if (branchState.type !== 'invalid') {
        const jobItem = branchState.jobs.find(j => j.id === id);
        isRunning = jobItem?.status === 'running';
      } else {
        isRunning = false;
      }
      if (isRunning) {
        jobLogCache.setForRunning(repositoryRoot, id, rawTrace, eTag);
      } else {
        jobLogCache.set(id, rawTrace);
      }
    } else {
      jobLogCache.touch(id);
    }

    const cacheItem = jobLogCache.get(id);
    assert(cacheItem);

    this.#suppressScrollToggle = true;

    if (!cacheItem.filtered) {
      const { rawTrace, eTag } = cacheItem;
      const { sections, decorations, filtered } =
        await this.#decorationProvider.provideDecorationsForPrettifiedAnsi(rawTrace, eTag !== null);

      jobLogCache.addDecorations(id, sections, decorations, filtered);
      return filtered;
    }

    return cacheItem.filtered;
  }