CalDavSynchronizer.DataAccess.CalDavDataAccess.GetEntities C# (CSharp) Method

GetEntities() public method

public GetEntities ( IEnumerable eventUrls ) : string>>>.Task
eventUrls IEnumerable
return string>>>.Task
    public async Task<IReadOnlyList<EntityWithId<WebResourceName, string>>> GetEntities (IEnumerable<WebResourceName> eventUrls)
    {
      WebResourceName firstResourceNameOrNull = null;

      var requestBody = @"<?xml version=""1.0""?>
			                    <C:calendar-multiget xmlns:C=""urn:ietf:params:xml:ns:caldav"" xmlns:D=""DAV:"">
			                        <D:prop>
			                            <D:getetag/>
			                            <D:displayname/>
			                            <C:calendar-data/>
			                        </D:prop>
                                        " + 
                                        String.Join (
                                          "\r\n", 
                                          eventUrls.Select (
                                             u => 
                                             {
                                               if (firstResourceNameOrNull == null)
                                                 firstResourceNameOrNull = u;
                                               return $"<D:href>{SecurityElement.Escape(u.OriginalAbsolutePath)}</D:href>";
                                             })) + @"
                                    </C:calendar-multiget>";

      var responseXml = await _webDavClient.ExecuteWebDavRequestAndReadResponse (
          UriHelper.AlignServerUrl (_serverUrl, firstResourceNameOrNull),
          "REPORT",
          1,
          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/C:calendar-data", responseXml.XmlNamespaceManager);
        if (urlNode != null && !string.IsNullOrEmpty (dataNode?.InnerText))
        {
          entities.Add (EntityWithId.Create (new WebResourceName(urlNode.InnerText), dataNode.InnerText));
        }
      }

      return entities;
    }