Skip to content

Commit 49f3f56

Browse files
committed
Show progress information when sending search api request
1 parent 2b4e302 commit 49f3f56

File tree

2 files changed

+52
-16
lines changed

2 files changed

+52
-16
lines changed

extensions/ql-vscode/src/databases/ui/db-panel.ts

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
ProgressLocation,
23
QuickPickItem,
34
TreeView,
45
TreeViewExpansionEvent,
@@ -13,7 +14,10 @@ import {
1314
getOwnerFromGitHubUrl,
1415
isValidGitHubOwner,
1516
} from "../../common/github-url-identifier-helper";
16-
import { showAndLogErrorMessage } from "../../helpers";
17+
import {
18+
showAndLogErrorMessage,
19+
showAndLogInformationMessage,
20+
} from "../../helpers";
1721
import { DisposableObject } from "../../pure/disposable-object";
1822
import {
1923
DbItem,
@@ -343,6 +347,8 @@ export class DbPanel extends DisposableObject {
343347
throw new Error("Please select a valid list to add code search results.");
344348
}
345349

350+
const listName = treeViewItem.dbItem.listName;
351+
346352
const languageQuickPickItems: CodeSearchQuickPickItem[] = Object.values(
347353
QueryLanguage,
348354
).map((language) => ({
@@ -375,18 +381,33 @@ export class DbPanel extends DisposableObject {
375381
return;
376382
}
377383

378-
const repositories = await getCodeSearchRepositories(
379-
this.app.credentials,
380-
`${codeSearchQuery} language:${codeSearchLanguage.language}`,
381-
);
384+
void window.withProgress(
385+
{
386+
location: ProgressLocation.Notification,
387+
title: "Searching for repositories... This might take a while",
388+
cancellable: true,
389+
},
390+
async (progress, token) => {
391+
progress.report({ increment: 10 });
392+
393+
const repositories = await getCodeSearchRepositories(
394+
this.app.credentials,
395+
`${codeSearchQuery} language:${codeSearchLanguage.language}`,
396+
progress,
397+
token,
398+
);
382399

383-
const truncatedRepositories = await this.dbManager.addNewRemoteReposToList(
384-
repositories,
385-
treeViewItem.dbItem.listName,
386-
);
387-
this.truncatedReposNote(
388-
truncatedRepositories,
389-
treeViewItem.dbItem.listName,
400+
token.onCancellationRequested(() => {
401+
void showAndLogInformationMessage("Code search cancelled");
402+
return;
403+
});
404+
405+
progress.report({ increment: 10, message: "Processing results..." });
406+
407+
const truncatedRepositories =
408+
await this.dbManager.addNewRemoteReposToList(repositories, listName);
409+
this.truncatedReposNote(truncatedRepositories, listName);
410+
},
390411
);
391412
}
392413

extensions/ql-vscode/src/variant-analysis/gh-api/gh-api-client.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,36 @@ import {
77
VariantAnalysisSubmissionRequest,
88
} from "./variant-analysis";
99
import { Repository } from "./repository";
10+
import { Progress } from "vscode";
11+
import { CancellationToken } from "vscode-jsonrpc";
1012

1113
export async function getCodeSearchRepositories(
1214
credentials: Credentials,
1315
query: string,
16+
progress: Progress<{
17+
message?: string | undefined;
18+
increment?: number | undefined;
19+
}>,
20+
token: CancellationToken,
1421
): Promise<string[]> {
22+
let nwos: string[] = [];
1523
const octokit = await credentials.getOctokit();
16-
17-
const nwos = await octokit.paginate(
24+
for await (const response of octokit.paginate.iterator(
1825
octokit.rest.search.repos,
1926
{
2027
q: query,
2128
per_page: 100,
2229
},
23-
(response) => response.data.map((item) => item.full_name),
24-
);
30+
)) {
31+
nwos.push(...response.data.map((item) => item.full_name));
32+
const numberOfRequests = Math.ceil(response.data.total_count / 99);
33+
const increment = numberOfRequests < 10 ? 80 / numberOfRequests : 8;
34+
progress.report({ increment });
35+
if (token.isCancellationRequested) {
36+
nwos = [];
37+
break;
38+
}
39+
}
2540

2641
return [...new Set(nwos)];
2742
}

0 commit comments

Comments
 (0)