Exemplo n.º 1
0
 private void ProcessSyncStateFolders(Folder deviceFolder, ISyncLogger syncLogger)
 {
     using (QueryResult queryResult = deviceFolder.FolderQuery(FolderQueryFlags.None, null, null, DeviceSyncStateMetadata.NullSyncPropertiesFolders))
     {
         for (;;)
         {
             IStorePropertyBag[] propertyBags = queryResult.GetPropertyBags(100);
             if (propertyBags == null || propertyBags.Length == 0)
             {
                 break;
             }
             foreach (IStorePropertyBag propertyBag in propertyBags)
             {
                 SyncStateMetadata metadataFromPropertyBag = this.GetMetadataFromPropertyBag(deviceFolder.Session as MailboxSession, propertyBag, syncLogger);
                 if (metadataFromPropertyBag != null)
                 {
                     syncLogger.TraceDebug <SyncStateMetadata>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.ProcessSyncStateFolders] Found SyncState: {0}", metadataFromPropertyBag);
                     this.syncStateMap.TryAdd(metadataFromPropertyBag.Name, metadataFromPropertyBag);
                 }
                 else
                 {
                     syncLogger.TraceDebug <DeviceIdentity>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.ProcessSyncStateFolders] Discovered unusable sync state for device {0}", this.Id);
                 }
             }
         }
     }
 }
        public UserSyncStateMetadata Get(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            UserSyncStateMetadata userSyncStateMetadata = null;

            if (!this.cache.TryGetValue(mailboxSession.MailboxGuid, out userSyncStateMetadata))
            {
                syncLogger.TraceDebug <Guid>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[UserSyncStateMetadataCache.Get] Cache miss for mailbox {0}", mailboxSession.MailboxGuid);
                userSyncStateMetadata = new UserSyncStateMetadata(mailboxSession);
                lock (this.instanceLock)
                {
                    UserSyncStateMetadata result = null;
                    if (this.cache.TryGetValue(mailboxSession.MailboxGuid, out result))
                    {
                        syncLogger.TraceDebug(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[UserSyncStateMetadataCache.Get] Second TryGet returned cached value.  Discarding new one.");
                        return(result);
                    }
                    this.cache.TryAddSliding(mailboxSession.MailboxGuid, userSyncStateMetadata, UserSyncStateMetadataCache.CacheEntrySlidingLiveTimeEntry.Value);
                }
                return(userSyncStateMetadata);
            }
            syncLogger.TraceDebug <SmtpAddress>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[UserSyncStateMetadataCache.Get] Cache hit for user: {0}", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress);
            if (userSyncStateMetadata.MailboxGuid != mailboxSession.MailboxGuid)
            {
                throw new InvalidOperationException(string.Format("[UserSyncStateMetadataCache.Get] cached userState for mailbox {0} was keyed off incorrect mailbox {1}", userSyncStateMetadata.MailboxGuid, mailboxSession.MailboxGuid));
            }
            return(userSyncStateMetadata);
        }
Exemplo n.º 3
0
 private void ProcessSyncStateItems(Folder deviceFolder, ISyncLogger syncLogger)
 {
     using (QueryResult queryResult = deviceFolder.ItemQuery(ItemQueryType.None, null, null, DeviceSyncStateMetadata.NullSyncPropertiesItems))
     {
         for (;;)
         {
             IStorePropertyBag[] propertyBags = queryResult.GetPropertyBags(100);
             if (propertyBags == null || propertyBags.Length == 0)
             {
                 break;
             }
             foreach (IStorePropertyBag storePropertyBag in propertyBags)
             {
                 string            displayName             = (string)storePropertyBag.TryGetProperty(ItemSchema.Subject);
                 SyncStateMetadata metadataFromPropertyBag = this.GetMetadataFromPropertyBag(storePropertyBag, displayName, syncLogger);
                 if (metadataFromPropertyBag != null)
                 {
                     StoreObjectId objectId = ((VersionedId)storePropertyBag.TryGetProperty(ItemSchema.Id)).ObjectId;
                     metadataFromPropertyBag.FolderSyncStateId = null;
                     metadataFromPropertyBag.ItemSyncStateId   = objectId;
                     syncLogger.TraceDebug <SyncStateMetadata>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.ProcessSyncStateItems] Found Item SyncState: {0}", metadataFromPropertyBag);
                     this.syncStateMap.TryAdd(metadataFromPropertyBag.Name, metadataFromPropertyBag);
                 }
                 else
                 {
                     syncLogger.TraceDebug <DeviceIdentity>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.ProcessSyncStateItems] Discovered unusable sync state for device {0}", this.Id);
                 }
             }
         }
     }
 }
