mirror of https://github.com/coder/code-server.git
Handle existing query when opening folder
This commit is contained in:
parent
f61a0ae78a
commit
6737384d27
|
@ -583,20 +583,21 @@ index ede771a03e..bb40fcdd6b 100644
|
||||||
if (!userDataProvider) {
|
if (!userDataProvider) {
|
||||||
const remoteUserDataUri = this.getRemoteUserDataUri();
|
const remoteUserDataUri = this.getRemoteUserDataUri();
|
||||||
diff --git a/src/vs/workbench/browser/web.simpleservices.ts b/src/vs/workbench/browser/web.simpleservices.ts
|
diff --git a/src/vs/workbench/browser/web.simpleservices.ts b/src/vs/workbench/browser/web.simpleservices.ts
|
||||||
index 25414d8733..a0de828393 100644
|
index 25414d8733..20b0ad4a49 100644
|
||||||
--- a/src/vs/workbench/browser/web.simpleservices.ts
|
--- a/src/vs/workbench/browser/web.simpleservices.ts
|
||||||
+++ b/src/vs/workbench/browser/web.simpleservices.ts
|
+++ b/src/vs/workbench/browser/web.simpleservices.ts
|
||||||
@@ -38,6 +38,9 @@ import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteA
|
@@ -38,6 +38,10 @@ import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteA
|
||||||
import { IExperimentService, IExperiment, ExperimentActionType, ExperimentState } from 'vs/workbench/contrib/experiments/common/experimentService';
|
import { IExperimentService, IExperiment, ExperimentActionType, ExperimentState } from 'vs/workbench/contrib/experiments/common/experimentService';
|
||||||
import { ExtensionHostDebugChannelClient, ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
|
import { ExtensionHostDebugChannelClient, ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
|
||||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||||
+import { ExtensionManagementChannelClient } from 'vs/platform/extensionManagement/common/extensionManagementIpc';
|
+import { ExtensionManagementChannelClient } from 'vs/platform/extensionManagement/common/extensionManagementIpc';
|
||||||
|
+import { withQuery } from 'vs/server/src/client';
|
||||||
+import { IUploadService, UploadService } from 'vs/server/src/upload';
|
+import { IUploadService, UploadService } from 'vs/server/src/upload';
|
||||||
+registerSingleton(IUploadService, UploadService, true);
|
+registerSingleton(IUploadService, UploadService, true);
|
||||||
|
|
||||||
//#region Extension Tips
|
//#region Extension Tips
|
||||||
|
|
||||||
@@ -131,7 +134,15 @@ export class SimpleExtensionManagementService implements IExtensionManagementSer
|
@@ -131,7 +135,15 @@ export class SimpleExtensionManagementService implements IExtensionManagementSer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -613,7 +614,7 @@ index 25414d8733..a0de828393 100644
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@@ -251,7 +262,7 @@ export class SimpleUpdateService implements IUpdateService {
|
@@ -251,7 +263,7 @@ export class SimpleUpdateService implements IUpdateService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -622,25 +623,32 @@ index 25414d8733..a0de828393 100644
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@@ -491,7 +502,7 @@ export class SimpleWindowService extends Disposable implements IWindowService {
|
@@ -491,7 +503,11 @@ export class SimpleWindowService extends Disposable implements IWindowService {
|
||||||
for (let i = 0; i < _uris.length; i++) {
|
for (let i = 0; i < _uris.length; i++) {
|
||||||
const uri = _uris[i];
|
const uri = _uris[i];
|
||||||
if ('folderUri' in uri) {
|
if ('folderUri' in uri) {
|
||||||
- const newAddress = `${document.location.origin}/?folder=${uri.folderUri.path}${this.workbenchEnvironmentService.configuration.connectionToken ? `&tkn=${this.workbenchEnvironmentService.configuration.connectionToken}` : ''}`;
|
- const newAddress = `${document.location.origin}/?folder=${uri.folderUri.path}${this.workbenchEnvironmentService.configuration.connectionToken ? `&tkn=${this.workbenchEnvironmentService.configuration.connectionToken}` : ''}`;
|
||||||
+ const newAddress = `${window.location}?folder=${uri.folderUri.path}${this.workbenchEnvironmentService.configuration.connectionToken ? `&tkn=${this.workbenchEnvironmentService.configuration.connectionToken}` : ''}`;
|
+ const newAddress = withQuery(window.location.toString(), {
|
||||||
|
+ folder: uri.folderUri.path,
|
||||||
|
+ tkn: this.workbenchEnvironmentService.configuration.connectionToken,
|
||||||
|
+ workspace: undefined,
|
||||||
|
+ });
|
||||||
if (openFolderInNewWindow) {
|
if (openFolderInNewWindow) {
|
||||||
window.open(newAddress);
|
window.open(newAddress);
|
||||||
} else {
|
} else {
|
||||||
@@ -499,7 +510,7 @@ export class SimpleWindowService extends Disposable implements IWindowService {
|
@@ -499,7 +515,10 @@ export class SimpleWindowService extends Disposable implements IWindowService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ('workspaceUri' in uri) {
|
if ('workspaceUri' in uri) {
|
||||||
- const newAddress = `${document.location.origin}/?workspace=${uri.workspaceUri.path}`;
|
- const newAddress = `${document.location.origin}/?workspace=${uri.workspaceUri.path}`;
|
||||||
+ const newAddress = `${window.location}?workspace=${uri.workspaceUri.path}`;
|
+ const newAddress = withQuery(window.location.toString(), {
|
||||||
|
+ folder: undefined,
|
||||||
|
+ workspace: uri.workspaceUri.path,
|
||||||
|
+ });
|
||||||
if (openFolderInNewWindow) {
|
if (openFolderInNewWindow) {
|
||||||
window.open(newAddress);
|
window.open(newAddress);
|
||||||
} else {
|
} else {
|
||||||
@@ -718,6 +729,7 @@ export class SimpleWindowsService implements IWindowsService {
|
@@ -718,6 +737,7 @@ export class SimpleWindowsService implements IWindowsService {
|
||||||
}
|
}
|
||||||
|
|
||||||
relaunch(_options: { addArgs?: string[], removeArgs?: string[] }): Promise<void> {
|
relaunch(_options: { addArgs?: string[], removeArgs?: string[] }): Promise<void> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { URI } from "vs/base/common/uri";
|
||||||
import { registerSingleton } from "vs/platform/instantiation/common/extensions";
|
import { registerSingleton } from "vs/platform/instantiation/common/extensions";
|
||||||
import { ServiceCollection } from "vs/platform/instantiation/common/serviceCollection";
|
import { ServiceCollection } from "vs/platform/instantiation/common/serviceCollection";
|
||||||
import { ITelemetryService } from "vs/platform/telemetry/common/telemetry";
|
import { ITelemetryService } from "vs/platform/telemetry/common/telemetry";
|
||||||
|
@ -39,3 +40,28 @@ export const initialize = async (services: ServiceCollection): Promise<void> =>
|
||||||
(event as any).vscode = target.vscode;
|
(event as any).vscode = target.vscode;
|
||||||
window.dispatchEvent(event);
|
window.dispatchEvent(event);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface Query {
|
||||||
|
[key: string]: string | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the URL modified with the specified query variables. It's pretty
|
||||||
|
* stupid so it probably doesn't cover any edge cases. Undefined values will
|
||||||
|
* unset existing values. Doesn't allow duplicates.
|
||||||
|
*/
|
||||||
|
export const withQuery = (url: string, replace: Query): string => {
|
||||||
|
const uri = URI.parse(url);
|
||||||
|
const query = { ...replace };
|
||||||
|
uri.query.split("&").forEach((kv) => {
|
||||||
|
const [key, value] = kv.split("=", 2);
|
||||||
|
if (!(key in query)) {
|
||||||
|
query[key] = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return uri.with({
|
||||||
|
query: Object.keys(query)
|
||||||
|
.filter((k) => typeof query[k] !== "undefined")
|
||||||
|
.map((k) => `${k}=${query[k]}`).join("&"),
|
||||||
|
}).toString(true);
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue