diff --git a/src/sql/platform/node/pathUtilities.ts b/src/sql/platform/common/pathUtilities.ts similarity index 93% rename from src/sql/platform/node/pathUtilities.ts rename to src/sql/platform/common/pathUtilities.ts index 0c161b46f0..8ba433c4f7 100644 --- a/src/sql/platform/node/pathUtilities.ts +++ b/src/sql/platform/common/pathUtilities.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { normalize, join, dirname } from 'vs/base/common/path'; -import * as os from 'os'; import { URI } from 'vs/base/common/uri'; import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; @@ -12,7 +11,7 @@ import { Schemas } from 'vs/base/common/network'; export const FILE_SCHEMA: string = 'file'; -export function resolveCurrentDirectory(uri: string, rootPath: string): string { +export function resolveCurrentDirectory(uri: string, rootPath: string): string | undefined { let sqlUri = URI.parse(uri); let currentDirectory: string; @@ -24,9 +23,6 @@ export function resolveCurrentDirectory(uri: string, rootPath: string): string { let root = rootPath; if (root) { currentDirectory = root; - } else { - // use temp directory - currentDirectory = os.tmpdir(); } } else { currentDirectory = dirname(sqlUri.path); diff --git a/src/sql/platform/query/common/queryRunner.ts b/src/sql/platform/query/common/queryRunner.ts index ded0db9b2d..96ac0235e4 100644 --- a/src/sql/platform/query/common/queryRunner.ts +++ b/src/sql/platform/query/common/queryRunner.ts @@ -12,7 +12,7 @@ import * as Utils from 'sql/platform/connection/common/utils'; import { SaveFormat } from 'sql/workbench/parts/grid/common/interfaces'; import { Deferred } from 'sql/base/common/promise'; import { IQueryPlanInfo } from 'sql/platform/query/common/queryModel'; -import { ResultSerializer } from 'sql/platform/node/resultSerializer'; +import { ResultSerializer } from 'sql/workbench/parts/query/common/resultSerializer'; import Severity from 'vs/base/common/severity'; import * as nls from 'vs/nls'; diff --git a/src/sql/workbench/parts/charts/browser/actions.ts b/src/sql/workbench/parts/charts/browser/actions.ts index f408f73920..ae40b0d7da 100644 --- a/src/sql/workbench/parts/charts/browser/actions.ts +++ b/src/sql/workbench/parts/charts/browser/actions.ts @@ -7,7 +7,7 @@ import { IInsightOptions, IInsight } from './interfaces'; import { Graph } from './graphInsight'; import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService'; import { IInsightsConfig } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces'; -import { resolveCurrentDirectory, getRootPath } from 'sql/platform/node/pathUtilities'; +import { resolveCurrentDirectory, getRootPath } from 'sql/platform/common/pathUtilities'; import { localize } from 'vs/nls'; import { Action } from 'vs/base/common/actions'; diff --git a/src/sql/workbench/parts/grid/services/dataService.ts b/src/sql/workbench/parts/grid/services/dataService.ts index a66383a66b..1aff8b3fc3 100644 --- a/src/sql/workbench/parts/grid/services/dataService.ts +++ b/src/sql/workbench/parts/grid/services/dataService.ts @@ -9,7 +9,7 @@ import { Observer } from 'rxjs/Observer'; import { EditUpdateCellResult, EditSubsetResult, EditCreateRowResult } from 'azdata'; import { IQueryModelService } from 'sql/platform/query/common/queryModel'; -import { ResultSerializer } from 'sql/platform/node/resultSerializer'; +import { ResultSerializer } from 'sql/workbench/parts/query/common/resultSerializer'; import { ISaveRequest } from 'sql/workbench/parts/grid/common/interfaces'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; diff --git a/src/sql/platform/node/resultSerializer.ts b/src/sql/workbench/parts/query/common/resultSerializer.ts similarity index 94% rename from src/sql/platform/node/resultSerializer.ts rename to src/sql/workbench/parts/query/common/resultSerializer.ts index 1817ac173e..8b365a97e0 100644 --- a/src/sql/platform/node/resultSerializer.ts +++ b/src/sql/workbench/parts/query/common/resultSerializer.ts @@ -12,7 +12,7 @@ import { IQueryManagementService } from 'sql/platform/query/common/queryManageme import { ISaveRequest, SaveFormat } from 'sql/workbench/parts/grid/common/interfaces'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { IWindowsService, IWindowService, FileFilter } from 'vs/platform/windows/common/windows'; +import { IWindowsService, FileFilter } from 'vs/platform/windows/common/windows'; import { Registry } from 'vs/platform/registry/common/platform'; import { URI } from 'vs/base/common/uri'; import * as path from 'vs/base/common/path'; @@ -23,9 +23,10 @@ import { INotificationService } from 'vs/platform/notification/common/notificati import { getBaseLabel } from 'vs/base/common/labels'; import { ShowFileInFolderAction, OpenFileInFolderAction } from 'sql/workbench/common/workspaceActions'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { getRootPath, resolveCurrentDirectory, resolveFilePath } from 'sql/platform/node/pathUtilities'; +import { getRootPath, resolveCurrentDirectory, resolveFilePath } from 'sql/platform/common/pathUtilities'; import { IOutputService, IOutputChannelRegistry, IOutputChannel, Extensions as OutputExtensions } from 'vs/workbench/contrib/output/common/output'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs'; let prevSavePath: string; @@ -45,7 +46,7 @@ export class ResultSerializer { @IEditorService private _editorService: IEditorService, @IWorkspaceContextService private _contextService: IWorkspaceContextService, @IWindowsService private _windowsService: IWindowsService, - @IWindowService private _windowService: IWindowService, + @IFileDialogService private readonly fileDialogService: IFileDialogService, @INotificationService private _notificationService: INotificationService ) { } @@ -88,15 +89,18 @@ export class ResultSerializer { } private promptForFilepath(saveRequest: ISaveRequest): Thenable { - let filepathPlaceHolder = (prevSavePath) ? path.dirname(prevSavePath) : resolveCurrentDirectory(this._uri, this.rootPath); - filepathPlaceHolder = path.join(filepathPlaceHolder, this.getResultsDefaultFilename(saveRequest)); - return this._windowService.showSaveDialog({ + let filepathPlaceHolder = prevSavePath ? path.dirname(prevSavePath) : resolveCurrentDirectory(this._uri, this.rootPath); + if (filepathPlaceHolder) { + filepathPlaceHolder = path.join(filepathPlaceHolder, this.getResultsDefaultFilename(saveRequest)); + } + + return this.fileDialogService.showSaveDialog({ title: nls.localize('resultsSerializer.saveAsFileTitle', 'Choose Results File'), - defaultPath: path.normalize(filepathPlaceHolder), + defaultUri: filepathPlaceHolder ? URI.file(filepathPlaceHolder) : undefined, filters: this.getResultsFileExtension(saveRequest) }).then(filePath => { - prevSavePath = filePath; - return Promise.resolve(filePath); + prevSavePath = filePath.fsPath; + return filePath.fsPath; }); }