Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }