internal IdAndName Create(TData subscriptionData) { StoreObjectId storeObjectId = null; IdAndName result = null; bool flag = false; try { storeObjectId = this.CreateFolderInternal(subscriptionData); result = this.Update(storeObjectId, subscriptionData); flag = true; } finally { if (!flag && storeObjectId != null) { ExTraceGlobals.SharingTracer.TraceError <IExchangePrincipal, StoreObjectId>((long)this.GetHashCode(), "{0}: Failed to process the folder. Delete the created folder {1}", this.mailboxSession.MailboxOwner, storeObjectId); this.mailboxSession.Delete(DeleteItemFlags.HardDelete, new StoreId[] { storeObjectId }); } } return(result); }
internal static SubscribeResultsWebCal InternalSubscribe(MailboxSession mailboxSession, PublishingSubscriptionData newSubscription, string initiatorSmtpAddress, string initiatorName) { if (mailboxSession.MailboxOwner.MailboxInfo.Location.ServerVersion < Server.E14SP1MinVersion) { throw new NotSupportedWithMailboxVersionException(); } StoreObjectId storeObjectId = null; SubscribeResultsWebCal result; using (PublishingSubscriptionManager publishingSubscriptionManager = new PublishingSubscriptionManager(mailboxSession)) { PublishingFolderManager publishingFolderManager = new PublishingFolderManager(mailboxSession); PublishingSubscriptionData existing = publishingSubscriptionManager.GetExisting(newSubscription.Key); PublishingSubscriptionData publishingSubscriptionData = existing ?? newSubscription; IdAndName idAndName = publishingFolderManager.EnsureFolder(publishingSubscriptionData); if (publishingSubscriptionData.LocalFolderId == null || !publishingSubscriptionData.LocalFolderId.Equals(idAndName.Id)) { storeObjectId = (publishingSubscriptionData.LocalFolderId = idAndName.Id); } PublishingSubscriptionData publishingSubscriptionData2 = publishingSubscriptionManager.CreateOrUpdate(publishingSubscriptionData, false); if (!publishingSubscriptionData.LocalFolderId.Equals(publishingSubscriptionData2.LocalFolderId)) { idAndName = publishingFolderManager.GetFolder(publishingSubscriptionData2); } ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, StoreObjectId>(0L, "{0}: WebCalendar.InternalSubscribe will request a sync for folder id {1}.", mailboxSession.MailboxOwner, idAndName.Id); SyncAssistantInvoker.SyncFolder(mailboxSession, idAndName.Id); result = new SubscribeResultsWebCal(SharingDataType.Calendar, initiatorSmtpAddress, initiatorName, publishingSubscriptionData.RemoteFolderName, publishingSubscriptionData.PublishingUrl, idAndName.Id, storeObjectId != null, idAndName.Name); } return(result); }
public IdAndName GetFolder(TData subscription) { Util.ThrowOnNullArgument(subscription, "subscription"); IdAndName idAndName = null; ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, TData>((long)this.GetHashCode(), "{0}: Check folder referred by subscription {1}.", this.mailboxSession.MailboxOwner, subscription); StoreObjectId localFolderId = subscription.LocalFolderId; string value = null; try { using (Folder folder = Folder.Bind(this.mailboxSession, localFolderId)) { value = folder.DisplayName; } } catch (ObjectNotFoundException) { ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, StoreObjectId>((long)this.GetHashCode(), "{0}: Folder doesn't exist: {1}. No folder is returned.", this.mailboxSession.MailboxOwner, localFolderId); } if (!string.IsNullOrEmpty(value)) { idAndName = new IdAndName(localFolderId, new LocalizedString(value)); ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, IdAndName>((long)this.GetHashCode(), "{0}: Folder is returned: {1}", this.mailboxSession.MailboxOwner, idAndName); } return(idAndName); }
protected override SubscribeResults InternalPerformSubscribe(MailboxSession mailboxSession, SharingContext context) { ADRecipient mailboxOwner = DirectoryHelper.ReadADRecipient(mailboxSession.MailboxOwner.MailboxInfo.MailboxGuid, mailboxSession.MailboxOwner.MailboxInfo.IsArchive, mailboxSession.GetADRecipientSession(true, ConsistencyMode.IgnoreInvalid)); SharedFolderData matchingSharedFolderData = this.GetMatchingSharedFolderData(context, mailboxOwner); if (context.InitiatorSmtpAddress == null) { throw new InvalidSharingDataException("InitiatorSmtpAddress", string.Empty); } IdAndName idAndName = null; StoreObjectId storeObjectId = null; using (SharingSubscriptionManager sharingSubscriptionManager = new SharingSubscriptionManager(mailboxSession)) { SharingSubscriptionData sharingSubscriptionData = this.CreateSubscriptionData(mailboxOwner, context, matchingSharedFolderData); SharingFolderManager sharingFolderManager = new SharingFolderManager(mailboxSession); SharingSubscriptionData existing = sharingSubscriptionManager.GetExisting(sharingSubscriptionData.Key); if (existing != null) { existing.CopyFrom(sharingSubscriptionData); } SharingSubscriptionData sharingSubscriptionData2 = existing ?? sharingSubscriptionData; idAndName = sharingFolderManager.EnsureFolder(sharingSubscriptionData2); if (sharingSubscriptionData2.LocalFolderId == null || !sharingSubscriptionData2.LocalFolderId.Equals(idAndName.Id)) { storeObjectId = (sharingSubscriptionData2.LocalFolderId = idAndName.Id); } SharingSubscriptionData sharingSubscriptionData3 = sharingSubscriptionManager.CreateOrUpdate(sharingSubscriptionData2, false); if (!sharingSubscriptionData2.LocalFolderId.Equals(sharingSubscriptionData3.LocalFolderId)) { idAndName = sharingFolderManager.GetFolder(sharingSubscriptionData3); } } return(new SubscribeResultsExternal(context.DataType, context.InitiatorSmtpAddress, context.InitiatorName, context.FolderName, matchingSharedFolderData.FolderId, idAndName.Id, storeObjectId != null, idAndName.Name)); }