public async Task<Uri> GetCalendarHomeSetUriOrNull (bool useWellKnownUrl)
{
var autodiscoveryUrl = useWellKnownUrl ? AutoDiscoveryUrl : _serverUrl;
var currentUserPrincipalUrl = await GetCurrentUserPrincipalUrl (autodiscoveryUrl);
if (currentUserPrincipalUrl != null)
{
var calendarHomeSetProperties = await GetCalendarHomeSet (currentUserPrincipalUrl);
XmlNode homeSetNode = calendarHomeSetProperties.XmlDocument.SelectSingleNode ("/D:multistatus/D:response/D:propstat/D:prop/C:calendar-home-set", calendarHomeSetProperties.XmlNamespaceManager);
if (homeSetNode != null && homeSetNode.HasChildNodes)
{
foreach (XmlNode homeSetNodeHref in homeSetNode.ChildNodes)
{
if (!string.IsNullOrEmpty (homeSetNodeHref.InnerText))
{
var calendarHomeSetUri = Uri.IsWellFormedUriString (homeSetNodeHref.InnerText, UriKind.Absolute)
? new Uri(homeSetNodeHref.InnerText)
: new Uri(calendarHomeSetProperties.DocumentUri.GetLeftPart (UriPartial.Authority) +
homeSetNodeHref.InnerText);
return calendarHomeSetUri;
}
}
}
}
return null;
}