CalDavSynchronizer.DataAccess.CalDavDataAccess.GetUserResourcesNoThrow C# (CSharp) Метод

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

public GetUserResourcesNoThrow ( bool useWellKnownUrl ) : Task
useWellKnownUrl bool
Результат Task
    public async Task<CalDavResources> GetUserResourcesNoThrow (bool useWellKnownUrl)
    {
      try
      {
        var autodiscoveryUrl = useWellKnownUrl ? AutoDiscoveryUrl : _serverUrl;

        var currentUserPrincipalUrl = await GetCurrentUserPrincipalUrl (autodiscoveryUrl);

        var calendars = new List<CalendarData>();
        var taskLists = new List<TaskListData>();

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

                var calendarDocument = await ListCalendars (calendarHomeSetUri);

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

                foreach (XmlElement responseElement in responseNodes)
                {
                  var urlNode = responseElement.SelectSingleNode ("D:href", calendarDocument.XmlNamespaceManager);
                  var displayNameNode = responseElement.SelectSingleNode ("D:propstat/D:prop/D:displayname", calendarDocument.XmlNamespaceManager);
                  if (urlNode != null && displayNameNode != null)
                  {
                    XmlNode isCollection = responseElement.SelectSingleNode ("D:propstat/D:prop/D:resourcetype/C:calendar", calendarDocument.XmlNamespaceManager);
                    if (isCollection != null)
                    {
                      var calendarColorNode = responseElement.SelectSingleNode ("D:propstat/D:prop/E:calendar-color", calendarDocument.XmlNamespaceManager);
                      ArgbColor? calendarColor = null;
                      if (calendarColorNode != null && calendarColorNode.InnerText.Length >= 7)
                      {
                        calendarColor = ArgbColor.FromRgbaHexStringWithOptionalANoThrow (calendarColorNode.InnerText);
                      }

                      XmlNode supportedComponentsNode = responseElement.SelectSingleNode ("D:propstat/D:prop/C:supported-calendar-component-set", calendarDocument.XmlNamespaceManager);
                      if (supportedComponentsNode != null)
                      {
                        var path = urlNode.InnerText.EndsWith ("/") ? urlNode.InnerText : urlNode.InnerText + "/";

                        if (supportedComponentsNode.InnerXml.Contains ("VEVENT"))
                        {
                          var displayName = string.IsNullOrEmpty (displayNameNode.InnerText) ? "Default Calendar" : displayNameNode.InnerText;
                          calendars.Add (new CalendarData (new Uri (calendarDocument.DocumentUri, path), displayName, calendarColor));
                        }
                        if (supportedComponentsNode.InnerXml.Contains ("VTODO"))
                        {
                          var displayName = string.IsNullOrEmpty (displayNameNode.InnerText) ? "Default Tasks" : displayNameNode.InnerText;
                          taskLists.Add (new TaskListData (new Uri (calendarDocument.DocumentUri, path).ToString(), displayName));
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        return new CalDavResources (calendars, taskLists);
      }
      catch (Exception x)
      {
        if (x.Message.Contains ("404") || x.Message.Contains ("405") || x is XmlException)
          return new CalDavResources (new CalendarData[] { }, new TaskListData[] {});
        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.CalDavDataAccess::GetUserResourcesNoThrow