Fix duplicate files opening with folder parameter

Reworked from d574012871 to fit in the
new structure.
This commit is contained in:
Asher 2020-02-13 12:04:22 -06:00
parent ac4f2b8215
commit cc79edb312
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
2 changed files with 66 additions and 16 deletions

View File

@ -211,6 +211,46 @@ index 2c64061da7..c0ef8faedd 100644
} catch (err) { } catch (err) {
// Do nothing. If we can't read the file we have no // Do nothing. If we can't read the file we have no
// language pack config. // language pack config.
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
index a599f5a7eb..ec7ccd43f8 100644
--- a/src/vs/code/browser/workbench/workbench.ts
+++ b/src/vs/code/browser/workbench/workbench.ts
@@ -298,35 +298,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
let workspace: IWorkspace;
let payload = Object.create(null);
- const query = new URL(document.location.href).searchParams;
- query.forEach((value, key) => {
- switch (key) {
-
- // Folder
- case WorkspaceProvider.QUERY_PARAM_FOLDER:
- workspace = { folderUri: URI.parse(value) };
- foundWorkspace = true;
- break;
-
- // Workspace
- case WorkspaceProvider.QUERY_PARAM_WORKSPACE:
- workspace = { workspaceUri: URI.parse(value) };
- foundWorkspace = true;
- break;
-
- // Empty
- case WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW:
- workspace = undefined;
- foundWorkspace = true;
- break;
-
- // Payload
- case WorkspaceProvider.QUERY_PARAM_PAYLOAD:
- payload = JSON.parse(value);
- break;
- }
- });
-
// If no workspace is provided through the URL, check for config attribute from server
if (!foundWorkspace) {
if (config.folderUri) {
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
index abd1e33b18..bf75952ce1 100644 index abd1e33b18..bf75952ce1 100644
--- a/src/vs/platform/environment/common/environment.ts --- a/src/vs/platform/environment/common/environment.ts

View File

@ -167,18 +167,22 @@ export class VscodeHttpProvider extends HttpProvider {
} }
private async getRoot(request: http.IncomingMessage, route: Route): Promise<HttpResponse> { private async getRoot(request: http.IncomingMessage, route: Route): Promise<HttpResponse> {
const remoteAuthority = request.headers.host as string
const settings = await this.settings.read() const settings = await this.settings.read()
const startPath = await this.getFirstValidPath([ const startPath = await this.getFirstValidPath(
{ url: route.query.workspace, workspace: true }, [
{ url: route.query.folder, workspace: false }, { url: route.query.workspace, workspace: true },
settings.lastVisited, { url: route.query.folder, workspace: false },
this.args._ && this.args._.length > 0 ? { url: this.urlify(this.args._[0]) } : undefined, settings.lastVisited,
]) this.args._ && this.args._.length > 0 ? { url: this.args._[0] } : undefined,
],
remoteAuthority
)
const [response, options] = await Promise.all([ const [response, options] = await Promise.all([
await this.getUtf8Resource(this.rootPath, `src/node/vscode/workbench${!this.isDev ? "-build" : ""}.html`), await this.getUtf8Resource(this.rootPath, `src/node/vscode/workbench${!this.isDev ? "-build" : ""}.html`),
this.initialize({ this.initialize({
args: this.args, args: this.args,
remoteAuthority: request.headers.host as string, remoteAuthority,
startPath, startPath,
}), }),
]) ])
@ -217,7 +221,8 @@ export class VscodeHttpProvider extends HttpProvider {
* workspace or a directory otherwise. * workspace or a directory otherwise.
*/ */
private async getFirstValidPath( private async getFirstValidPath(
startPaths: Array<{ url?: string | string[]; workspace?: boolean } | undefined> startPaths: Array<{ url?: string | string[]; workspace?: boolean } | undefined>,
remoteAuthority: string
): Promise<StartPath | undefined> { ): Promise<StartPath | undefined> {
for (let i = 0; i < startPaths.length; ++i) { for (let i = 0; i < startPaths.length; ++i) {
const startPath = startPaths[i] const startPath = startPaths[i]
@ -226,14 +231,23 @@ export class VscodeHttpProvider extends HttpProvider {
} }
const paths = typeof startPath.url === "string" ? [startPath.url] : startPath.url || [] const paths = typeof startPath.url === "string" ? [startPath.url] : startPath.url || []
for (let j = 0; j < paths.length; ++j) { for (let j = 0; j < paths.length; ++j) {
const u = url.parse(paths[j]) const uri = url.parse(paths[j])
try { try {
if (!u.pathname) { if (!uri.pathname) {
throw new Error(`${paths[j]} is not a valid URL`) throw new Error(`${paths[j]} is not a valid URL`)
} }
const stat = await fs.stat(u.pathname) const stat = await fs.stat(uri.pathname)
if (typeof startPath.workspace === "undefined" || startPath.workspace !== stat.isDirectory()) { if (typeof startPath.workspace === "undefined" || startPath.workspace !== stat.isDirectory()) {
return { url: u.href, workspace: !stat.isDirectory() } return {
url: url.format({
protocol: uri.protocol || "vscode-remote",
hostname: remoteAuthority.split(":")[0],
port: remoteAuthority.split(":")[1],
pathname: uri.pathname,
slashes: true,
}),
workspace: !stat.isDirectory(),
}
} }
} catch (error) { } catch (error) {
logger.warn(error.message) logger.warn(error.message)
@ -242,8 +256,4 @@ export class VscodeHttpProvider extends HttpProvider {
} }
return undefined return undefined
} }
private urlify(p: string): string {
return "vscode-remote://host" + path.resolve(p)
}
} }