private void GetCharacter(string name) { Trace.WriteLine(string.Format("Trying to download PoRK data for Character: {0}", name)); // lets find character record or create a new! Character character = Character.FindFirst(x => x.Nick.ToLower() == name.ToLower()); if (character != null && character.LastUpdate().TotalHours <= 24) { Trace.WriteLine(string.Format("We have already downloaded PoRK data for this Character less than 24 hours ago.")); OrganizationLookup(character.OrganizationId); return; } try { var data = PoRKDownloadHelper.GetCharacter(name); if (data == null || data.Name == null || data.Name.Nick == null || data.Name.Nick == "") { Trace.WriteLine(string.Format("No official record could be found for Character: {0}", name)); // No record found. return; } if (character == null) { character = new Character() { Nick = name }; } try { character.Firstname = data.Name.Firstname; character.Lastname = data.Name.Lastname; } catch { } character.Level = data.Stats.Level; character.Breed = data.Stats.Breed; character.Gender = data.Stats.Gender; character.Faction = data.Stats.Faction; character.Profession = data.Stats.Profession; character.Title = data.Stats.ProfessionTitle; character.DefenderLevel = data.Stats.DefenderLevel; character.DefenderRank = data.Stats.DefenderRank; try { character.OrganizationId = data.Organization.OrganizationId; character.OrganizationRank = data.Organization.Rank; } catch { character.OrganizationId = 0; character.OrganizationRank = string.Empty; } // Lets check if we have org data. if (character.CharacterId != 0) { Organization organization = Organization.FindFirst(x => x.OrganizationId == character.CharacterId); if (organization == null) { OrganizationLookup(character.OrganizationId); } else { if (organization.LastUpdate().TotalHours > 24) { OrganizationLookup(character.OrganizationId); } } } character.Updated = DateTime.UtcNow; character.Save(PorkUser); Trace.WriteLine(string.Format("PoRK successfully downloaded.")); } catch { Trace.WriteLine(string.Format("Exception trying to download PoRK data for this user.")); if (character != null) { // could not find PoRK data for user, but lets prevent this record from being updated for another 24 hours. character.Updated = DateTime.UtcNow; character.Save(); } } }
private void GetOrganization(long id) { Trace.WriteLine(string.Format("Trying to download PoRK data for Organization: {0}", id)); Organization organization = Organization.FindFirst(x => x.OrganizationId == id); if (organization != null && organization.LastUpdate().TotalHours <= 24) { Trace.WriteLine(string.Format("We have already downloaded PoRK data for this Organization less than 24 hours ago.")); return; } try { var data = PoRKDownloadHelper.GetOrganization(id); if (organization == null) { // Adding organization to database. organization = new Organization(data.Name, data.Id); organization.Save(PorkUser); } if (organization.Name != data.Name) { string oldname = organization.Name; organization.Name = data.Name; organization.Save(PorkUser, string.Format("Organization name changed from {0} to {1}", oldname, data.Name)); } var downloadedmembers = 0; foreach (var member in data.Members.Member) { Character character = Character.FindFirst(x => x.Nick.ToLower() == member.Nickname.ToLower()); if (character != null) { // Update if we have not done so already. if (character.LastUpdate().TotalHours <= 24) { continue; } bool Changed = false; StringBuilder Changes = new StringBuilder(); #region Check if changes are detected. if (character.Firstname != member.Firstname) { Changes.AppendFormat("Firstname updated from {0} to {1} ", character.Firstname, member.Firstname); character.Firstname = member.Firstname; Changed = true; } if (character.Lastname != member.Lastname) { Changes.AppendFormat("Lastname updated from {0} to {1} ", character.Lastname, member.Lastname); character.Lastname = member.Lastname; Changed = true; } if (character.Nick != member.Nickname) { Changes.AppendFormat("Nickname updated from {0} to {1} ", character.Nick, member.Nickname); character.Nick = member.Nickname; Changed = true; } if (character.Level != member.Level) { Changes.AppendFormat("Level updated from {0} to {1} ", character.Level, member.Level); character.Level = member.Level; Changed = true; } if (character.Gender != member.Gender) { Changes.AppendFormat("Gender updated from {0} to {1} ", character.Gender, member.Gender); character.Gender = member.Gender; Changed = true; } if (character.Breed != member.Breed) { Changes.AppendFormat("Breed updated from {0} to {1} ", character.Breed, member.Breed); character.Gender = member.Gender; Changed = true; } if (character.DefenderLevel != member.DefenderLevel) { Changes.AppendFormat("DefenderLevel updated from {0} to {1} ", character.DefenderLevel, member.DefenderLevel); character.DefenderLevel = member.DefenderLevel; Changed = true; } if (character.DefenderRank != member.DefenderRank) { Changes.AppendFormat("DefenderRank updated from {0} to {1} ", character.DefenderRank, member.DefenderRank); character.DefenderRank = member.DefenderRank; Changed = true; } if (character.Profession != member.Profession) { Changes.AppendFormat("Profession updated from {0} to {1} ", character.Profession, member.Profession); character.Profession = member.Profession; Changed = true; } if (character.Title != member.Title) { Changes.AppendFormat("Title updated from {0} to {1} ", character.Title, member.Title); character.Title = member.Title; Changed = true; } if (character.OrganizationRank != member.OrganizationRank) { Changes.AppendFormat("OrganizationRank updated from {0} to {1} ", character.OrganizationRank, member.OrganizationRank); character.OrganizationRank = member.OrganizationRank; Changed = true; } #endregion // Only save is we actually made any changes. if (Changed) { character.Updated = DateTime.UtcNow; character.Save(PorkUser, Changes.ToString()); downloadedmembers++; } else { character.Updated = DateTime.UtcNow; // No need to log that we saved user as no changes were detected. character.Save(); } } else { // Add to database as character does not already exist. character = new Character(); character.Firstname = member.Firstname; character.Lastname = member.Lastname; character.Nick = member.Nickname; character.Level = member.Level; character.OrganizationId = data.Id; character.OrganizationRank = member.OrganizationRank; character.Profession = member.Profession; character.Gender = member.Gender; character.Faction = data.Faction; character.Breed = member.Breed; character.DefenderLevel = member.DefenderLevel; character.DefenderRank = member.DefenderRank; character.Title = member.Title; character.Updated = DateTime.UtcNow; character.Save(PorkUser); downloadedmembers++; } } Trace.WriteLine(string.Format("Successfully downloaded PoRK data for {0}, downloaded information about {1} members.", data.Name, downloadedmembers)); } catch { Trace.WriteLine(string.Format("Exception trying to download PoRK data for Organization.")); if (organization != null) { organization.Updated = DateTime.UtcNow; organization.Save(); } } }