public WikipediaItem(infoResult page, WikipediaItem parent) { PageId = page.pageid.GetValueOrDefault(); Type = categorymemberstype.page.Value; Title = page.title; ParentItem = parent; }
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); } }