mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-15 01:25:36 -05:00
70 lines
2.7 KiB
TypeScript
70 lines
2.7 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 * as vscode from 'vscode';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import * as os from 'os';
|
|
import * as constants from '../common/constants';
|
|
import * as utils from '../common/utils';
|
|
|
|
/**
|
|
* Returns the default location to save a new database project
|
|
*/
|
|
export function defaultProjectSaveLocation(): vscode.Uri | undefined {
|
|
const workspaceApi = utils.getDataWorkspaceExtensionApi();
|
|
return workspaceApi.defaultProjectSaveLocation;
|
|
}
|
|
|
|
/**
|
|
* Returns default project name for a fresh new project, such as 'DatabaseProject1'. Auto-increments
|
|
* the suggestion if a project of that name already exists in the default save location
|
|
*/
|
|
export function defaultProjectNameNewProj(): string {
|
|
return defaultProjectName(constants.defaultProjectNameStarter, 1);
|
|
}
|
|
|
|
/**
|
|
* Returns default project name for a new project based on given dbName. Auto-increments
|
|
* the suggestion if a project of that name already exists in the default save location
|
|
*
|
|
* @param dbName the database name to base the default project name off of
|
|
*/
|
|
export function defaultProjectNameFromDb(dbName: string | undefined): string {
|
|
if (!dbName) {
|
|
return '';
|
|
}
|
|
|
|
const projectNameStarter = constants.defaultProjectNameStarter + dbName;
|
|
const defaultLocation = defaultProjectSaveLocation() ?? vscode.Uri.file(os.homedir());
|
|
const projectPath: string = path.join(defaultLocation.fsPath, projectNameStarter);
|
|
if (!fs.existsSync(projectPath)) {
|
|
return projectNameStarter;
|
|
}
|
|
|
|
return defaultProjectName(projectNameStarter, 2);
|
|
}
|
|
|
|
/**
|
|
* Returns a project name that begins with the given nameStarter, and ends in a number, such as
|
|
* 'DatabaseProject1'. Number begins at the given counter, but auto-increments if a project of
|
|
* that name already exists in the default save location.
|
|
*
|
|
* @param nameStarter the beginning of the default project name, such as 'DatabaseProject'
|
|
* @param counter the starting value of of the number appended to the nameStarter
|
|
*/
|
|
function defaultProjectName(nameStarter: string, counter: number): string {
|
|
while (counter < Number.MAX_SAFE_INTEGER) {
|
|
const name: string = nameStarter + counter;
|
|
const defaultLocation = defaultProjectSaveLocation() ?? vscode.Uri.file(os.homedir());
|
|
const projectPath: string = path.join(defaultLocation.fsPath, name);
|
|
if (!fs.existsSync(projectPath)) {
|
|
return name;
|
|
}
|
|
counter++;
|
|
}
|
|
return constants.defaultProjectNameStarter + counter;
|
|
}
|