Exemplo n.º 4
0
        public DiffProcessor(IWorkerConfiguration workerConfig, ISynchronization sync, ISvc source, ISvc target, IBlackMirrorHttpClient httpClient, ISyncLogger syncLogger, IUser defaultPushUser)
        {
            //this.mirror = mirror;
            this.sync            = sync;
            this.source          = source;
            this.target          = target;
            this.httpClient      = httpClient;
            this.syncLogger      = syncLogger;
            this.defaultPushUser = defaultPushUser;
            this.ignoredFiles    = sync.Mirror.IgnoredFiles?.ToList() ?? new List <string>();
            this.ignoredFiles.AddRange(new[]
            {
                @"^\.svn\\?.*$",
                @"(^\.git\\.*$)|(^\.git$)",
                @"^.*\\node_modules\\.*$",
                @"^.*\\bower_components\\.*$",
                @"^packages\\?.*$",
                @"^.*\.dll$",
                @"^.*\.pdb",
                @"^.*\.nupkg",
                @"^.*\.tar",
                @"^.*\.tgz",
                @"^.*\.jar",
                @"^.*\.exe",
            });

            this.retriever            = new UserRetriever(workerConfig);
            this.timeoutMaxRetryCount = workerConfig.TimeoutMaxRetryCount;
        }
 public override ISyncProvider CreateSyncProvider(Folder folder, ISyncLogger syncLogger = null)
 {
     if (this.UseNewProvider)
     {
         return(new FirstTimeSyncProvider(folder, this.trackReadFlagChanges, this.trackAssociatedMessageChanges, this.trackConversations, this.allowTableRestrict, false));
     }
     return(new MailboxSyncProvider(folder, this.trackReadFlagChanges, this.trackAssociatedMessageChanges, false, this.trackConversations, this.allowTableRestrict, false, AirSyncDiagnostics.GetSyncLogger()));
 }
Exemplo n.º 6
0
            public SyncStateStorageEnumerator(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
            {
                this.syncLogger = (syncLogger ?? TracingLogger.Singleton);
                UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, this.syncLogger);

                this.devices        = userSyncStateMetadata.GetAllDevices(mailboxSession, true, this.syncLogger);
                this.index          = -1;
                this.mailboxSession = mailboxSession;
            }
Exemplo n.º 7
0
 public Svn(ISynchronization sync, ISvcRepository repository, string repoPath, string ownerName, string ownerPassword, ISyncLogger syncLogger)
 {
     this.sync          = sync;
     this.repository    = repository;
     this.repoPath      = repoPath;
     this.username      = ownerName;
     this.ownerPassword = ownerPassword;
     this.syncLogger    = syncLogger;
 }
        public SqliteSyncProvider(SqliteSyncConfiguration configuration, ProviderMode providerMode = ProviderMode.Bidirectional, ISyncLogger logger = null)
        {
            Configuration = configuration;
            ProviderMode  = providerMode;
            _logger       = logger;

            if (configuration.Tables.Any(_ => _.SyncDirection != SyncDirection.UploadAndDownload) &&
                providerMode == ProviderMode.Bidirectional)
            {
                throw new InvalidOperationException("One or more table with sync direction different from Bidirectional: please must specify the provider mode to Local or Remote");
            }
        }
        public DeviceSyncStateMetadata TryRemove(DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            DeviceSyncStateMetadata result;
            bool arg = this.devices.TryRemove(deviceIdentity, out result);

            syncLogger.TraceDebug <DeviceIdentity, bool>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[UserSyncStateMetadata.TryRemove] Tried to remove '{0}'.  Success? {1}", deviceIdentity, arg);
            return(result);
        }
