private static async Task RunInternal(string inputFilePath) { try { await MainWin.LockUi("Exporting Anamnesis Character", "....", LockObj); MainWin.LockProgress.Report("Loading chara file..."); name = Path.GetFileNameWithoutExtension(inputFilePath); // read chara file string json = File.ReadAllText(inputFilePath); character = JsonConvert.DeserializeObject <CharacterFile>(json); XivRace race = character.GetXivRace(); // load all items we can MainWin.LockProgress.Report("Loading items..."); allItems = await XivCache.GetFullItemList(); // Body await Export("Face", GetFaceModel(race, character.Head, character.Eyebrows, character.Eyes, character.Nose, character.Jaw, character.Mouth), race); await Export("EarsTail", GetEarsTailModel(race, character.TailEarsType), race); await Export("Hair", GetHairModel(race, character.Hair), race); await Export("Head", GetItemModel(character.HeadGear, "Head"), race); await Export("Body", GetItemModel(character.Body, "Body"), race); await Export("Hands", GetItemModel(character.Hands, "Hands"), race); await Export("Legs", GetItemModel(character.Legs, "Legs"), race); await Export("Feet", GetItemModel(character.Feet, "Feet"), race); await Export("Earring", GetItemModel(character.Ears, "Earring"), race); await Export("Neck", GetItemModel(character.Neck, "Neck"), race); await Export("Wrists", GetItemModel(character.Wrists, "Wrists"), race); await Export("L Ring", GetItemModel(character.LeftRing, "Rings"), race); await Export("R ring", GetItemModel(character.RightRing, "Rings"), race); await Export("Weapon Main", GetWeaponModel(character.MainHand, true), race); await Export("Weapon Off", GetWeaponModel(character.OffHand, false), race); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error running export"); } finally { await MainWin.UnlockUi(LockObj); } }
private async Task <List <IItem> > BuildCategoryTree() { foreach (var kv in _categoryStructure) { // Make the top level node. var e = new ItemTreeElement(null, null, kv.Key); foreach (var secondary in kv.Value) { var e2 = new ItemTreeElement(e, null, secondary); e.Children.Add(e2); } CategoryElements.Add(e); } var gameDir = XivCache.GameInfo.GameDirectory; var language = XivCache.GameInfo.GameLanguage; var items = await XivCache.GetFullItemList(); foreach (var item in items) { // Find what node we should be attached to. ItemTreeElement catParent = null; var topLevel = CategoryElements.FirstOrDefault(x => x.DisplayName == item.PrimaryCategory); if (topLevel == null) { topLevel = new ItemTreeElement(null, null, item.PrimaryCategory); CategoryElements.Add(topLevel); } var secondLevel = topLevel.Children.FirstOrDefault(x => x.DisplayName == item.SecondaryCategory); if (secondLevel == null) { if (item.SecondaryCategory == item.Name) { // These are a special snowflake case. secondLevel = topLevel; } else { secondLevel = new ItemTreeElement(topLevel, null, item.SecondaryCategory); topLevel.Children.Add(secondLevel); } } catParent = secondLevel; ItemTreeElement setParent = null; // Try and see if we have a valid root parent to attach to in the sets tree. try { var type = item.GetType(); // Perf. Much faster to just not test those types at all, as we know they won't resolve. if (type != typeof(XivUi)) { var itemRoot = item.GetRootInfo(); if (itemRoot.PrimaryType != XivItemType.unknown) { var st = itemRoot.ToString(); if (DependencyRootNodes.ContainsKey(st)) { setParent = DependencyRootNodes[st]; } } } } catch (Exception ex) { throw; } var e2 = new ItemTreeElement(catParent, setParent, item); if (catParent != null) { catParent.Children.Add(e2); } if (setParent != null) { setParent.Children.Add(e2); } } return(items); }