internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncProviderFactory syncProviderFactory, string syncStateName, Func <SyncStateStorage, StoreObject, FolderSyncStateMetadata, SyncStateInfo, ISyncProviderFactory, bool, ISyncLogger, FolderSyncState> creator, ISyncLogger syncLogger = null) { ArgumentValidator.ThrowIfNullOrEmpty("syncStateName", syncStateName); SyncStateInfo syncStateInfo = new FolderSyncStateInfo(syncStateName); StoreObject syncStateStoreObject = SyncState.GetSyncStateStoreObject(syncStateStorage, syncStateParentFolder, syncStateInfo, syncLogger, new PropertyDefinition[] { InternalSchema.SyncFolderSourceKey }); if (syncStateStoreObject == null) { return(null); } byte[] valueOrDefault = syncStateStoreObject.GetValueOrDefault <byte[]>(InternalSchema.SyncFolderSourceKey); if (syncProviderFactory != null) { try { syncProviderFactory.SetCollectionIdFromBytes(valueOrDefault); } catch (ArgumentException innerException) { syncStateStorage.DeleteFolderSyncState(syncStateName); syncStateStorage.DeviceMetadata.TryRemove(syncStateName, null); throw new CorruptSyncStateException(ServerStrings.ExSyncStateCorrupted(syncStateName), innerException); } } FolderSyncStateMetadata folderSyncStateMetadata = FolderSyncState.GetFolderSyncStateMetadata(syncStateStorage, syncStateStoreObject.Session as MailboxSession, syncStateName, syncLogger); if (creator == null) { return(new FolderSyncState(syncStateStorage, syncStateStoreObject, folderSyncStateMetadata, syncStateInfo, syncProviderFactory, false, syncLogger)); } return(creator(syncStateStorage, syncStateStoreObject, folderSyncStateMetadata, syncStateInfo, syncProviderFactory, false, syncLogger)); }
public FolderSyncState CreateFolderSyncState(ISyncProviderFactory syncProviderFactory, string syncFolderId) { this.CheckDisposed("CreateFolderSyncState"); this.syncLogger.Information <int>(ExTraceGlobals.SyncTracer, (long)this.GetHashCode(), "SyncStateStorage::CreateFolderSyncState. Hashcode = {0}", this.GetHashCode()); ArgumentValidator.ThrowIfNull("syncProviderFactory", syncProviderFactory); ArgumentValidator.ThrowIfNull("syncFolderId", syncFolderId); return(FolderSyncState.CreateSyncState(this, this.folder, syncProviderFactory, syncFolderId, this.syncLogger)); }
public FolderSyncState GetFolderSyncState(ISyncProviderFactory syncProviderFactory, string syncFolderName, Func <SyncStateStorage, StoreObject, FolderSyncStateMetadata, SyncStateInfo, ISyncProviderFactory, bool, ISyncLogger, FolderSyncState> creator) { this.CheckDisposed("GetFolderSyncState"); this.syncLogger.Information <int>(ExTraceGlobals.SyncTracer, (long)this.GetHashCode(), "SyncStateStorage::GetFolderSyncState. Hashcode = {0}", this.GetHashCode()); if (syncProviderFactory == null && string.IsNullOrEmpty(syncFolderName)) { throw new ArgumentNullException("syncProviderFactory and syncFolderName"); } FolderSyncState result; try { result = (string.IsNullOrEmpty(syncFolderName) ? FolderSyncState.GetSyncState(this, this.folder, syncProviderFactory, creator, this.syncLogger) : FolderSyncState.GetSyncState(this, this.folder, syncProviderFactory, syncFolderName, creator, this.syncLogger)); } catch (ObjectNotFoundException arg) { this.syncLogger.TraceDebug <string, ObjectNotFoundException>(ExTraceGlobals.SyncTracer, (long)this.GetHashCode(), "[SyncStateStorage.GetFolderSyncState] Hark! SyncState '{0}' was not found. Exception: {1}", (syncFolderName == null) ? "<Null>" : syncFolderName, arg); result = null; } return(result); }
protected static StoreObject GetSyncStateStoreObject(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, SyncStateInfo syncStateInfo, byte[] identBytes, ISyncLogger syncLogger, params PropertyDefinition[] propsToReturn) { FolderSyncStateMetadata folderSyncStateMetadata = FolderSyncState.GetFolderSyncStateMetadata(syncStateStorage, syncStateParentFolder.Session as MailboxSession, syncStateInfo.UniqueName, syncLogger); if (folderSyncStateMetadata == null) { return(null); } StoreObject storeObject = null; if (folderSyncStateMetadata.StorageType != StorageType.Folder) { if (folderSyncStateMetadata.StorageType != StorageType.Item) { if (folderSyncStateMetadata.StorageType != StorageType.DirectItem) { goto IL_85; } } try { storeObject = Microsoft.Exchange.Data.Storage.Item.Bind(syncStateParentFolder.Session, folderSyncStateMetadata.ItemSyncStateId, SyncState.AppendAdditionalProperties(propsToReturn)); ((Item)storeObject).OpenAsReadWrite(); return(storeObject); } catch { storeObject.Dispose(); throw; } IL_85: throw new InvalidOperationException("Unsupported storage type for sync state"); } storeObject = Folder.Bind(syncStateParentFolder.Session, folderSyncStateMetadata.FolderSyncStateId, SyncState.AppendAdditionalProperties(propsToReturn)); return(storeObject); }
protected override void Load(bool reloadFromBackend, params PropertyDefinition[] additionalPropsToLoad) { base.Load(reloadFromBackend, additionalPropsToLoad); FolderSyncState.handleCustomDataVersioning(this); }
internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncProviderFactory syncProviderFactory, string syncStateName, ISyncLogger syncLogger = null) { return(FolderSyncState.GetSyncState(syncStateStorage, syncStateParentFolder, syncProviderFactory, syncStateName, null, syncLogger)); }
internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, string syncFolderId, ISyncLogger syncLogger = null) { return(FolderSyncState.GetSyncState(syncStateStorage, syncStateParentFolder, null, syncFolderId, syncLogger)); }
public Dictionary <StoreObjectId, string> Upgrade(FolderSyncState syncStateState, Dictionary <string, CommonNode> mappingOldInfo, Folder sourceFolder, MailboxSession mailboxSession) { this.syncState = syncStateState; return(this.ProcessCommand(mappingOldInfo, sourceFolder, mailboxSession)); }