Exemplo n.º 10
0
        internal static Folder GetSyncFolderRoot(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            StoreObjectId storeObjectId = mailboxSession.GetDefaultFolderId(DefaultFolderType.SyncRoot);

            if (storeObjectId == null)
            {
                syncLogger.TraceDebug <Guid>(ExTraceGlobals.SyncTracer, 0L, "[SyncStateStorage.GetSyncFolderRoot] ExchangeSyncData folder missing for mailbox {0}.  Creating it now.", mailboxSession.MailboxGuid);
                storeObjectId = mailboxSession.CreateDefaultFolder(DefaultFolderType.SyncRoot);
            }
            return(Folder.Bind(mailboxSession, storeObjectId, SyncStateStorage.loggingEnabledAsArray));
        }
        public virtual ISyncProvider CreateSyncProvider(ISyncLogger syncLogger = null)
        {
            Folder folder;

            if (this.folder != null)
            {
                folder      = this.folder;
                this.folder = null;
            }
            else
            {
                folder = Folder.Bind(this.storeSession, this.folderId);
            }
            return(this.CreateSyncProvider(folder, this.trackReadFlagChanges, this.trackAssociatedMessageChanges, this.returnNewestChangesFirst, this.trackConversations, this.allowTableRestrict, true, syncLogger));
        }
Exemplo n.º 12
0
 public Git(ISynchronization sync, ISvcRepository repository, string repoPath, string userName, string password, string refspec, ISyncLogger syncLogger)
 {
     this.credentials = new UsernamePasswordCredentials {
         Username = userName, Password = password
     };
     this.sync       = sync;
     this.repository = repository;
     this.repoPath   = repoPath;
     this.userName   = userName;
     this.refspec    = refspec;
     this.syncLogger = syncLogger;
     if (Repository.IsValid(repoPath))
     {
         this.repo = new Repository(repoPath);
     }
 }
Exemplo n.º 13
0
        public SyncStateMetadata TryRemove(string name, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            SyncStateMetadata syncStateMetadata;
            bool arg = this.syncStateMap.TryRemove(name, out syncStateMetadata);

            syncLogger.TraceDebug <string, bool>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.TryRemove] Removing '{0}'.  Success? {1}", name, arg);
            FolderSyncStateMetadata folderSyncStateMetadata = syncStateMetadata as FolderSyncStateMetadata;

            if (folderSyncStateMetadata != null && folderSyncStateMetadata.IPMFolderId != null)
            {
                this.ipmToFolderSyncStateMap.TryRemove(folderSyncStateMetadata.IPMFolderId, out folderSyncStateMetadata);
            }
            return(syncStateMetadata);
        }
        public override ISyncProvider CreateSyncProvider(ISyncLogger syncLogger = null)
        {
            Folder folder;

            if (this.folder != null)
            {
                folder      = this.folder;
                this.folder = null;
            }
            else
            {
                folder = Folder.Bind(this.storeSession, this.folderId);
            }
            if (this.UseNewProvider)
            {
                return(new FirstTimeSyncProvider(folder, this.trackReadFlagChanges, this.trackAssociatedMessageChanges, this.trackConversations, this.allowTableRestrict));
            }
            return(new MailboxSyncProvider(folder, this.trackReadFlagChanges, this.trackAssociatedMessageChanges, false, this.trackConversations, this.allowTableRestrict, AirSyncDiagnostics.GetSyncLogger()));
        }
Exemplo n.º 15
0
        private Folder GetSyncRootFolder(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            Folder result = null;

            try
            {
                result = Folder.Bind(mailboxSession, DefaultFolderType.SyncRoot);
            }
            catch (ObjectNotFoundException)
            {
                syncLogger.TraceDebug <SmtpAddress>(ExTraceGlobals.SyncTracer, (long)this.GetHashCode(), "[UserSyncStateMetadata.GetDevice] Missing SyncRoot folder for mailbox {0}.  Recreating.", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress);
                mailboxSession.CreateDefaultFolder(DefaultFolderType.SyncRoot);
                result = Folder.Bind(mailboxSession, DefaultFolderType.SyncRoot);
            }
            return(result);
        }
Exemplo n.º 16
0
 public static bool GetMailboxLoggingEnabled(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
 {
     if (syncLogger == null)
     {
         syncLogger = TracingLogger.Singleton;
     }
     if (mailboxSession.IsConnected)
     {
         StoreObjectId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.SyncRoot);
         if (defaultFolderId == null)
         {
             return(false);
         }
         using (Folder folder = Folder.Bind(mailboxSession, defaultFolderId, SyncStateStorage.loggingEnabledAsArray))
         {
             return(SyncStateStorage.IsMailboxLoggingEnabled(folder));
         }
     }
     syncLogger.TraceDebug(ExTraceGlobals.SyncProcessTracer, 0L, "[SyncStateStorage.GetMailboxLoggingEnabled] MailboxSession was not connected - defaulting to false since we can't write to the mailbox.");
     return(false);
 }
