Only fire _onVariantAnalysisChange from one place

This commit is contained in:
Robert
2022-10-31 17:19:38 +00:00
parent be2ca6c368
commit 5174afed00
2 changed files with 19 additions and 20 deletions

View File

@@ -47,6 +47,13 @@ export enum VariantAnalysisStatus {
Canceled = 'canceled',
}
export function isFinalVariantAnalysisStatus(status: VariantAnalysisStatus): boolean {
return [
// All states that indicates the analysis has completed and cannot change status anymore.
VariantAnalysisStatus.Succeeded, VariantAnalysisStatus.Failed, VariantAnalysisStatus.Canceled,
].includes(status);
}
export enum VariantAnalysisFailureReason {
NoReposQueried = 'noReposQueried',
InternalError = 'internalError',

View File

@@ -2,13 +2,13 @@ import { ExtensionContext, CancellationToken, commands, EventEmitter } from 'vsc
import { Credentials } from '../authentication';
import * as ghApiClient from './gh-api/gh-api-client';
import { VariantAnalysis, VariantAnalysisStatus } from './shared/variant-analysis';
import { isFinalVariantAnalysisStatus, VariantAnalysis } from './shared/variant-analysis';
import {
VariantAnalysis as VariantAnalysisApiResponse,
VariantAnalysisScannedRepository
} from './gh-api/variant-analysis';
import { VariantAnalysisMonitorResult } from './shared/variant-analysis-monitor-result';
import { processFailureReason, processUpdatedVariantAnalysis } from './variant-analysis-processor';
import { processUpdatedVariantAnalysis } from './variant-analysis-processor';
import { DisposableObject } from '../pure/disposable-object';
export class VariantAnalysisMonitor extends DisposableObject {
@@ -36,12 +36,9 @@ export class VariantAnalysisMonitor extends DisposableObject {
throw Error('Error authenticating with GitHub');
}
let variantAnalysisSummary: VariantAnalysisApiResponse;
let attemptCount = 0;
const scannedReposDownloaded: number[] = [];
this._onVariantAnalysisChange.fire(variantAnalysis);
while (attemptCount <= VariantAnalysisMonitor.maxAttemptCount) {
await this.sleep(VariantAnalysisMonitor.sleepTime);
@@ -49,33 +46,28 @@ export class VariantAnalysisMonitor extends DisposableObject {
return { status: 'Cancelled', error: 'Variant Analysis was canceled.' };
}
variantAnalysisSummary = await ghApiClient.getVariantAnalysis(
const variantAnalysisSummary = await ghApiClient.getVariantAnalysis(
credentials,
variantAnalysis.controllerRepo.id,
variantAnalysis.id
);
if (variantAnalysisSummary.failure_reason) {
variantAnalysis.status = VariantAnalysisStatus.Failed;
variantAnalysis.failureReason = processFailureReason(variantAnalysisSummary.failure_reason);
this._onVariantAnalysisChange.fire(variantAnalysis);
return {
status: 'Failed',
error: `Variant Analysis has failed: ${variantAnalysisSummary.failure_reason}`,
variantAnalysis: variantAnalysis
};
}
variantAnalysis = processUpdatedVariantAnalysis(variantAnalysis, variantAnalysisSummary);
this._onVariantAnalysisChange.fire(variantAnalysis);
if (variantAnalysis.failureReason) {
return {
status: 'Failed',
error: `Variant Analysis has failed: ${variantAnalysis.failureReason}`,
variantAnalysis: variantAnalysis
};
}
const downloadedRepos = this.downloadVariantAnalysisResults(variantAnalysisSummary, scannedReposDownloaded);
scannedReposDownloaded.push(...downloadedRepos);
if (variantAnalysisSummary.status === 'completed') {
if (isFinalVariantAnalysisStatus(variantAnalysis.status)) {
break;
}