提交 42d1bb19 编写于 作者: S Sandeep Somavarapu

sync status

上级 2be66189
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IUserIdentityService, IUserDataProviderService, IUserIdentity } from 'vs/workbench/services/userData/common/userData'; import { IUserIdentityService, IUserDataProviderService, IUserIdentity, IUserDataSyncService, SyncStatus } from 'vs/workbench/services/userData/common/userData';
import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor } from 'vs/platform/statusbar/common/statusbar'; import { IStatusbarService, StatusbarAlignment, IStatusbarEntryAccessor } from 'vs/platform/statusbar/common/statusbar';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
...@@ -37,21 +37,24 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration) ...@@ -37,21 +37,24 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration)
} }
}); });
class UserDataExtensionActivationContribution extends Disposable implements IWorkbenchContribution { class AutoSyncUserDataContribution extends Disposable implements IWorkbenchContribution {
constructor( constructor(
@IConfigurationService private readonly configurationService: IConfigurationService, @IConfigurationService private readonly configurationService: IConfigurationService,
@IUserIdentityService private readonly userIdentityService: IUserIdentityService, @IUserIdentityService private readonly userIdentityService: IUserIdentityService,
@IUserDataSyncService private readonly userDataSyncService: IUserDataSyncService,
@IExtensionService private readonly extensionService: IExtensionService, @IExtensionService private readonly extensionService: IExtensionService,
) { ) {
super(); super();
this.activateUserDataExtensionsOnAutoSync(); this.autoSync();
this._register(Event.any<any>(this.userIdentityService.onDidDeregisterUserIdentities, this.configurationService.onDidChangeConfiguration)(() => this.activateUserDataExtensionsOnAutoSync())); this._register(Event.any<any>(this.userIdentityService.onDidDeregisterUserIdentities, this.configurationService.onDidChangeConfiguration)(() => this.autoSync()));
} }
private activateUserDataExtensionsOnAutoSync(): void { private async autoSync(): Promise<void> {
if (this.configurationService.getValue<boolean>('userData.autoSync')) { if (this.configurationService.getValue<boolean>('userData.autoSync')) {
this.userIdentityService.getUserIndetities().forEach(({ identity }) => this.extensionService.activateByEvent(`onUserData:${identity}`)); const userIdentity = this.userIdentityService.getUserIndetities()[0];
await this.extensionService.activateByEvent(`onUserData:${userIdentity.identity}`);
this.userDataSyncService.synchronise();
} }
} }
...@@ -63,7 +66,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon ...@@ -63,7 +66,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon
constructor( constructor(
@IUserIdentityService private userIdentityService: IUserIdentityService, @IUserIdentityService private userIdentityService: IUserIdentityService,
@IStatusbarService private statusbarService: IStatusbarService @IStatusbarService private statusbarService: IStatusbarService,
@IUserDataSyncService private userDataSyncService: IUserDataSyncService,
) { ) {
super(); super();
this.userDataSyncStatusAccessor = this.statusbarService.addEntry({ this.userDataSyncStatusAccessor = this.statusbarService.addEntry({
...@@ -73,7 +77,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon ...@@ -73,7 +77,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon
this.updateUserDataSyncStatusAccessor(); this.updateUserDataSyncStatusAccessor();
this._register(Event.any<any>( this._register(Event.any<any>(
this.userIdentityService.onDidRegisterUserIdentities, this.userIdentityService.onDidDeregisterUserIdentities, this.userIdentityService.onDidRegisterUserIdentities, this.userIdentityService.onDidDeregisterUserIdentities,
this.userIdentityService.onDidRegisterUserLoginProvider, this.userIdentityService.onDidDeregisterUserLoginProvider) this.userIdentityService.onDidRegisterUserLoginProvider, this.userIdentityService.onDidDeregisterUserLoginProvider,
this.userDataSyncService.onDidChangeSyncStatus)
(() => this.updateUserDataSyncStatusAccessor())); (() => this.updateUserDataSyncStatusAccessor()));
this._register(this.userIdentityService.onDidRegisterUserLoginProvider((identity => this.onDidRegisterUserLoginProvider(identity)))); this._register(this.userIdentityService.onDidRegisterUserLoginProvider((identity => this.onDidRegisterUserLoginProvider(identity))));
} }
...@@ -104,7 +109,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon ...@@ -104,7 +109,8 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon
return userIdentity.iconText ? `${userIdentity.iconText} ${signinText}` : signinText; return userIdentity.iconText ? `${userIdentity.iconText} ${signinText}` : signinText;
} }
if (userIdentity.iconText) { if (userIdentity.iconText) {
return `${userIdentity.iconText} ${localize('sync user data', "{0}: Sync", userIdentity.title)}`; const syncText = this.userDataSyncService.syncStatus === SyncStatus.Syncing ? localize('syncing', "{0}: Synchronosing...", userIdentity.title) : localize('sync user data', "{0}: Sync", userIdentity.title);
return `${userIdentity.iconText} ${syncText}`;
} }
return userIdentity.title; return userIdentity.title;
} }
...@@ -112,7 +118,7 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon ...@@ -112,7 +118,7 @@ class UserDataSyncStatusContribution extends Disposable implements IWorkbenchCon
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench); const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
workbenchRegistry.registerWorkbenchContribution(UserDataSyncStatusContribution, LifecyclePhase.Starting); workbenchRegistry.registerWorkbenchContribution(UserDataSyncStatusContribution, LifecyclePhase.Starting);
workbenchRegistry.registerWorkbenchContribution(UserDataExtensionActivationContribution, LifecyclePhase.Ready); workbenchRegistry.registerWorkbenchContribution(AutoSyncUserDataContribution, LifecyclePhase.Ready);
export class ShowUserDataSyncActions extends Action { export class ShowUserDataSyncActions extends Action {
......
...@@ -89,10 +89,19 @@ export interface IUserDataExtension { ...@@ -89,10 +89,19 @@ export interface IUserDataExtension {
version?: string; version?: string;
} }
export enum SyncStatus {
Syncing = 1,
SyncDone
}
export interface IUserDataSyncService { export interface IUserDataSyncService {
_serviceBrand: any; _serviceBrand: any;
readonly syncStatus: SyncStatus;
readonly onDidChangeSyncStatus: Event<SyncStatus>;
synchronise(): Promise<void>; synchronise(): Promise<void>;
getExtensions(): Promise<IUserDataExtension[]>; getExtensions(): Promise<IUserDataExtension[]>;
......
...@@ -3,22 +3,41 @@ ...@@ -3,22 +3,41 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IUserDataSyncService, IUserDataProviderService, IUserDataExtension } from 'vs/workbench/services/userData/common/userData'; import { IUserDataSyncService, IUserDataProviderService, IUserDataExtension, SyncStatus } from 'vs/workbench/services/userData/common/userData';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { Emitter, Event } from 'vs/base/common/event';
import { timeout } from 'vs/base/common/async';
export class UserDataSyncService extends Disposable implements IUserDataSyncService { export class UserDataSyncService extends Disposable implements IUserDataSyncService {
_serviceBrand: any; _serviceBrand: any;
private _onDidChangeSyncStatus: Emitter<SyncStatus> = this._register(new Emitter<SyncStatus>());
readonly onDidChangeSyncStatus: Event<SyncStatus> = this._onDidChangeSyncStatus.event;
private _syncStatus: SyncStatus = SyncStatus.SyncDone;
get syncStatus(): SyncStatus {
return this._syncStatus;
}
set syncStatus(status: SyncStatus) {
if (this._syncStatus !== status) {
this._syncStatus = status;
this._onDidChangeSyncStatus.fire(status);
}
}
constructor( constructor(
@IUserDataProviderService private readonly userDataProviderService: IUserDataProviderService @IUserDataProviderService private readonly userDataProviderService: IUserDataProviderService
) { ) {
super(); super();
} }
synchronise(): Promise<void> {
return Promise.resolve(); async synchronise(): Promise<void> {
this.syncStatus = SyncStatus.Syncing;
await timeout(5000);
this.syncStatus = SyncStatus.SyncDone;
} }
getExtensions(): Promise<IUserDataExtension[]> { getExtensions(): Promise<IUserDataExtension[]> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册