Exemplo n.º 17
0
        public SyncStateMetadata TryAdd(SyncStateMetadata syncStateMetadata, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            SyncStateMetadata syncStateMetadata2 = this.syncStateMap.GetOrAdd(syncStateMetadata.Name, syncStateMetadata);

            if (syncStateMetadata.GetType().IsSubclassOf(syncStateMetadata2.GetType()))
            {
                syncLogger.TraceDebug <string, string>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.TryAdd] New sync state metadata instance ({0}) is subclass of cached one ({1}).  Replacing.", syncStateMetadata.GetType().Name, syncStateMetadata2.GetType().Name);
                this.syncStateMap[syncStateMetadata.Name] = syncStateMetadata;
                syncStateMetadata2 = syncStateMetadata;
            }
            FolderSyncStateMetadata folderSyncStateMetadata = syncStateMetadata2 as FolderSyncStateMetadata;

            if (folderSyncStateMetadata != null && folderSyncStateMetadata.IPMFolderId != null)
            {
                syncLogger.TraceDebug <string>(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "[DeviceSyncStateMetadata.TryAdd] Encountered FolderSyncStateMetadata instance for '{0}'.  Adding source key to reverse mapping.", syncStateMetadata.Name);
                this.ipmToFolderSyncStateMap[folderSyncStateMetadata.IPMFolderId] = folderSyncStateMetadata;
            }
            return(syncStateMetadata2);
        }
Exemplo n.º 18
0
        public static FolderHierarchyChangeDetector.MailboxChangesManifest RunICSManifestSync(bool catchup, FolderHierarchyChangeDetector.SyncHierarchyManifestState hierState, MailboxSession mailboxSession, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            syncLogger.TraceDebug <SmtpAddress, bool>(ExTraceGlobals.SyncProcessTracer, 0L, "[FolderHierarchyChangeDetector.RunICSManifestSync] Checking for folder hierarhcy changes for Mailbox: {0}.  Catchup? {1}", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress, catchup);
            MapiStore _ContainedMapiStore = mailboxSession.__ContainedMapiStore;

            FolderHierarchyChangeDetector.MailboxChangesManifest    mailboxChangesManifest = new FolderHierarchyChangeDetector.MailboxChangesManifest();
            FolderHierarchyChangeDetector.ManifestHierarchyCallback iMapiManifestCallback  = new FolderHierarchyChangeDetector.ManifestHierarchyCallback(catchup, mailboxChangesManifest);
            try
            {
                using (MapiFolder ipmSubtreeFolder = _ContainedMapiStore.GetIpmSubtreeFolder())
                {
                    SyncConfigFlags syncConfigFlags = SyncConfigFlags.ManifestHierReturnDeletedEntryIds;
                    int             serverVersion   = mailboxSession.MailboxOwner.MailboxInfo.Location.ServerVersion;
                    if ((serverVersion >= Server.E14MinVersion && serverVersion < Server.E15MinVersion) || (long)serverVersion >= FolderHierarchyChangeDetector.E15MinVersionSupportsOnlySpecifiedPropsForHierarchy)
                    {
                        syncConfigFlags |= SyncConfigFlags.OnlySpecifiedProps;
                    }
                    using (MapiHierarchyManifestEx mapiHierarchyManifestEx = ipmSubtreeFolder.CreateExportHierarchyManifestEx(syncConfigFlags, hierState.IdsetGiven, hierState.CnsetSeen, iMapiManifestCallback, FolderHierarchyChangeDetector.PropsToFetch, null))
                    {
                        while (mapiHierarchyManifestEx.Synchronize() != ManifestStatus.Done)
                        {
                        }
                        byte[] idSetGiven;
                        byte[] cnetSeen;
                        mapiHierarchyManifestEx.GetState(out idSetGiven, out cnetSeen);
                        syncLogger.TraceDebug <SmtpAddress, int, int>(ExTraceGlobals.SyncProcessTracer, 0L, "[FolderHierarchyChangeDetector.RunICSManifestSync] Updating ICS state for mailbox: '{0}'.  Change Count: {1}, Delete Count: {2}", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress, mailboxChangesManifest.ChangedFolders.Count, mailboxChangesManifest.DeletedFolders.Count);
                        hierState.Update(idSetGiven, cnetSeen);
                    }
                }
            }
            catch (MapiPermanentException arg)
            {
                syncLogger.TraceDebug <SmtpAddress, MapiPermanentException>(ExTraceGlobals.SyncProcessTracer, 0L, "[FolderHierarchyChangeDetector.RunICSManifestSync] Caught MapiPermanentException when determining folder ICS changes for mailbox: {0}.  Exception: {1}", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress, arg);
                return(null);
            }
            catch (MapiRetryableException arg2)
            {
                syncLogger.TraceDebug <SmtpAddress, MapiRetryableException>(ExTraceGlobals.SyncProcessTracer, 0L, "[FolderHierarchyChangeDetector.RunICSManifestSync] Caught MapiRetryableException when determining folder ICS changes for mailbox: {0}.  Exception: {1}", mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress, arg2);
                return(null);
            }
            return(mailboxChangesManifest);
        }
