public static SyncStateStorage Bind(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession); SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); DeviceSyncStateMetadata device = userSyncStateMetadata.GetDevice(mailboxSession, deviceIdentity, syncLogger); if (device != null) { return(SyncStateStorage.GetSyncStateStorage(mailboxSession, device, syncLogger)); } return(null); }
public bool MoveNext() { this.CheckDisposed("MoveNext"); if (this.current != null) { this.current.Dispose(); this.current = null; } if (this.devices == null || this.index >= this.devices.Count) { return(false); } this.index++; if (this.index >= this.devices.Count) { return(false); } this.current = SyncStateStorage.GetSyncStateStorage(this.mailboxSession, this.devices[this.index], this.syncLogger); return(this.current != null || this.MoveNext()); }
public static SyncStateStorage Create(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, StateStorageFeatures features, bool onlySetPropsIfAlreadyExists, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } EnumValidator.ThrowIfInvalid <StateStorageFeatures>(features, "features"); SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); DeviceSyncStateMetadata deviceSyncStateMetadata = userSyncStateMetadata.GetDevice(mailboxSession, deviceIdentity, syncLogger); SyncStateStorage syncStateStorage = (deviceSyncStateMetadata == null) ? null : SyncStateStorage.GetSyncStateStorage(mailboxSession, deviceSyncStateMetadata, syncLogger); if (syncStateStorage == null || onlySetPropsIfAlreadyExists) { Folder folder = null; SyncStateStorage syncStateStorage2 = null; bool flag = false; try { folder = SyncStateStorage.CreateAndSaveFolder(mailboxSession, mailboxSession.GetDefaultFolderId(DefaultFolderType.SyncRoot), CreateMode.OpenIfExists, deviceIdentity.CompositeKey, null, (syncStateStorage == null) ? null : syncStateStorage.folder, syncLogger); if (deviceSyncStateMetadata != null && deviceSyncStateMetadata.DeviceFolderId != folder.Id.ObjectId) { userSyncStateMetadata.TryRemove(deviceSyncStateMetadata.Id, syncLogger); deviceSyncStateMetadata = null; } if (deviceSyncStateMetadata == null) { deviceSyncStateMetadata = new DeviceSyncStateMetadata(mailboxSession, folder.Id.ObjectId, syncLogger); deviceSyncStateMetadata = userSyncStateMetadata.GetOrAdd(deviceSyncStateMetadata); } syncStateStorage2 = new SyncStateStorage(folder, deviceSyncStateMetadata, syncLogger); flag = true; return(syncStateStorage2); } finally { if (!flag) { if (syncStateStorage2 != null) { syncStateStorage2.Dispose(); syncStateStorage2 = null; } if (folder != null) { folder.Dispose(); folder = null; } } } return(syncStateStorage); } return(syncStateStorage); }