Example #1
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);
        }
Example #2
0
        public HierarchySyncOperations EnumerateServerOperations(StoreObjectId rootFolderId, bool excludeHiddenFolders, PropertyDefinition[] propertiesToFetch, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            syncLogger.Information(ExTraceGlobals.SyncProcessTracer, (long)this.GetHashCode(), "Storage.FolderHierarchySync.EnumerateServerOperations(propDefs).");
            ArgumentValidator.ThrowIfNull("rootfolderId", rootFolderId);
            this.ServerManifest.Clear();
            Dictionary <StoreObjectId, FolderStateEntry> serverFolders = new Dictionary <StoreObjectId, FolderStateEntry>();

            using (Folder folder = Folder.Bind(this.storeSession, rootFolderId))
            {
                using (QueryResult queryResult = folder.FolderQuery(FolderQueryFlags.DeepTraversal, null, null, propertiesToFetch))
                {
                    IStorePropertyBag[] propertyBags;
                    do
                    {
                        propertyBags = queryResult.GetPropertyBags(10000);
                        for (int i = 0; i < propertyBags.Length; i++)
                        {
                            this.AddServerManifestEntry(propertyBags[i], excludeHiddenFolders, serverFolders, syncLogger);
                        }
                    }while (propertyBags.Length != 0);
                }
            }
            return(this.PostEnumerateServerOperations(serverFolders, rootFolderId));
        }
Example #3
0
        public static bool DeleteSyncStateStorage(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession);
            syncLogger.Information <DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Need to delete folder {0}", deviceIdentity);
            SyncStateTypeFactory.GetInstance().RegisterInternalBuilders();
            UserSyncStateMetadata          userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger);
            List <DeviceSyncStateMetadata> allDevices            = userSyncStateMetadata.GetAllDevices(mailboxSession, false, syncLogger);
            bool result = false;

            if (allDevices != null)
            {
                foreach (DeviceSyncStateMetadata deviceSyncStateMetadata in allDevices)
                {
                    syncLogger.Information <DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Found syncstate folder {0}", deviceSyncStateMetadata.Id);
                    if (string.Compare(deviceSyncStateMetadata.Id.Protocol, deviceIdentity.Protocol, StringComparison.Ordinal) == 0)
                    {
                        if (deviceSyncStateMetadata.Id.Equals(deviceIdentity))
                        {
                            mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[]
                            {
                                deviceSyncStateMetadata.DeviceFolderId
                            });
                            userSyncStateMetadata.TryRemove(deviceSyncStateMetadata.Id, syncLogger);
                        }
                        else
                        {
                            syncLogger.Information(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. found more devices with same protocol");
                            result = true;
                        }
                    }
                }
            }
            return(result);
        }
Example #4
0
        public HierarchySyncOperations EnumerateServerOperations(StoreObjectId rootFolderId, bool excludeHiddenFolders, IEnumerable <IStorePropertyBag> rootFolderHierarchyList, ISyncLogger syncLogger = null)
        {
            if (syncLogger == null)
            {
                syncLogger = TracingLogger.Singleton;
            }
            syncLogger.Information(ExTraceGlobals.SyncTracer, (long)this.GetHashCode(), "Storage.FolderHierarchySync.EnumerateServerOperations(hierarchy).");
            ArgumentValidator.ThrowIfNull("rootFolderId", rootFolderId);
            ArgumentValidator.ThrowIfNull("rootFolderHierarchyList", rootFolderHierarchyList);
            this.ServerManifest.Clear();
            Dictionary <StoreObjectId, FolderStateEntry> serverFolders = new Dictionary <StoreObjectId, FolderStateEntry>();

            foreach (IStorePropertyBag propertyBag in rootFolderHierarchyList)
            {
                this.AddServerManifestEntry(propertyBag, excludeHiddenFolders, serverFolders, syncLogger);
            }
            return(this.PostEnumerateServerOperations(serverFolders, rootFolderId));
        }