mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-18 01:25:37 -05:00
* Add limit on the file size that can be opened with Open XEL feature * Add limit on the file size that can be opened and post a notification for large files * Update wording * Use FileService interface instead of fs to fix layering rules
119 lines
6.2 KiB
TypeScript
119 lines
6.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
|
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
|
import { IEditorService, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
|
import { ProfilerInput } from 'sql/workbench/browser/editor/profiler/profilerInput';
|
|
import * as TaskUtilities from 'sql/workbench/browser/taskUtilities';
|
|
import { IProfilerService, ProfilingSessionType } from 'sql/workbench/services/profiler/browser/interfaces';
|
|
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
|
import { ProfilerEditor } from 'sql/workbench/contrib/profiler/browser/profilerEditor';
|
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
|
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
|
|
import { IConnectionDialogService } from 'sql/workbench/services/connection/common/connectionDialogService';
|
|
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/browser/objectExplorerService';
|
|
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
|
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
|
|
import { IFileService } from 'vs/platform/files/common/files';
|
|
|
|
CommandsRegistry.registerCommand({
|
|
id: 'profiler.newProfiler',
|
|
handler: (accessor: ServicesAccessor, ...args: any[]) => {
|
|
let connectionProfile: ConnectionProfile = undefined;
|
|
let instantiationService: IInstantiationService = accessor.get(IInstantiationService);
|
|
let editorService: IEditorService = accessor.get(IEditorService);
|
|
let connectionService: IConnectionManagementService = accessor.get(IConnectionManagementService);
|
|
let objectExplorerService: IObjectExplorerService = accessor.get(IObjectExplorerService);
|
|
let connectionDialogService: IConnectionDialogService = accessor.get(IConnectionDialogService);
|
|
let capabilitiesService: ICapabilitiesService = accessor.get(ICapabilitiesService);
|
|
|
|
// If a context is available if invoked from the context menu, we will use the connection profiler of the server node
|
|
if (args[0]?.connectionProfile) {
|
|
connectionProfile = ConnectionProfile.fromIConnectionProfile(capabilitiesService, args[0].connectionProfile);
|
|
} else if (args[0]?.$treeItem.payload) {
|
|
// Because this is contributed from core it doesn't go through the argument processor that extension commands do
|
|
// so we just pull out the payload directly
|
|
connectionProfile = ConnectionProfile.fromIConnectionProfile(capabilitiesService, args[0].$treeItem.payload);
|
|
}
|
|
else {
|
|
// No context available, we will try to get the current global active connection
|
|
connectionProfile = TaskUtilities.getCurrentGlobalConnection(objectExplorerService, connectionService, editorService) as ConnectionProfile;
|
|
}
|
|
|
|
let promise;
|
|
if (connectionProfile) {
|
|
promise = connectionService.connectIfNotConnected(connectionProfile, 'connection', true);
|
|
} else {
|
|
// if still no luck, we will open the Connection dialog and let user connect to a server
|
|
promise = connectionDialogService.openDialogAndWait(connectionService, { connectionType: 0, showDashboard: false, providers: [mssqlProviderName] }).then((profile) => {
|
|
connectionProfile = profile as ConnectionProfile;
|
|
});
|
|
}
|
|
|
|
return promise.then(() => {
|
|
if (!connectionProfile) {
|
|
connectionProfile = TaskUtilities.getCurrentGlobalConnection(objectExplorerService, connectionService, editorService) as ConnectionProfile;
|
|
}
|
|
|
|
if (connectionProfile && connectionProfile.providerName === mssqlProviderName) {
|
|
let profilerInput = instantiationService.createInstance(ProfilerInput, connectionProfile, undefined);
|
|
editorService.openEditor(profilerInput, { pinned: true }, ACTIVE_GROUP).then(() => Promise.resolve(true));
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
KeybindingsRegistry.registerCommandAndKeybindingRule({
|
|
id: 'profiler.newProfiler',
|
|
weight: KeybindingWeight.BuiltinExtension,
|
|
when: undefined,
|
|
primary: KeyMod.Alt | KeyCode.KeyP,
|
|
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyP },
|
|
handler: CommandsRegistry.getCommand('profiler.newProfiler').handler
|
|
});
|
|
|
|
KeybindingsRegistry.registerCommandAndKeybindingRule({
|
|
id: 'profiler.toggleStartStop',
|
|
weight: KeybindingWeight.EditorContrib,
|
|
when: undefined,
|
|
primary: KeyMod.Alt | KeyCode.KeyS,
|
|
mac: { primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyS },
|
|
handler: (accessor: ServicesAccessor) => {
|
|
let profilerService: IProfilerService = accessor.get(IProfilerService);
|
|
let editorService: IEditorService = accessor.get(IEditorService);
|
|
|
|
let activeEditor = editorService.activeEditorPane;
|
|
if (activeEditor instanceof ProfilerEditor) {
|
|
let profilerInput = activeEditor.input;
|
|
if (profilerInput.state.isRunning) {
|
|
return profilerService.stopSession(profilerInput.id);
|
|
} else {
|
|
// clear data when profiler is started
|
|
profilerInput.data.clear();
|
|
return profilerService.startSession(profilerInput.id, profilerInput.sessionName, ProfilingSessionType.RemoteSession);
|
|
}
|
|
}
|
|
return Promise.resolve(false);
|
|
}
|
|
});
|
|
|
|
CommandsRegistry.registerCommand({
|
|
id: 'profiler.openFile',
|
|
handler: async (accessor: ServicesAccessor, ...args: any[]) => {
|
|
const editorService: IEditorService = accessor.get(IEditorService);
|
|
const fileDialogService: IFileDialogService = accessor.get(IFileDialogService);
|
|
const profilerService: IProfilerService = accessor.get(IProfilerService);
|
|
const instantiationService: IInstantiationService = accessor.get(IInstantiationService);
|
|
const fileService: IFileService = accessor.get(IFileService);
|
|
|
|
const result = await profilerService.openFile(fileDialogService, editorService, instantiationService, fileService);
|
|
|
|
return result;
|
|
}
|
|
});
|