mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Refactor node loading logic for tree controllers (#8980)
* Refactor node loading logic for tree controllers * Add comment
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
|
import * as nls from 'vscode-nls';
|
||||||
import { TreeNode } from './treeNode';
|
import { TreeNode } from './treeNode';
|
||||||
import { IControllerTreeChangeHandler } from './controllerTreeChangeHandler';
|
import { IControllerTreeChangeHandler } from './controllerTreeChangeHandler';
|
||||||
import { AddControllerNode } from './addControllerNode';
|
import { AddControllerNode } from './addControllerNode';
|
||||||
@@ -13,6 +14,8 @@ import { showErrorMessage } from '../utils';
|
|||||||
import { LoadingControllerNode } from './loadingControllerNode';
|
import { LoadingControllerNode } from './loadingControllerNode';
|
||||||
import { AuthType } from '../constants';
|
import { AuthType } from '../constants';
|
||||||
|
|
||||||
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
const CredentialNamespace = 'clusterControllerCredentials';
|
const CredentialNamespace = 'clusterControllerCredentials';
|
||||||
|
|
||||||
interface IControllerInfoSlim {
|
interface IControllerInfoSlim {
|
||||||
@@ -43,7 +46,9 @@ export class ControllerTreeDataProvider implements vscode.TreeDataProvider<TreeN
|
|||||||
return this.root.getChildren();
|
return this.root.getChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.loadSavedControllers();
|
// Kick off loading the saved controllers but then immediately return the loading node so
|
||||||
|
// the user isn't left with an empty tree while we load the nodes
|
||||||
|
this.loadSavedControllers().catch(err => { vscode.window.showErrorMessage(localize('bdc.controllerTreeDataProvider.error', "Unexpected error loading saved controllers: {0}", err)); });
|
||||||
return [new LoadingControllerNode()];
|
return [new LoadingControllerNode()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,30 +31,9 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!this.isSystemInitialized) {
|
if (!this.isSystemInitialized) {
|
||||||
try {
|
// Kick off loading the saved servers but then immediately return the loading node so
|
||||||
// Call to collect all locally saved CMS servers
|
// the user isn't left with an empty tree while we load the nodes
|
||||||
// to determine whether the system has been initialized.
|
this.loadSavedServers().catch(err => this._appContext.apiWrapper.showErrorMessage(localize('cms.resource.tree.treeProvider.loadError', "Unexpected error occured while loading saved servers {0}", err)));
|
||||||
const cachedServers = this._appContext.cmsUtils.getSavedServers();
|
|
||||||
if (cachedServers && cachedServers.length > 0) {
|
|
||||||
const servers: CmsResourceTreeNode[] = [];
|
|
||||||
cachedServers.forEach(async (server) => {
|
|
||||||
servers.push(new CmsResourceTreeNode(
|
|
||||||
server.name,
|
|
||||||
server.description,
|
|
||||||
server.ownerUri,
|
|
||||||
server.connection,
|
|
||||||
this._appContext, this, null));
|
|
||||||
await this.appContext.cmsUtils.cacheRegisteredCmsServer(server.name, server.description,
|
|
||||||
server.ownerUri, server.connection);
|
|
||||||
});
|
|
||||||
return servers;
|
|
||||||
}
|
|
||||||
this.isSystemInitialized = true;
|
|
||||||
this._onDidChangeTreeData.fire(undefined);
|
|
||||||
} catch (error) {
|
|
||||||
// System not initialized yet
|
|
||||||
this.isSystemInitialized = false;
|
|
||||||
}
|
|
||||||
return [CmsResourceMessageTreeNode.create(CmsResourceTreeProvider.loadingLabel, undefined)];
|
return [CmsResourceMessageTreeNode.create(CmsResourceTreeProvider.loadingLabel, undefined)];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@@ -93,6 +72,36 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
|
|||||||
return element.getTreeItem();
|
return element.getTreeItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async loadSavedServers(): Promise<void> {
|
||||||
|
try {
|
||||||
|
// Optimistically set to true so we don't double-load if something refreshes the tree while
|
||||||
|
// we're loading.
|
||||||
|
this.isSystemInitialized = true;
|
||||||
|
// Call to collect all locally saved CMS servers
|
||||||
|
// to determine whether the system has been initialized.
|
||||||
|
const cachedServers = this._appContext.cmsUtils.getSavedServers();
|
||||||
|
if (cachedServers && cachedServers.length > 0) {
|
||||||
|
const servers: CmsResourceTreeNode[] = [];
|
||||||
|
for (let i = 0; i < cachedServers.length; ++i) {
|
||||||
|
const server = cachedServers[i];
|
||||||
|
servers.push(new CmsResourceTreeNode(
|
||||||
|
server.name,
|
||||||
|
server.description,
|
||||||
|
server.ownerUri,
|
||||||
|
server.connection,
|
||||||
|
this._appContext, this, null));
|
||||||
|
await this.appContext.cmsUtils.cacheRegisteredCmsServer(server.name, server.description,
|
||||||
|
server.ownerUri, server.connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._onDidChangeTreeData.fire(undefined);
|
||||||
|
} catch (error) {
|
||||||
|
// Reset so we can try loading again
|
||||||
|
this.isSystemInitialized = false;
|
||||||
|
throw error; //re-throw and let caller handler error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public isSystemInitialized: boolean = false;
|
public isSystemInitialized: boolean = false;
|
||||||
private _onDidChangeTreeData = new EventEmitter<TreeNode>();
|
private _onDidChangeTreeData = new EventEmitter<TreeNode>();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user