Esempio n. 1
0
        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));
        }
Esempio n. 2
0
 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));
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 protected override void Load(bool reloadFromBackend, params PropertyDefinition[] additionalPropsToLoad)
 {
     base.Load(reloadFromBackend, additionalPropsToLoad);
     FolderSyncState.handleCustomDataVersioning(this);
 }
Esempio n. 6
0
 internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncProviderFactory syncProviderFactory, string syncStateName, ISyncLogger syncLogger = null)
 {
     return(FolderSyncState.GetSyncState(syncStateStorage, syncStateParentFolder, syncProviderFactory, syncStateName, null, syncLogger));
 }
Esempio n. 7
0
 internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, string syncFolderId, ISyncLogger syncLogger = null)
 {
     return(FolderSyncState.GetSyncState(syncStateStorage, syncStateParentFolder, null, syncFolderId, syncLogger));
 }
Esempio n. 8
0
 public Dictionary <StoreObjectId, string> Upgrade(FolderSyncState syncStateState, Dictionary <string, CommonNode> mappingOldInfo, Folder sourceFolder, MailboxSession mailboxSession)
 {
     this.syncState = syncStateState;
     return(this.ProcessCommand(mappingOldInfo, sourceFolder, mailboxSession));
 }