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