Exemplo n.º 19
0
 // Token: 0x0600170D RID: 5901 RVA: 0x0008A30F File Offset: 0x0008850F
 public ISyncProvider CreateSyncProvider(ISyncLogger syncLogger = null)
 {
     return(new RecipientInfoCacheSyncProvider(this.mailboxSession, this.maxEntries));
 }
 protected FolderHierarchySyncState(SyncStateStorage syncStateStorage, StoreObject storeObject, SyncStateMetadata syncStateMetadata, SyncStateInfo syncStateInfo, bool newSyncState, ISyncLogger syncLogger = null) : base(syncStateStorage, storeObject, syncStateMetadata, syncStateInfo, newSyncState, syncLogger)
 {
 }
Exemplo n.º 21
0
        public static SyncStateRootStorage GetOrCreateSyncStateRootStorage(MailboxSession mailboxSession, string protocol, ISyncLogger syncLogger = null)
        {
            if (mailboxSession == null)
            {
                throw new ArgumentNullException("mailboxSession");
            }
            if (protocol == null)
            {
                throw new ArgumentNullException("protocol");
            }
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            string           protocol2        = protocol + "Root";
            DeviceIdentity   deviceIdentity   = new DeviceIdentity("RootDeviceId", "RootDeviceType", protocol2);
            SyncStateStorage syncStateStorage = SyncStateStorage.Bind(mailboxSession, deviceIdentity, syncLogger);

            if (syncStateStorage == null)
            {
                syncStateStorage = SyncStateStorage.Create(mailboxSession, deviceIdentity, StateStorageFeatures.ContentState, syncLogger);
            }
            return(new SyncStateRootStorage(syncStateStorage));
        }
 internal static FolderHierarchySyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncLogger syncLogger = null)
 {
     return(FolderHierarchySyncState.GetSyncState(syncStateStorage, syncStateParentFolder, null, syncLogger));
 }
        internal static FolderHierarchySyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, StoreObjectId storeObjectId, ISyncLogger syncLogger = null)
        {
            SyncStateInfo syncStateInfo        = new FolderHierarchySyncStateInfo();
            StoreObject   syncStateStoreObject = SyncState.GetSyncStateStoreObject(syncStateStorage, syncStateParentFolder, syncStateInfo, syncLogger, new PropertyDefinition[0]);

            if (syncStateStoreObject == null)
            {
                return(null);
            }
            SyncStateMetadata syncState = syncStateStorage.DeviceMetadata.GetSyncState(syncStateParentFolder.Session as MailboxSession, syncStateInfo.UniqueName, syncLogger);

            return(new FolderHierarchySyncState(syncStateStorage, syncStateStoreObject, syncState, syncStateInfo, false, syncLogger));
        }
