Skip to content

Commit 2da2634

Browse files
committed
Remember current machine name
1 parent 476e179 commit 2da2634

6 files changed

Lines changed: 47 additions & 50 deletions

File tree

src/vs/platform/userDataSync/common/userDataAutoSyncService.ts

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ import { isPromiseCanceledError } from 'vs/base/common/errors';
1313
import { CancellationToken } from 'vs/base/common/cancellation';
1414
import { IStorageService, StorageScope, IWorkspaceStorageChangeEvent } from 'vs/platform/storage/common/storage';
1515
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
16-
import { IUserDataSyncMachine, IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
17-
import { PlatformToString, isWeb, Platform, platform } from 'vs/base/common/platform';
18-
import { escapeRegExpCharacters } from 'vs/base/common/strings';
19-
import { IProductService } from 'vs/platform/product/common/productService';
16+
import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
2017
import { localize } from 'vs/nls';
2118

2219
type AutoSyncClassification = {
@@ -33,7 +30,7 @@ type AutoSyncErrorClassification = {
3330

3431
const enablementKey = 'sync.enable';
3532
const disableMachineEventuallyKey = 'sync.disableMachineEventually';
36-
const SESSION_ID_KEY = 'sync.sessionId';
33+
const sessionIdKey = 'sync.sessionId';
3734

3835
export class UserDataAutoSyncEnablementService extends Disposable {
3936

@@ -92,7 +89,6 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
9289
@IUserDataSyncAccountService private readonly userDataSyncAccountService: IUserDataSyncAccountService,
9390
@ITelemetryService private readonly telemetryService: ITelemetryService,
9491
@IUserDataSyncMachinesService private readonly userDataSyncMachinesService: IUserDataSyncMachinesService,
95-
@IProductService private readonly productService: IProductService,
9692
@IStorageService storageService: IStorageService,
9793
@IEnvironmentService environmentService: IEnvironmentService
9894
) {
@@ -114,7 +110,7 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
114110
const { enabled, reason } = this.isAutoSyncEnabled();
115111
if (enabled) {
116112
if (this.autoSync.value === undefined) {
117-
this.autoSync.value = new AutoSync(1000 * 60 * 5 /* 5 miutes */, this.userDataSyncStoreService, this.userDataSyncService, this.userDataSyncMachinesService, this.logService, this.storageService, this.productService);
113+
this.autoSync.value = new AutoSync(1000 * 60 * 5 /* 5 miutes */, this.userDataSyncStoreService, this.userDataSyncService, this.userDataSyncMachinesService, this.logService, this.storageService);
118114
this.autoSync.value.register(this.autoSync.value.onDidStartSync(() => this.lastSyncTriggerTime = new Date().getTime()));
119115
this.autoSync.value.register(this.autoSync.value.onDidFinishSync(e => this.onDidFinishSync(e)));
120116
if (this.startAutoSync()) {
@@ -167,7 +163,7 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
167163
this.setEnablement(false);
168164

169165
// Reset Session
170-
this.storageService.remove(SESSION_ID_KEY, StorageScope.GLOBAL);
166+
this.storageService.remove(sessionIdKey, StorageScope.GLOBAL);
171167

172168
// Reset
173169
if (everywhere) {
@@ -309,7 +305,6 @@ class AutoSync extends Disposable {
309305
private readonly userDataSyncMachinesService: IUserDataSyncMachinesService,
310306
private readonly logService: IUserDataSyncLogService,
311307
private readonly storageService: IStorageService,
312-
private readonly productService: IProductService,
313308
) {
314309
super();
315310
}
@@ -368,7 +363,7 @@ class AutoSync extends Disposable {
368363
throw new UserDataAutoSyncError(localize('turned off', "Cannot sync because syncing is turned off in the cloud"), UserDataSyncErrorCode.TurnedOff);
369364
}
370365

371-
const sessionId = this.storageService.get(SESSION_ID_KEY, StorageScope.GLOBAL);
366+
const sessionId = this.storageService.get(sessionIdKey, StorageScope.GLOBAL);
372367
// Server session is different from client session
373368
if (sessionId && manifest && sessionId !== manifest.session) {
374369
throw new UserDataAutoSyncError(localize('session expired', "Cannot sync because current session is expired"), UserDataSyncErrorCode.SessionExpired);
@@ -396,7 +391,7 @@ class AutoSync extends Disposable {
396391

397392
// Update local session id
398393
if (manifest && manifest.session !== sessionId) {
399-
this.storageService.store(SESSION_ID_KEY, manifest.session, StorageScope.GLOBAL);
394+
this.storageService.store(sessionIdKey, manifest.session, StorageScope.GLOBAL);
400395
}
401396

402397
// Return if cancellation is requested
@@ -406,8 +401,7 @@ class AutoSync extends Disposable {
406401

407402
// Add current machine
408403
if (!currentMachine) {
409-
const name = this.computeDefaultMachineName(machines);
410-
await this.userDataSyncMachinesService.addCurrentMachine(name, manifest || undefined);
404+
await this.userDataSyncMachinesService.addCurrentMachine(manifest || undefined);
411405
}
412406

413407
} catch (e) {
@@ -418,20 +412,6 @@ class AutoSync extends Disposable {
418412
this._onDidFinishSync.fire(error);
419413
}
420414

421-
private computeDefaultMachineName(machines: IUserDataSyncMachine[]): string {
422-
const namePrefix = `${this.productService.nameLong} (${PlatformToString(isWeb ? Platform.Web : platform)})`;
423-
const nameRegEx = new RegExp(`${escapeRegExpCharacters(namePrefix)}\\s#(\\d)`);
424-
425-
let nameIndex = 0;
426-
for (const machine of machines) {
427-
const matches = nameRegEx.exec(machine.name);
428-
const index = matches ? parseInt(matches[1]) : 0;
429-
nameIndex = index > nameIndex ? index : nameIndex;
430-
}
431-
432-
return `${namePrefix} #${nameIndex + 1}`;
433-
}
434-
435415
register<T extends IDisposable>(t: T): T {
436416
return super._register(t);
437417
}

src/vs/platform/userDataSync/common/userDataSyncIpc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ export class UserDataSyncMachinesServiceChannel implements IServerChannel {
181181
async call(context: any, command: string, args?: any): Promise<any> {
182182
switch (command) {
183183
case 'getMachines': return this.service.getMachines();
184-
case 'addCurrentMachine': return this.service.addCurrentMachine(args[0]);
184+
case 'addCurrentMachine': return this.service.addCurrentMachine();
185185
case 'removeCurrentMachine': return this.service.removeCurrentMachine();
186186
case 'renameMachine': return this.service.renameMachine(args[0], args[1]);
187187
case 'setEnablement': return this.service.setEnablement(args[0], args[1]);

src/vs/platform/userDataSync/common/userDataSyncMachines.ts

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import { Disposable } from 'vs/base/common/lifecycle';
88
import { getServiceMachineId } from 'vs/platform/serviceMachineId/common/serviceMachineId';
99
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1010
import { IFileService } from 'vs/platform/files/common/files';
11-
import { IStorageService } from 'vs/platform/storage/common/storage';
11+
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
1212
import { IUserDataSyncStoreService, IUserData, IUserDataSyncLogService, IUserDataManifest } from 'vs/platform/userDataSync/common/userDataSync';
1313
import { localize } from 'vs/nls';
1414
import { IProductService } from 'vs/platform/product/common/productService';
15+
import { PlatformToString, isWeb, Platform, platform } from 'vs/base/common/platform';
16+
import { escapeRegExpCharacters } from 'vs/base/common/strings';
1517

1618
interface IMachineData {
1719
id: string;
@@ -26,19 +28,20 @@ interface IMachinesData {
2628

2729
export type IUserDataSyncMachine = Readonly<IMachineData> & { readonly isCurrent: boolean };
2830

29-
3031
export const IUserDataSyncMachinesService = createDecorator<IUserDataSyncMachinesService>('IUserDataSyncMachinesService');
3132
export interface IUserDataSyncMachinesService {
3233
_serviceBrand: any;
3334

3435
getMachines(manifest?: IUserDataManifest): Promise<IUserDataSyncMachine[]>;
3536

36-
addCurrentMachine(name: string, manifest?: IUserDataManifest): Promise<void>;
37+
addCurrentMachine(manifest?: IUserDataManifest): Promise<void>;
3738
removeCurrentMachine(manifest?: IUserDataManifest): Promise<void>;
3839
renameMachine(machineId: string, name: string): Promise<void>;
3940
setEnablement(machineId: string, enabled: boolean): Promise<void>;
4041
}
4142

43+
const currentMachineNameKey = 'sync.currentMachineName';
44+
4245
export class UserDataSyncMachinesService extends Disposable implements IUserDataSyncMachinesService {
4346

4447
private static readonly VERSION = 1;
@@ -52,7 +55,7 @@ export class UserDataSyncMachinesService extends Disposable implements IUserData
5255
constructor(
5356
@IEnvironmentService environmentService: IEnvironmentService,
5457
@IFileService fileService: IFileService,
55-
@IStorageService storageService: IStorageService,
58+
@IStorageService private readonly storageService: IStorageService,
5659
@IUserDataSyncStoreService private readonly userDataSyncStoreService: IUserDataSyncStoreService,
5760
@IUserDataSyncLogService private readonly logService: IUserDataSyncLogService,
5861
@IProductService private readonly productService: IProductService,
@@ -67,16 +70,13 @@ export class UserDataSyncMachinesService extends Disposable implements IUserData
6770
return machineData.machines.map<IUserDataSyncMachine>(machine => ({ ...machine, ...{ isCurrent: machine.id === currentMachineId } }));
6871
}
6972

70-
async addCurrentMachine(name: string, manifest?: IUserDataManifest): Promise<void> {
73+
async addCurrentMachine(manifest?: IUserDataManifest): Promise<void> {
7174
const currentMachineId = await this.currentMachineIdPromise;
7275
const machineData = await this.readMachinesData(manifest);
73-
let currentMachine = machineData.machines.find(({ id }) => id === currentMachineId);
74-
if (currentMachine) {
75-
currentMachine.name = name;
76-
} else {
77-
machineData.machines.push({ id: currentMachineId, name });
76+
if (!machineData.machines.some(({ id }) => id === currentMachineId)) {
77+
machineData.machines.push({ id: currentMachineId, name: this.computeCurrentMachineName(machineData.machines) });
78+
await this.writeMachinesData(machineData);
7879
}
79-
await this.writeMachinesData(machineData);
8080
}
8181

8282
async removeCurrentMachine(manifest?: IUserDataManifest): Promise<void> {
@@ -90,11 +90,15 @@ export class UserDataSyncMachinesService extends Disposable implements IUserData
9090
}
9191

9292
async renameMachine(machineId: string, name: string, manifest?: IUserDataManifest): Promise<void> {
93+
const currentMachineId = await this.currentMachineIdPromise;
9394
const machineData = await this.readMachinesData(manifest);
94-
const currentMachine = machineData.machines.find(({ id }) => id === machineId);
95-
if (currentMachine) {
96-
currentMachine.name = name;
95+
const machine = machineData.machines.find(({ id }) => id === machineId);
96+
if (machine) {
97+
machine.name = name;
9798
await this.writeMachinesData(machineData);
99+
if (machineData.machines.some(({ id }) => id === currentMachineId)) {
100+
this.storageService.store(currentMachineNameKey, name, StorageScope.GLOBAL);
101+
}
98102
}
99103
}
100104

@@ -107,6 +111,23 @@ export class UserDataSyncMachinesService extends Disposable implements IUserData
107111
}
108112
}
109113

114+
private computeCurrentMachineName(machines: IMachineData[]): string {
115+
const previousName = this.storageService.get(currentMachineNameKey, StorageScope.GLOBAL);
116+
if (previousName) {
117+
return previousName;
118+
}
119+
120+
const namePrefix = `${this.productService.nameLong} (${PlatformToString(isWeb ? Platform.Web : platform)})`;
121+
const nameRegEx = new RegExp(`${escapeRegExpCharacters(namePrefix)}\\s#(\\d)`);
122+
let nameIndex = 0;
123+
for (const machine of machines) {
124+
const matches = nameRegEx.exec(machine.name);
125+
const index = matches ? parseInt(matches[1]) : 0;
126+
nameIndex = index > nameIndex ? index : nameIndex;
127+
}
128+
return `${namePrefix} #${nameIndex + 1}`;
129+
}
130+
110131
private async readMachinesData(manifest?: IUserDataManifest): Promise<IMachinesData> {
111132
this.userData = await this.readUserData(manifest);
112133
const machinesData = this.parse(this.userData);

src/vs/platform/userDataSync/electron-browser/userDataAutoSyncService.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
1212
import { IStorageService } from 'vs/platform/storage/common/storage';
1313
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1414
import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
15-
import { IProductService } from 'vs/platform/product/common/productService';
1615

1716
export class UserDataAutoSyncService extends BaseUserDataAutoSyncService {
1817

@@ -25,11 +24,10 @@ export class UserDataAutoSyncService extends BaseUserDataAutoSyncService {
2524
@IUserDataSyncAccountService authTokenService: IUserDataSyncAccountService,
2625
@ITelemetryService telemetryService: ITelemetryService,
2726
@IUserDataSyncMachinesService userDataSyncMachinesService: IUserDataSyncMachinesService,
28-
@IProductService productService: IProductService,
2927
@IStorageService storageService: IStorageService,
3028
@IEnvironmentService environmentService: IEnvironmentService,
3129
) {
32-
super(userDataSyncStoreService, userDataSyncResourceEnablementService, userDataSyncService, logService, authTokenService, telemetryService, userDataSyncMachinesService, productService, storageService, environmentService);
30+
super(userDataSyncStoreService, userDataSyncResourceEnablementService, userDataSyncService, logService, authTokenService, telemetryService, userDataSyncMachinesService, storageService, environmentService);
3331

3432
this._register(Event.debounce<string, string[]>(Event.any<string>(
3533
Event.map(electronService.onWindowFocus, () => 'windowFocus'),

src/vs/workbench/contrib/userDataSync/browser/userDataAutoSyncService.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { UserDataSyncTrigger } from 'vs/workbench/contrib/userDataSync/browser/u
1414
import { IStorageService } from 'vs/platform/storage/common/storage';
1515
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1616
import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
17-
import { IProductService } from 'vs/platform/product/common/productService';
1817

1918
export class UserDataAutoSyncService extends BaseUserDataAutoSyncService {
2019

@@ -28,11 +27,10 @@ export class UserDataAutoSyncService extends BaseUserDataAutoSyncService {
2827
@IHostService hostService: IHostService,
2928
@ITelemetryService telemetryService: ITelemetryService,
3029
@IUserDataSyncMachinesService userDataSyncMachinesService: IUserDataSyncMachinesService,
31-
@IProductService productService: IProductService,
3230
@IStorageService storageService: IStorageService,
3331
@IEnvironmentService environmentService: IEnvironmentService,
3432
) {
35-
super(userDataSyncStoreService, userDataSyncResourceEnablementService, userDataSyncService, logService, authTokenService, telemetryService, userDataSyncMachinesService, productService, storageService, environmentService);
33+
super(userDataSyncStoreService, userDataSyncResourceEnablementService, userDataSyncService, logService, authTokenService, telemetryService, userDataSyncMachinesService, storageService, environmentService);
3634

3735
this._register(Event.debounce<string, string[]>(Event.any<string>(
3836
Event.map(hostService.onDidChangeFocus, () => 'windowFocus'),

src/vs/workbench/services/userDataSync/electron-browser/userDataSyncMachinesService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class UserDataSyncMachinesService extends Disposable implements IUserDataSyncMac
2626
return this.channel.call<IUserDataSyncMachine[]>('getMachines');
2727
}
2828

29-
addCurrentMachine(name: string): Promise<void> {
30-
return this.channel.call('addCurrentMachine', [name]);
29+
addCurrentMachine(): Promise<void> {
30+
return this.channel.call('addCurrentMachine');
3131
}
3232

3333
removeCurrentMachine(): Promise<void> {

0 commit comments

Comments
 (0)