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); }
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)); }
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); }
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)); }