static async Task Main(string[] args) { bool fullInitialize = args.Any(a => a == "--full"); bool mangosUpdate = args.Any(a => a == "--update"); bool itemLanguage = args.Any(a => a == "--lang"); Console.WriteLine("WoW Head Item Initializer"); if (fullInitialize) { Console.WriteLine("Full item initialization from MaNGOS and WowHead"); } else if (mangosUpdate) { Console.WriteLine("Updating item values from MaNGOS Db"); } else if (itemLanguage) { Console.WriteLine("Updating Locale Names for Items"); } else { Console.WriteLine("No Command Parameter Specified"); Environment.Exit(-1); } var configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json"); var config = configBuilder.Build(); var mangosDb = new MangosDbContext(); var bankDb = new ClassicGuildBankDbContext(config); if (fullInitialize) { await DoFullInitialize(bankDb, mangosDb); } else if (mangosUpdate) { await DoMaNGOSUpdate(bankDb, mangosDb); } else if (itemLanguage) { await DoLanguageUpdate(bankDb); } }
public static async Task DoMaNGOSUpdate(ClassicGuildBankDbContext bankDb, MangosDbContext mangosDb) { var itemCnt = bankDb.Items.Count(); var batchCnt = (itemCnt / 1000) + 1; var deserializer = new XmlSerializer(typeof(Wowhead)); for (int i = 0; i < batchCnt; i++) { foreach (var item in bankDb.Items.Skip(i * 1000).Take(1000).ToList()) { var result = await httpClient.GetAsync($"https://classic.wowhead.com/item={item.Id}?xml"); var xmlStream = await result.Content.ReadAsStreamAsync(); var str = await result.Content.ReadAsStringAsync(); var wItem = (Wowhead)deserializer.Deserialize(xmlStream); if (wItem.Item == null) { Console.WriteLine($"Failed to locate item {item.Id} - {item.Name}"); continue; } Console.WriteLine($"Updating Item {item.Id} - {item.Name}"); bankDb.Items.Attach(item); item.Class = Convert.ToInt32(wItem.Item.Class.Id); item.Subclass = Convert.ToInt32(wItem.Item.Subclass.Id); } await bankDb.SaveChangesAsync(); } Console.WriteLine("Finished Updating Items from MaNGOS"); Console.ReadLine(); }
public static async Task DoFullInitialize(ClassicGuildBankDbContext bankDb, MangosDbContext mangosDb) { var conn = bankDb.Database.GetDbConnection(); if (conn.State != System.Data.ConnectionState.Open) { conn.Open(); } bankDb.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Item ON;"); var deserializer = new XmlSerializer(typeof(Wowhead)); int itemCnt = 0; int skipped = 0; int maxId = bankDb.Items.Max(i => i.Id); foreach (var item in mangosDb.ItemTemplates.Where(i => i.entry > maxId)) { var content = httpClient.GetAsync($"https://classic.wowhead.com/item={item.entry}?xml").Result.Content; var xmlStream = content.ReadAsStreamAsync().Result; var str = content.ReadAsStringAsync().Result; var wItem = (Wowhead)deserializer.Deserialize(xmlStream); if (wItem.Item == null) { Console.WriteLine($"Failed to locate item {item.entry} - {item.name}"); skipped++; continue; } Console.WriteLine($"Converting Item {item.entry} - {wItem.Item.Name}"); var dbItem = bankDb.Items.FirstOrDefault(i => i.Id == Convert.ToInt32(wItem.Item.Id)); if (dbItem != null) { continue; } dbItem = new CGB.Item(); dbItem.Id = Convert.ToInt32(wItem.Item.Id); dbItem.Name = wItem.Item.Name; dbItem.Quality = wItem.Item.Quality.Text; dbItem.Icon = wItem.Item.Icon.Text; dbItem.Class = Convert.ToInt32(wItem.Item.Class.Id); dbItem.Subclass = Convert.ToInt32(wItem.Item.Subclass.Id); bankDb.Items.Add(dbItem); itemCnt++; if (itemCnt % 1000 == 0) { Console.WriteLine($"Saved {bankDb.SaveChangesAsync().Result} Records"); } } var recordsSaved = await bankDb.SaveChangesAsync(); conn.Close(); Console.WriteLine(recordsSaved); Console.WriteLine($"Skipped {skipped} Records"); Console.ReadLine(); }