Esempio n. 1
0
 public WikipediaItem(infoResult page, WikipediaItem parent)
 {
     PageId     = page.pageid.GetValueOrDefault();
     Type       = categorymemberstype.page.Value;
     Title      = page.title;
     ParentItem = parent;
 }
Esempio n. 2
0
        private IEnumerable <LeechedResourceBase> leechPages(PagesSource <Page> pagesSource, WikipediaItem parent)
        {
            IEnumerator <infoResult> pagesEnumerator = null;

            try
            {
                pagesEnumerator = pagesSource.Select(p => p.info).ToEnumerable().GetEnumerator();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception encountered enumerating the pages of \"{0}\": {1}", parent.Title, ex);
            }

            if (pagesEnumerator != null)
            {
                infoResult page = null;
                do
                {
                    try
                    {
                        if (!pagesEnumerator.MoveNext())
                        {
                            page = null;
                        }
                        else
                        {
                            page = pagesEnumerator.Current;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Exception encountered leeching the childs of \"{0}\": {1}", parent.Title, ex);
                    }
                    if (page != null)
                    {
                        WikipediaItem pageItem = new WikipediaItem(page, parent);
                        yield return(pageItem);

                        if (pageItem.Links != null &&
                            pageItem.Links.Count > 0)
                        {
                            foreach (string link in pageItem.Links)
                            {
                                IEnumerator <LeechedResourceBase> childPagesEnumerator = null;
                                try
                                {
                                    var childPages = _wiki.Query.allpages()
                                                     .Where(c => c.from == link &&
                                                            c.to == link)
                                                     .Pages;

                                    childPagesEnumerator = leechPages(childPages, pageItem).GetEnumerator();
                                }
                                catch (Exception ex)
                                {
                                    Debug.WriteLine("Exception encountered enumerating the link \"{2}\" of \"{0}\": {1}", pageItem.Title, ex, link);
                                }

                                if (childPagesEnumerator != null)
                                {
                                    LeechedResourceBase childPage = null;

                                    do
                                    {
                                        try
                                        {
                                            if (!childPagesEnumerator.MoveNext())
                                            {
                                                childPage = null;
                                            }
                                            else
                                            {
                                                childPage = childPagesEnumerator.Current;
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Debug.WriteLine("Exception encountered leeching the link \"{2}\" of \"{0}\": {1}", pageItem.Title, ex, link);
                                        }
                                        if (childPage != null)
                                        {
                                            yield return(childPage);
                                        }
                                    } while (childPage != null);
                                }
                            }
                        }
                    }
                } while (page != null);
            }
        }