CalDavSynchronizer.DataAccess.CardDavDataAccess.GetUserAddressBooksNoThrow C# (CSharp) Method

GetUserAddressBooksNoThrow() public method

public GetUserAddressBooksNoThrow ( bool useWellKnownUrl ) : Task>
useWellKnownUrl bool
return Task>
    public async Task<IReadOnlyList<AddressBookData>> GetUserAddressBooksNoThrow (bool useWellKnownUrl)
    {
      try
      {
        var autodiscoveryUrl = useWellKnownUrl ? AutoDiscoveryUrl : _serverUrl;

        var currentUserPrincipalUrl = await GetCurrentUserPrincipalUrl (autodiscoveryUrl);

        var addressbooks = new List<AddressBookData>();

        if (currentUserPrincipalUrl != null)
        {
          var addressBookHomeSetProperties = await GetAddressBookHomeSet (currentUserPrincipalUrl);

          XmlNode homeSetNode = addressBookHomeSetProperties.XmlDocument.SelectSingleNode ("/D:multistatus/D:response/D:propstat/D:prop/A:addressbook-home-set", addressBookHomeSetProperties.XmlNamespaceManager);

          if (homeSetNode != null && homeSetNode.HasChildNodes)
          {
            foreach (XmlNode homeSetNodeHref in homeSetNode.ChildNodes)
            {
              if (!string.IsNullOrEmpty (homeSetNodeHref.InnerText))
              {
                var addressBookHomeSetUri = Uri.IsWellFormedUriString (homeSetNodeHref.InnerText, UriKind.Absolute) ? 
                  new Uri (homeSetNodeHref.InnerText) : 
                  new Uri (addressBookHomeSetProperties.DocumentUri.GetLeftPart (UriPartial.Authority) + homeSetNodeHref.InnerText);

                var addressBookDocument = await ListAddressBooks (addressBookHomeSetUri);

                XmlNodeList responseNodes = addressBookDocument.XmlDocument.SelectNodes ("/D:multistatus/D:response", addressBookDocument.XmlNamespaceManager);

                foreach (XmlElement responseElement in responseNodes)
                {
                  var urlNode = responseElement.SelectSingleNode ("D:href", addressBookDocument.XmlNamespaceManager);
                  var displayNameNode = responseElement.SelectSingleNode ("D:propstat/D:prop/D:displayname", addressBookDocument.XmlNamespaceManager);
                  if (urlNode != null && displayNameNode != null)
                  {
                    XmlNode isCollection = responseElement.SelectSingleNode ("D:propstat/D:prop/D:resourcetype/A:addressbook", addressBookDocument.XmlNamespaceManager);
                    if (isCollection != null)
                    {
                      var path = urlNode.InnerText.EndsWith ("/") ? urlNode.InnerText : urlNode.InnerText + "/";
                      var displayName = string.IsNullOrEmpty (displayNameNode.InnerText) ? "Default Addressbook" : displayNameNode.InnerText;
                      addressbooks.Add (new AddressBookData (new Uri (addressBookDocument.DocumentUri, path), displayName));
                    }
                  }
                }
              }
            }
          }
        }
        return addressbooks;
      }
      catch (Exception x)
      {
        if (x.Message.Contains ("404") || x.Message.Contains ("405") || x is XmlException)
          return new AddressBookData[] { };
        else
          throw;
      }
    }

Usage Example

 private static async Task<ServerResources> GetUserResources (CalDavDataAccess calDavDataAccess, CardDavDataAccess cardDavDataAccess)
 {
   var calDavResources = await calDavDataAccess.GetUserResourcesNoThrow (true);
   if (calDavResources.CalendarResources.Count == 0 && calDavResources.TaskListResources.Count == 0)
     calDavResources = await calDavDataAccess.GetUserResourcesNoThrow (false);
   var foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow (true);
   if (foundAddressBooks.Count == 0)
     foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow (false);
   return new ServerResources (calDavResources.CalendarResources, foundAddressBooks, calDavResources.TaskListResources);
 }
All Usage Examples Of CalDavSynchronizer.DataAccess.CardDavDataAccess::GetUserAddressBooksNoThrow