Esempio n. 1
0
        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);
        }
        protected override SubscribeResults InternalPerformSubscribe(MailboxSession mailboxSession, SharingContext context)
        {
            if (context.ICalUrl == null)
            {
                throw new NotSupportedException("cannot subscribe to non ical url");
            }
            PublishingSubscriptionData newSubscription = this.CreateSubscriptionData(context);

            return(WebCalendar.InternalSubscribe(mailboxSession, newSubscription, context.InitiatorSmtpAddress, context.InitiatorName));
        }
Esempio n. 3
0
        public static SubscribeResultsWebCal Subscribe(MailboxSession mailboxSession, string iCalUrlString, string folderName = null)
        {
            Util.ThrowOnNullArgument(mailboxSession, "mailboxSession");
            Util.ThrowOnNullOrEmptyArgument(iCalUrlString, "iCalUrlString");
            Uri iCalUrl = null;

            if (!PublishingUrl.IsAbsoluteUriString(iCalUrlString, out iCalUrl) || !Array.Exists <string>(WebCalendar.validWebCalendarSchemes, (string scheme) => StringComparer.OrdinalIgnoreCase.Equals(scheme, iCalUrl.Scheme)))
            {
                throw new InvalidSharingDataException("iCalUrlString", iCalUrlString);
            }
            string text;

            if ((text = folderName) == null && (text = WebCalendar.GetFolderNameFromInternetCalendar(iCalUrl)) == null)
            {
                text = (WebCalendar.GetFolderNameFromUrl(iCalUrl) ?? ClientStrings.Calendar.ToString(mailboxSession.InternalPreferedCulture));
            }
            folderName = text;
            PublishingSubscriptionData newSubscription = WebCalendar.CreateSubscriptionData(iCalUrl, folderName);

            return(WebCalendar.InternalSubscribe(mailboxSession, newSubscription, null, null));
        }