Exemplo n.º 24
0
        public static bool DeleteSyncStateStorage(MailboxSession mailboxSession, StoreObjectId deviceFolderId, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession);
            ArgumentValidator.ThrowIfNull("folderId", deviceFolderId);
            bool result = false;

            SyncStateTypeFactory.GetInstance().RegisterInternalBuilders();
            UserSyncStateMetadata    userSyncStateMetadata    = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger);
            AggregateOperationResult aggregateOperationResult = mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[]
            {
                deviceFolderId
            });

            syncLogger.Information <string>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Result = {0}", aggregateOperationResult.OperationResult.ToString());
            userSyncStateMetadata.TryRemove(deviceIdentity, syncLogger);
            List <DeviceSyncStateMetadata> allDevices = userSyncStateMetadata.GetAllDevices(mailboxSession, false, syncLogger);

            if (allDevices != null)
            {
                foreach (DeviceSyncStateMetadata deviceSyncStateMetadata in allDevices)
                {
                    syncLogger.Information <DeviceIdentity, DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Found device folder '{0}', Looking for folder '{1}'", deviceSyncStateMetadata.Id, deviceIdentity);
                    if (deviceSyncStateMetadata.Id.Equals(deviceIdentity))
                    {
                        try
                        {
                            aggregateOperationResult = mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[]
                            {
                                deviceSyncStateMetadata.DeviceFolderId
                            });
                            syncLogger.Information <DeviceIdentity, DeviceIdentity, string>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. try Deleting SyncState folder again.folderName:{0}, originalFolder:{1}, result:{2}", deviceSyncStateMetadata.Id, deviceIdentity, aggregateOperationResult.OperationResult.ToString());
                            continue;
                        }
                        catch
                        {
                            syncLogger.Information(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Error deleting the sync state folder.");
                            continue;
                        }
                    }
                    if (deviceSyncStateMetadata.Id.IsProtocol("AirSync"))
                    {
                        result = true;
                        break;
                    }
                }
            }
            return(result);
        }
        internal static FolderHierarchySyncState CreateSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            SyncStateInfo syncStateInfo = new FolderHierarchySyncStateInfo();
            StoreObject   storeObject   = SyncState.CreateSyncStateStoreObject(syncStateStorage, syncStateInfo, syncStateParentFolder, null, null, syncLogger);

            if (syncStateStorage.DeviceMetadata.TryRemove(syncStateInfo.UniqueName, syncLogger) != null)
            {
                syncLogger.TraceDebug <DeviceIdentity, string>(ExTraceGlobals.SyncTracer, 0L, "[FolderHierarchySyncState.CreateSyncState] Removed stale cached sync state metadata for device {0}, sync state {1}", syncStateStorage.DeviceMetadata.Id, syncStateInfo.UniqueName);
            }
            SyncStateMetadata syncStateMetadata = (storeObject is Item) ? new SyncStateMetadata(syncStateStorage.DeviceMetadata, syncStateInfo.UniqueName, syncStateStorage.SaveOnDirectItems ? null : storeObject.ParentId, storeObject.Id.ObjectId) : new SyncStateMetadata(syncStateStorage.DeviceMetadata, syncStateInfo.UniqueName, storeObject.Id.ObjectId, null);

            return(new FolderHierarchySyncState(syncStateStorage, storeObject, syncStateMetadata, syncStateInfo, true, syncLogger));
        }
Exemplo n.º 26
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="syncLogger">The logger to use when a batch has finished.</param>
 /// <remarks>The <paramref name="syncLogger"/> is stored in a static variable, so you can't
 /// have two batch loggers running at the same time and expect them to log to different loggers</remarks>
 public BatchLogger(ISyncLogger syncLogger)
 {
     _syncLogger = syncLogger;
 }
Exemplo n.º 27
0
 public static SyncStateStorage.SyncStateStorageEnumerator GetEnumerator(MailboxSession mailboxSession, ISyncLogger syncLogger = null)
 {
     return(new SyncStateStorage.SyncStateStorageEnumerator(mailboxSession, syncLogger));
 }
