CalDavSynchronizer.DataAccess.CardDavDataAccess.GetEntities C# (CSharp) Метод

GetEntities() публичный Метод

public GetEntities ( IEnumerable urls ) : string>>>.Task
urls IEnumerable
Результат string>>>.Task
    public async Task<IReadOnlyList<EntityWithId<WebResourceName, string>>> GetEntities (IEnumerable<WebResourceName> urls)
    {
      s_logger.Debug ("Entered GetEntities.");

      WebResourceName firstResourceNameOrNull = null;

      var requestBody = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
   <A:addressbook-multiget xmlns:D=""DAV:"" xmlns:A=""urn:ietf:params:xml:ns:carddav"">
     <D:prop>
       <D:getetag/>
       <D:getcontenttype/>
       <A:address-data/>
     </D:prop>
     " + 
     String.Join ("\r\n", urls.Select (u => 
     {
        if (s_logger.IsDebugEnabled)
          s_logger.Debug ($"Requesting: '{u}'");

       if (firstResourceNameOrNull == null)
         firstResourceNameOrNull = u;

       return $"<D:href>{SecurityElement.Escape (u.OriginalAbsolutePath)}</D:href>";
     })) 
     + @"
   </A:addressbook-multiget>
 ";

      var responseXml = await _webDavClient.ExecuteWebDavRequestAndReadResponse (
          UriHelper.AlignServerUrl (_serverUrl, firstResourceNameOrNull) ,
          "REPORT",
          0,
          null,
          null,
          "application/xml",
          requestBody
          );

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

      var entities = new List<EntityWithId<WebResourceName, string>>();

      if (responseNodes == null)
        return entities;

      // ReSharper disable once LoopCanBeConvertedToQuery
      // ReSharper disable once PossibleNullReferenceException
      foreach (XmlElement responseElement in responseNodes)
      {
        var urlNode = responseElement.SelectSingleNode ("D:href", responseXml.XmlNamespaceManager);
        var dataNode = responseElement.SelectSingleNode ("D:propstat/D:prop/A:address-data", responseXml.XmlNamespaceManager);
        var contentTypeNode = responseElement.SelectSingleNode("D:propstat/D:prop/D:getcontenttype", responseXml.XmlNamespaceManager);
        string contentType = contentTypeNode?.InnerText ?? string.Empty;

        // TODO: add vlist support but for now filter out sogo vlists since we can't parse them atm
        if (urlNode != null && dataNode != null && !string.IsNullOrEmpty (dataNode.InnerText) && contentType != "text/x-vlist")
        {
          if (s_logger.IsDebugEnabled)
            s_logger.DebugFormat ($"Got: '{urlNode.InnerText}'");
          entities.Add (EntityWithId.Create (new WebResourceName(urlNode.InnerText), dataNode.InnerText));
        }
      }

      s_logger.Debug ("Exiting GetEntities.");
      return entities;
    }
  }