public override Guild GetGuild(Server server, string guildName, bool isDetailed)
{
OnStarted();
Guild guild = new Guild() {
Server = server,
IsDetailed = isDetailed
};
HtmlDocument doc = new HtmlDocument();
OnStatusChanged(DMODownloadStatusCode.GETTING_GUILD, guildName, 0, 50);
try {
string html = DownloadContent(string.Format(STR_URL_GUILD_RANK, guildName, server.Identifier));
doc.LoadHtml(html);
bool isFound = false;
HtmlNode ranking = doc.DocumentNode;
string guildMaster = null;
try {
ranking = doc.DocumentNode.SelectNodes("//div[@id='body']//table[@class='forum_list'][1]//tbody//tr[not(@onmouseover)]")[4];
guild.Rank = CheckRankNode(ranking.SelectSingleNode(".//td[1]"));
guild.Name = ClearStr(ranking.SelectSingleNode(".//td[2]").InnerText);
guild.Rep = Convert.ToInt32(ClearStr(ranking.SelectSingleNode(".//td[4]").InnerText));
guildMaster = ClearStr(ranking.SelectSingleNode(".//td[5]").InnerText);
Regex r1 = new Regex(STR_GUILD_ID_REGEX, RegexOptions.IgnoreCase | RegexOptions.Singleline);
string link = ranking.SelectSingleNode(".//td[7]").InnerHtml;
Match m1 = r1.Match(link);
if (m1.Success) {
guild.Identifier = Convert.ToInt32(m1.Groups[4].ToString());
isFound = true;
}
} catch {
isFound = false;
}
if (!isFound) {
OnCompleted(DMODownloadResultCode.NOT_FOUND, guild); // guild not found
return guild;
}
List<DigimonType> types = GetDigimonTypes();
using (IDatabaseContext context = DatabaseManager.CreateContext()) {
foreach (DigimonType type in types) {
context.AddOrUpdateDigimonType(type, true);
}
context.SaveChanges();
}
if (GetGuildInfo(ref guild, isDetailed)) {
guild.Tamers.First(t => t.Name == guildMaster).IsMaster = true;
guild.UpdateTime = DateTime.Now;
OnCompleted(DMODownloadResultCode.OK, guild);
return guild;
} else {
OnCompleted(DMODownloadResultCode.CANT_GET, guild); // can't get guild info
return guild;
}
} catch (WebException) {
OnCompleted(DMODownloadResultCode.WEB_ACCESS_ERROR, guild);
return guild;
}
}