mirror of https://github.com/coder/code-server.git
Patch VS Code to wait for storage write (#2049)
VS Code has a short delay before writing storage (probably to queue up rapid changes). In the web version of VS Code this happens on the client which means if the page is reloaded before the delay expires the write never happens. Storage updates are already promises so this simply returns the promise returned by the delayer so it won't resolve until the write actually happens. Fixes #2021.
This commit is contained in:
parent
ceceef1dae
commit
3761f7bd51
|
@ -696,6 +696,49 @@ index 2185bb5228c..35463ca6520 100644
|
||||||
(err: any, socket: ISocket | undefined) => {
|
(err: any, socket: ISocket | undefined) => {
|
||||||
if (err || !socket) {
|
if (err || !socket) {
|
||||||
options.logService.error(`${logPrefix} socketFactory.connect() failed. Error:`);
|
options.logService.error(`${logPrefix} socketFactory.connect() failed. Error:`);
|
||||||
|
diff --git a/src/vs/platform/storage/browser/storageService.ts b/src/vs/platform/storage/browser/storageService.ts
|
||||||
|
index 59b1baf912..cf9805554b 100644
|
||||||
|
--- a/src/vs/platform/storage/browser/storageService.ts
|
||||||
|
+++ b/src/vs/platform/storage/browser/storageService.ts
|
||||||
|
@@ -116,8 +116,8 @@ export class BrowserStorageService extends Disposable implements IStorageService
|
||||||
|
return this.getStorage(scope).getNumber(key, fallbackValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
- store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): void {
|
||||||
|
- this.getStorage(scope).set(key, value);
|
||||||
|
+ store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): Promise<void> {
|
||||||
|
+ return this.getStorage(scope).set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(key: string, scope: StorageScope): void {
|
||||||
|
diff --git a/src/vs/platform/storage/common/storage.ts b/src/vs/platform/storage/common/storage.ts
|
||||||
|
index 1623957cb1..d366438d54 100644
|
||||||
|
--- a/src/vs/platform/storage/common/storage.ts
|
||||||
|
+++ b/src/vs/platform/storage/common/storage.ts
|
||||||
|
@@ -83,7 +83,7 @@ export interface IStorageService {
|
||||||
|
* The scope argument allows to define the scope of the storage
|
||||||
|
* operation to either the current workspace only or all workspaces.
|
||||||
|
*/
|
||||||
|
- store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): void;
|
||||||
|
+ store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): Promise<void> | void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an element stored under the provided key from storage.
|
||||||
|
diff --git a/src/vs/platform/storage/node/storageService.ts b/src/vs/platform/storage/node/storageService.ts
|
||||||
|
index 75514fe5a4..62d97c6048 100644
|
||||||
|
--- a/src/vs/platform/storage/node/storageService.ts
|
||||||
|
+++ b/src/vs/platform/storage/node/storageService.ts
|
||||||
|
@@ -204,8 +204,8 @@ export class NativeStorageService extends Disposable implements IStorageService
|
||||||
|
return this.getStorage(scope).getNumber(key, fallbackValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
- store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): void {
|
||||||
|
- this.getStorage(scope).set(key, value);
|
||||||
|
+ store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope): Promise<void> {
|
||||||
|
+ return this.getStorage(scope).set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(key: string, scope: StorageScope): void {
|
||||||
diff --git a/src/vs/server/browser/client.ts b/src/vs/server/browser/client.ts
|
diff --git a/src/vs/server/browser/client.ts b/src/vs/server/browser/client.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..3c0703b7174
|
index 00000000000..3c0703b7174
|
||||||
|
@ -2811,6 +2854,24 @@ index 3d77009b908..11deb1b99ac 100644
|
||||||
import './mainThreadTunnelService';
|
import './mainThreadTunnelService';
|
||||||
import './mainThreadAuthentication';
|
import './mainThreadAuthentication';
|
||||||
import './mainThreadTimeline';
|
import './mainThreadTimeline';
|
||||||
|
diff --git a/src/vs/workbench/api/browser/mainThreadStorage.ts b/src/vs/workbench/api/browser/mainThreadStorage.ts
|
||||||
|
index 7bc3904963..c6db2368ae 100644
|
||||||
|
--- a/src/vs/workbench/api/browser/mainThreadStorage.ts
|
||||||
|
+++ b/src/vs/workbench/api/browser/mainThreadStorage.ts
|
||||||
|
@@ -58,11 +58,11 @@ export class MainThreadStorage implements MainThreadStorageShape {
|
||||||
|
return JSON.parse(jsonValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
- $setValue(shared: boolean, key: string, value: object): Promise<void> {
|
||||||
|
+ async $setValue(shared: boolean, key: string, value: object): Promise<void> {
|
||||||
|
let jsonValue: string;
|
||||||
|
try {
|
||||||
|
jsonValue = JSON.stringify(value);
|
||||||
|
- this._storageService.store(key, jsonValue, shared ? StorageScope.GLOBAL : StorageScope.WORKSPACE);
|
||||||
|
+ await this._storageService.store(key, jsonValue, shared ? StorageScope.GLOBAL : StorageScope.WORKSPACE);
|
||||||
|
} catch (err) {
|
||||||
|
return Promise.reject(err);
|
||||||
|
}
|
||||||
diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts
|
diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts
|
||||||
index 97793666ad8..13cd137db1e 100644
|
index 97793666ad8..13cd137db1e 100644
|
||||||
--- a/src/vs/workbench/api/common/extHost.api.impl.ts
|
--- a/src/vs/workbench/api/common/extHost.api.impl.ts
|
||||||
|
|
Loading…
Reference in New Issue