示例#1
0
 public WikipediaItem(categorymembersSelect cm, WikipediaItem parent)
 {
     PageId     = cm.pageid;
     Type       = cm.type.Value;
     Title      = cm.title;
     ParentItem = parent;
 }
示例#2
0
        private IEnumerable <LeechedResourceBase> leechContents(WikipediaItem parent)
        {
            IEnumerator <LeechedResourceBase> pagesEnumerator = null;

            try
            {
                var pages = _wiki.Query.categorymembers()
                            .Where(c => c.title == parent.Title &&
                                   c.type == categorymemberstype.page)
                            .Pages;

                pagesEnumerator = leechPages(pages, parent).GetEnumerator();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception encountered enumerating the members of \"{0}\": {1}", parent.Title, ex);
            }

            if (pagesEnumerator != null)
            {
                LeechedResourceBase page = null;

                do
                {
                    try
                    {
                        page = pagesEnumerator.MoveNext() ? pagesEnumerator.Current : null;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Exception encountered leeching the members of \"{0}\": {1}", parent.Title, ex);
                    }
                    if (page != null)
                    {
                        yield return(page);
                    }
                } while (page != null);
            }

            IEnumerator <categorymembersSelect> categoriesEnumerator = null;

            try
            {
                categoriesEnumerator = _wiki.Query.categorymembers()
                                       .Where(c => c.title == parent.Title && c.type == categorymemberstype.subcat)
                                       .ToEnumerable()
                                       .GetEnumerator();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception encountered enumerating the subcategories of \"{0}\": {1}", parent.Title, ex);
            }

            if (categoriesEnumerator != null)
            {
                categorymembersSelect category = null;

                do
                {
                    try
                    {
                        category = categoriesEnumerator.MoveNext() ? categoriesEnumerator.Current : null;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Exception encountered leeching the subcategories of \"{0}\": {1}", parent.Title, ex);
                    }

                    if (category != null)
                    {
                        WikipediaItem categoryItem = new WikipediaItem(category, parent);
                        if (categoryNameBrowsable(categoryItem.Title) &&
                            browsedCategories.All(bc => bc.PageId != categoryItem.PageId))
                        {
                            browsedCategories.Add(categoryItem);
                            foreach (LeechedResourceBase leechedResource in leechContents(categoryItem))
                            {
                                yield return(leechedResource);
                            }
                        }
                    }
                } while (category != null);
            }
        }