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…
	
	Add table
		
		Reference in a new issue