提交 b04a827f 编写于 作者: J Joao Moreno

🐛 better handle uris in windows

related to #20290
上级 1b29c98d
......@@ -45,7 +45,7 @@ export class WindowsService implements IWindowsService, IDisposable {
) {
chain(urlService.onOpenURL)
.filter(uri => uri.authority === 'file' && !!uri.path)
.map(uri => this.parseURIForOpen(uri))
.map(uri => URI.file(uri.fsPath))
.on(this.openFileForURI, this, this.disposables);
}
......@@ -302,38 +302,14 @@ export class WindowsService implements IWindowsService, IDisposable {
return TPromise.as(null);
}
private openFileForURI(filePath: string): TPromise<void> {
private openFileForURI(uri: URI): TPromise<void> {
const cli = assign(Object.create(null), this.environmentService.args, { goto: true });
const pathsToOpen = [filePath];
const pathsToOpen = [uri.fsPath];
this.windowsMainService.open({ context: OpenContext.API, cli, pathsToOpen });
return TPromise.as(null);
}
private parseURIForOpen(uri: URI): string {
/**
* opening vscode://file/drive/path/to/project passes a POSIX-style path on Windows.
* i.e vscode://file/c/path/to/project gives a path of /c/path/to/project
* let's strip the root slash and ensure the drive letter is something Windows
* can understand.
*/
if (uri.authority === 'file' && process.platform === 'win32') {
let path = uri.path.substr(1); // strip the root slash
let drive = path.slice(0, path.indexOf('/')); // find the drive letter
if (drive.length === 1) { // add a colon if the uri.path contains a valid drive letter.
path = path.slice(0, path.indexOf('/')) + ':' + path.slice(path.indexOf('/'));
return path;
}
if (drive.length === 2 && drive.indexOf(':')) { // path has a colon already
return path;
}
return uri.path;
}
// *NIX platforms can process this path natively.
return uri.path;
}
dispose(): void {
this.disposables = dispose(this.disposables);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册