public IEnumerable<IChapterRecord> GetAvailableChapters(IMangaRecord manga)
{
if (manga == null)
throw new ArgumentNullException("manga");
if (manga.Scraper != ScraperGuid)
throw new ArgumentException("Manga record is not for " + Name, "manga");
var cacheKey = ChapterCacheKey + manga.MangaName + manga.Url;
var cached = _cache[cacheKey] as IEnumerable<ChapterRecord>;
if (cached != null) // if chapters are already in cache return them
return cached;
var records = new List<ChapterRecord>();
var document = WebHelper.GetHtmlDocument(manga.Url);
var chapters = document.SelectNodes(@"//table[@id=""listing""]/tr/td[1]");
if (chapters == null)
{
throw new ParserException("Could not find expected elements on website.", document.InnerHtml);
}
foreach (var chapter in chapters)
{
var url = GetFullUrl(chapter.ChildNodes.FirstOrDefault(n => n.Name == "a").Attributes["href"].Value);
records.Add(new ChapterRecord(ScraperGuid, url)
{
ChapterName = CleanupText(chapter.InnerText),
Url = url,
MangaRecord = manga
});
}
// save to cache
_cache[cacheKey] = records;
return records;
}