/// <summary>
        /// List all meetings on the server
        /// </summary>
        /// <param name="adobeConnectXmlApi">The adobe connect XML API.</param>
        /// <param name="likeName">filter like the Name of the Meeting</param>
        /// <returns>
        ///   <see cref="EnumerableResultStatus{T}" />
        /// </returns>
        public static EnumerableResultStatus <MeetingItem> GetAllMeetings(this AdobeConnectXmlAPI adobeConnectXmlApi, string likeName)
        {
            string filterName = String.Empty;

            if (!String.IsNullOrEmpty(likeName))
            {
                filterName = @"&filter-like-name=" + likeName;
            }

            ApiStatus s = adobeConnectXmlApi.ProcessApiRequest("report-bulk-objects", "filter-type=meeting" + filterName);

            var resultStatus = Helpers.WrapBaseStatusInfo <EnumerableResultStatus <MeetingItem> >(s);

            if (s.Code != StatusCodes.OK || s.ResultDocument == null || s.ResultDocument.Root == null)
            {
                return(resultStatus);
            }

            IEnumerable <XElement> list;

            try
            {
                IEnumerable <XElement> meetingsData = s.ResultDocument.XPathSelectElements("//report-bulk-objects/row");
                list = meetingsData as IList <XElement> ?? meetingsData;
            }
            catch (Exception ex)
            {
                throw;
            }

            resultStatus.Result = adobeConnectXmlApi.PreProcessMeetingItems(list, new XmlRootAttribute("row"));

            return(resultStatus);
        }
        /// <summary>
        /// Returns a list of SCOs within another SCO. The enclosing SCO can be a Folder, Meeting, or
        /// Curriculum.
        /// In general, the contained SCOs can be of any type meetings, courses, curriculums, Content,
        /// events, folders, trees, or links (see the list in Type). However, the Type of the contained SCO
        /// needs to be valid for the enclosing SCO. For example, courses are contained within
        /// curriculums, and Meeting Content is contained within meetings.
        /// Because folders are SCOs, the returned list includes SCOs and subfolders at the next
        /// hierarchical level, but not the contents of the subfolders. To include the subfolder contents,
        /// call sco-expanded-contents.
        /// </summary>
        /// <param name="adobeConnectXmlApi">The adobe connect XML API.</param>
        /// <param name="scoId">Room/Folder ID</param>
        /// <returns>
        ///   <see cref="EnumerableResultStatus{T}" />
        /// </returns>
        public static EnumerableResultStatus <MeetingItem> GetMeetingsInRoom(this AdobeConnectXmlAPI adobeConnectXmlApi, string scoId)
        {
            ApiStatus s = adobeConnectXmlApi.ProcessApiRequest("sco-contents", String.Format("sco-id={0}", scoId));

            var resultStatus = Helpers.WrapBaseStatusInfo <EnumerableResultStatus <MeetingItem> >(s);

            if (s.Code != StatusCodes.OK || s.ResultDocument == null)
            {
                return(resultStatus);
            }

            IEnumerable <XElement> list;

            try
            {
                IEnumerable <XElement> meetingsData = s.ResultDocument.XPathSelectElements("//sco");
                list = meetingsData as IList <XElement> ?? meetingsData;
            }
            catch (Exception ex)
            {
                throw;
            }

            resultStatus.Result = adobeConnectXmlApi.PreProcessMeetingItems(list, new XmlRootAttribute("sco"));

            return(resultStatus);
        }
        /// <summary>
        /// Provides information about all Acrobat Connect meetings for which the user is a Host, invited
        /// participant, or registered guest. The Meeting can be scheduled in the past, present, or future.
        /// </summary>
        /// <param name="adobeConnectXmlApi">The adobe connect XML API.</param>
        /// <param name="likeName">filter like the Name of the Meeting</param>
        /// <returns>
        ///   <see cref="EnumerableResultStatus{T}" />
        /// </returns>
        public static async Task <EnumerableResultStatus <MeetingItem> > GetMyMeetings(this AdobeConnectXmlAPI adobeConnectXmlApi, string likeName)
        {
            string filterName = null;

            if (!String.IsNullOrEmpty(likeName))
            {
                filterName = @"filter-like-name=" + likeName;
            }

            ApiStatus s = await adobeConnectXmlApi.ProcessApiRequest("report-my-meetings", filterName);

            var resultStatus = Helpers.WrapBaseStatusInfo <EnumerableResultStatus <MeetingItem> >(s);

            if (s.Code != StatusCodes.OK || s.ResultDocument == null)
            {
                return(resultStatus);
            }

            IEnumerable <XElement> list;

            try
            {
                IEnumerable <XElement> meetingsData = s.ResultDocument.XPathSelectElements("//my-meetings/meeting");
                list = meetingsData as IList <XElement> ?? meetingsData;
            }
            catch (Exception ex)
            {
                throw ex.InnerException;
            }

            resultStatus.Result = adobeConnectXmlApi.PreProcessMeetingItems(list, new XmlRootAttribute("meeting"));

            return(resultStatus);
        }