Show nicer message when Appwrite project can't be found
This commit is contained in:
parent
7190b769f8
commit
83ceb42acf
2 changed files with 31 additions and 15 deletions
|
@ -34,21 +34,35 @@ export class HealthTreeItemProvider implements vscode.TreeDataProvider<vscode.Tr
|
||||||
|
|
||||||
// get children for root
|
// get children for root
|
||||||
if (element === undefined) {
|
if (element === undefined) {
|
||||||
const health = await promiseWithTimeout<AppwriteHealth | undefined>(10000, async () => await healthClient?.checkup(), 'Health request timed out');
|
try {
|
||||||
if (health === undefined) {
|
const health = await promiseWithTimeout<AppwriteHealth | undefined>(
|
||||||
return [];
|
10000,
|
||||||
|
async () => {
|
||||||
|
try {
|
||||||
|
return await healthClient?.checkup();
|
||||||
|
} catch (e) {
|
||||||
|
vscode.window.showErrorMessage('Could not connect to Appwrite project');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Health request timed out"
|
||||||
|
);
|
||||||
|
if (health === undefined) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
ext.outputChannel?.append(JSON.stringify(health, null, 4));
|
||||||
|
const healthItems = Object.entries(health).map(([service, status]) => {
|
||||||
|
return new HealthTreeItem(service, status, healthTooltips[service as keyof AppwriteHealth]);
|
||||||
|
});
|
||||||
|
this.lastChecked = new Date();
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: `Updated at ${dayjs(this.lastChecked).format("LTS")}`,
|
||||||
|
},
|
||||||
|
...healthItems,
|
||||||
|
];
|
||||||
|
} catch (e) {
|
||||||
|
//
|
||||||
}
|
}
|
||||||
ext.outputChannel?.append(JSON.stringify(health, null, 4));
|
|
||||||
const healthItems = Object.entries(health).map(([service, status]) => {
|
|
||||||
return new HealthTreeItem(service, status, healthTooltips[service as keyof AppwriteHealth]);
|
|
||||||
});
|
|
||||||
this.lastChecked = new Date();
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
label: `Updated at ${dayjs(this.lastChecked).format("LTS")}`,
|
|
||||||
},
|
|
||||||
...healthItems,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
import { window } from 'vscode';
|
||||||
|
|
||||||
export const promiseWithTimeout = <T>(timeoutMs: number, promise: () => Promise<T>, failureMessage?: string): Promise<T> => {
|
export const promiseWithTimeout = <T>(timeoutMs: number, promise: () => Promise<T>, failureMessage?: string): Promise<T> => {
|
||||||
let timeoutHandle: NodeJS.Timeout;
|
let timeoutHandle: NodeJS.Timeout;
|
||||||
const timeoutPromise = new Promise<never>((resolve, reject) => {
|
const timeoutPromise = new Promise<never>((resolve, reject) => {
|
||||||
timeoutHandle = setTimeout(() => reject(new Error(failureMessage)), timeoutMs);
|
timeoutHandle = setTimeout(() => window.showErrorMessage(failureMessage ?? 'Request timed out'), timeoutMs);
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.race([promise(), timeoutPromise]).then((result) => {
|
return Promise.race([promise(), timeoutPromise]).then((result) => {
|
||||||
|
|
Loading…
Reference in a new issue