Exemplo n.º 28
0
        private static SyncStateStorage GetSyncStateStorage(MailboxSession session, DeviceSyncStateMetadata deviceMetadata, ISyncLogger syncLogger = null)
        {
            if (deviceMetadata == null)
            {
                return(null);
            }
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            Folder           folder           = null;
            SyncStateStorage syncStateStorage = null;
            bool             flag             = false;
            SyncStateStorage result;

            try
            {
                try
                {
                    folder           = Folder.Bind(session, deviceMetadata.DeviceFolderId, SyncStateStorage.loggingEnabledAndCreateTimeAsArray);
                    syncStateStorage = new SyncStateStorage(folder, deviceMetadata, syncLogger);
                }
                catch (ObjectNotFoundException)
                {
                    syncLogger.TraceDebug <DeviceSyncStateMetadata>(ExTraceGlobals.SyncTracer, 0L, "[SyncStateStorage.Create] Did not find SyncStateStorage for device {0}.  Removing from cache.", deviceMetadata);
                    UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(session, syncLogger);
                    userSyncStateMetadata.TryRemove(deviceMetadata.Id, syncLogger);
                    deviceMetadata = userSyncStateMetadata.GetDevice(session, deviceMetadata.Id, syncLogger);
                    if (deviceMetadata != null)
                    {
                        folder           = Folder.Bind(session, deviceMetadata.DeviceFolderId, SyncStateStorage.loggingEnabledAndCreateTimeAsArray);
                        syncStateStorage = new SyncStateStorage(folder, deviceMetadata, syncLogger);
                    }
                }
                flag   = true;
                result = syncStateStorage;
            }
            finally
            {
                if (!flag)
                {
                    if (syncStateStorage != null)
                    {
                        syncStateStorage.Dispose();
                        syncStateStorage = null;
                    }
                    if (folder != null)
                    {
                        folder.Dispose();
                        folder = null;
                    }
                }
            }
            return(result);
        }
Exemplo n.º 29
0
 public static void UpdateMailboxLoggingEnabled(MailboxSession mailboxSession, bool mailboxLoggingEnabled, ISyncLogger syncLogger = null)
 {
     using (Folder syncFolderRoot = SyncStateStorage.GetSyncFolderRoot(mailboxSession, syncLogger))
     {
         if (mailboxLoggingEnabled)
         {
             syncFolderRoot[SyncStateStorage.airsyncMailboxLoggingEnabledProp] = ExDateTime.UtcNow;
         }
         else
         {
             syncFolderRoot.Delete(SyncStateStorage.airsyncMailboxLoggingEnabledProp);
         }
         syncFolderRoot.Save();
         syncFolderRoot.Load();
         Folder folder = null;
         try
         {
             folder = SyncStateStorage.CreateAndSaveFolder(mailboxSession, syncFolderRoot.Id.ObjectId, CreateMode.OpenIfExists, SyncStateStorage.MailboxLoggingTriggerFolder, null, null, syncLogger);
             if (folder != null)
             {
                 syncFolderRoot.DeleteObjects(DeleteItemFlags.SoftDelete, new StoreId[]
                 {
                     folder.Id.ObjectId
                 });
             }
         }
         finally
         {
             if (folder != null)
             {
                 folder.Dispose();
             }
         }
     }
 }
Exemplo n.º 30
0
        private static Folder CreateAndSaveFolder(MailboxSession mailboxSession, StoreObjectId containerId, CreateMode createMode, string displayName, string containerClass, Folder folderIn, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            Folder folder = null;
            bool   flag   = false;
            Folder result;

            try
            {
                if (folderIn == null)
                {
                    folder = Folder.Create(mailboxSession, containerId, StoreObjectType.Folder, displayName, createMode);
                    folder[SyncStateStorage.airsyncLockProp] = "0";
                }
                else
                {
                    folder = folderIn;
                }
                if (containerClass != null)
                {
                    folder[InternalSchema.ContainerClass] = containerClass;
                }
                StoreObjectId storeObjectId = null;
                if (!folder.IsNew)
                {
                    storeObjectId = folder.Id.ObjectId;
                }
                FolderSaveResult folderSaveResult = folder.Save();
                if (folderSaveResult.OperationResult != OperationResult.Succeeded)
                {
                    syncLogger.TraceDebug <string, FolderSaveResult>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::CreateAndSaveFolder. Failed to create folder {0}, due to {1}.", displayName, folderSaveResult);
                    if (storeObjectId == null)
                    {
                        folder.Load(null);
                        storeObjectId = folder.StoreObjectId;
                    }
                    mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[]
                    {
                        storeObjectId
                    });
                    throw folderSaveResult.ToException(ServerStrings.ExCannotCreateFolder(folderSaveResult));
                }
                folder.Load(SyncStateStorage.loggingEnabledAndCreateTimeAsArray);
                flag   = true;
                result = folder;
            }
            finally
            {
                if (!flag && folder != null)
                {
                    folder.Dispose();
                    folder = null;
                }
            }
            return(result);
        }