// LocalizationFile private Dictionary <string, string> LoadTags(string arcTagfile, string localizationFile, bool expansionOnlyMod) { // Process and load the _tags Load the _tags Dictionary <string, string> mappedTags; bool isTagfileLocked = IOHelper.IsFileLocked(new FileInfo(arcTagfile)); TemporaryCopy arcTagTemp = isTagfileLocked ? new TemporaryCopy(arcTagfile) : null; // Load from user localization var localizationLoader = new LocalizationLoader(); if (!string.IsNullOrEmpty(localizationFile) && localizationLoader.Load(localizationFile)) { _tags = localizationLoader.GetItemTags(); } // Load from GD else { List <IItemTag> _tags = Parser.Arz.ArzParser.ParseArcFile(isTagfileLocked ? arcTagTemp.Filename : arcTagfile); this._tags = new HashSet <ItemTag>(_tags.Select(m => new ItemTag { Name = m.Name, Tag = m.Tag }).ToArray() ); } bool saveOrUpdate = expansionOnlyMod; if (saveOrUpdate) { _databaseItemDao.SaveOrUpdate(_tags); } else { _databaseItemDao.Save(_tags); } // Fallback: Just use whatever names we got stored in db if (_tags == null || _tags.Count == 0) { Logger.Info( "Using cached tag dictionary instead, this may or may not be compatible with the supplied mod."); Logger.Info("If this is causing any issues, switch to vanilla then back to the mod."); mappedTags = _databaseItemDao.GetTagDictionary(); } else { mappedTags = _tags.ToDictionary(item => item.Tag, item => item.Name); var dbTags = _databaseItemDao.GetTagDictionary(); foreach (var key in dbTags.Keys.Where(key => !mappedTags.ContainsKey(key))) { mappedTags[key] = dbTags[key]; } } return(mappedTags); }
public void Save(ICollection <DatabaseItem> items) { ThreadExecuter.Execute( () => _repo.Save(items), ThreadExecuter.ThreadTimeout * 2 ); }
public void Execute() { var form = new ParsingDatabaseProgressView(); var parser = new ArzParsingWrapper(); string vanillaTags = GrimFolderUtility.FindArcFile(_grimdawnLocation, "text_en.arc"); string expansion1Tags = GrimFolderUtility.FindArcFile(Path.Combine(_grimdawnLocation, "gdx1"), "text_en.arc"); string modTags = string.IsNullOrEmpty(_modLocation) ? "" : GrimFolderUtility.FindArcFile(_modLocation, "text_en.arc"); List <Action> actions = new List <Action>(); actions.Add(() => parser.LoadTags(vanillaTags, expansion1Tags, modTags, _localizationFile, new WinformsProgressBar(form.LoadingTags).Tracker)); actions.Add(() => _itemTagDao.Save(parser.Tags, new WinformsProgressBar(form.SavingTags).Tracker)); string vanillaItems = GrimFolderUtility.FindArzFile(_grimdawnLocation); string expansion1Items = GrimFolderUtility.FindArzFile(Path.Combine(_grimdawnLocation, "gdx1")); string modItems = string.IsNullOrEmpty(_modLocation) ? "" : GrimFolderUtility.FindArzFile(_modLocation); actions.Add(() => parser.LoadItems(vanillaItems, expansion1Items, modItems, new WinformsProgressBar(form.LoadingItems).Tracker)); // TODO: actions.Add(() => parser.MapItemNames(new WinformsProgressBar(form.MappingItemNames).Tracker)); actions.Add(() => parser.RenamePetStats(new WinformsProgressBar(form.MappingPetStats).Tracker)); actions.Add(() => _databaseItemDao.Save(parser.Items, new WinformsProgressBar(form.SavingItems).Tracker)); // TODO: This depends on the DB item name.. which is in english, not localized actions.Add(() => { var records = parser.GenerateSpecialRecords(new WinformsProgressBar(form.GeneratingSpecialStats).Tracker); _databaseItemStatDao.Save(records, new WinformsProgressBar(form.SavingSpecialStats).Tracker); }); actions.Add(() => parser.ParseComplexItems(_itemSkillDao, new WinformsProgressBar(form.GeneratingSkills).Tracker)); actions.Add(() => { var tracker = new WinformsProgressBar(form.SkillCorrectnessCheck).Tracker; tracker.MaxValue = 1; _itemSkillDao.EnsureCorrectSkillRecords(); tracker.MaxProgress(); }); // Invoke the background thread & show progress UI Thread t = new Thread(() => { foreach (var action in actions) { action.Invoke(); } Action close = () => form.OverrideClose(); form.Invoke(close); }); t.Start(); form.ShowDialog(); }
private void buttonSelect_Click(object sender, EventArgs e) { // find selected checkbox // if selected != Properties.Settings.Default.LocalizationFile var cb = Checkboxes.Where(m => m.Checked).FirstOrDefault(); if (cb != null) { var package = cb.Tag.ToString(); if (package != Properties.Settings.Default.LocalizationFile) { Properties.Settings.Default.LocalizationFile = package; Properties.Settings.Default.Save(); if (!string.IsNullOrEmpty(Properties.Settings.Default.LocalizationFile)) { var loader = new LocalizationLoader(); GlobalSettings.Language = loader.LoadLanguage(package); // TODO: Grab tags from loader and save to sql databaseItemDao.Save(loader.GetItemTags()); UpdatingPlayerItemsScreen x = new UpdatingPlayerItemsScreen(playerItemDao); x.ShowDialog(); } // Load the GD one else { // Override timestamp to force an update GlobalSettings.Language = new EnglishLanguage(); string location = GrimDawnDetector.GetGrimLocation(); if (!string.IsNullOrEmpty(location) && Directory.Exists(location)) { ParsingDatabaseScreen parserUi = new ParsingDatabaseScreen(databaseSettingDao, this.parser, location, string.Empty, true, true); parserUi.ShowDialog(); } else { logger.Warn("Could not find the Grim Dawn install location"); } // Update item stats as well UpdatingPlayerItemsScreen x = new UpdatingPlayerItemsScreen(playerItemDao); x.ShowDialog(); } } } this.Close(); }
public void CanSaveSingleItemWithStats() { var item = new DatabaseItem { Name = "Magic item", Record = "test/record/with/stats" }; List <DatabaseItemStat> stats = new List <DatabaseItemStat>(); item.Stats = stats; stats.Add(new DatabaseItemStat { // Parent = item, Stat = "TestStat", TextValue = "Value" }); _dao.Save(item); item.Id.Should().Be.GreaterThan(0); item.Stats.First().Id.Should().Be.GreaterThan(0); using (ISession session = _sessionCreator.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { DatabaseItem loaded = session .CreateCriteria <DatabaseItem>() .Add(Restrictions.Eq(nameof(item.Record), "test/record/with/stats")) .UniqueResult <DatabaseItem>(); loaded.Stats.Should().Have.Count.EqualTo(1); loaded.Stats.First().Stat.Should().Be.EqualTo("TestStat"); } } }
public void Save(DatabaseItem item) { ThreadExecuter.Execute( () => _repo.Save(item) ); }
public void Execute() { var form = new ParsingDatabaseProgressView(); var parser = new ArzParsingWrapper(); List <string> tagfiles = new List <string>(); string vanillaTags = GrimFolderUtility.FindArcFile(_grimdawnLocation, "text_en.arc"); if (!string.IsNullOrEmpty(vanillaTags)) { tagfiles.Add(vanillaTags); } foreach (string path in GrimFolderUtility.GetGrimExpansionFolders(_grimdawnLocation)) { string expansionTags = GrimFolderUtility.FindArcFile(path, "text_en.arc"); if (!string.IsNullOrEmpty(expansionTags)) { tagfiles.Add(expansionTags); } } string modTags = string.IsNullOrEmpty(_modLocation) ? "" : GrimFolderUtility.FindArcFile(_modLocation, "text_en.arc"); if (!string.IsNullOrEmpty(modTags)) { tagfiles.Add(modTags); } List <Action> actions = new List <Action>(); actions.Add(() => parser.LoadTags(tagfiles, _localizationFile, new WinformsProgressBar(form.LoadingTags).Tracker)); actions.Add(() => _itemTagDao.Save(parser.Tags, new WinformsProgressBar(form.SavingTags).Tracker)); List <string> arzFiles = new List <string> { GrimFolderUtility.FindArzFile(_grimdawnLocation) }; foreach (string path in GrimFolderUtility.GetGrimExpansionFolders(_grimdawnLocation)) { string expansionItems = GrimFolderUtility.FindArzFile(path); if (!string.IsNullOrEmpty(expansionItems)) { arzFiles.Add(GrimFolderUtility.FindArzFile(expansionItems)); } } if (!string.IsNullOrEmpty(_modLocation)) { arzFiles.Add(GrimFolderUtility.FindArzFile(_modLocation)); } actions.Add(() => parser.LoadItems(arzFiles, new WinformsProgressBar(form.LoadingItems).Tracker)); actions.Add(() => parser.MapItemNames(new WinformsProgressBar(form.MappingItemNames).Tracker)); actions.Add(() => parser.RenamePetStats(new WinformsProgressBar(form.MappingPetStats).Tracker)); actions.Add(() => _databaseItemDao.Save(parser.Items, new WinformsProgressBar(form.SavingItems).Tracker)); // TODO: This depends on the DB item name.. which is in english, not localized actions.Add(() => { var records = parser.GenerateSpecialRecords(new WinformsProgressBar(form.GeneratingSpecialStats).Tracker); _databaseItemStatDao.Save(records, new WinformsProgressBar(form.SavingSpecialStats).Tracker); }); actions.Add(() => parser.ParseComplexItems(_itemSkillDao, new WinformsProgressBar(form.GeneratingSkills).Tracker)); actions.Add(() => { var tracker = new WinformsProgressBar(form.SkillCorrectnessCheck).Tracker; tracker.MaxValue = 1; _itemSkillDao.EnsureCorrectSkillRecords(); tracker.MaxProgress(); }); // Invoke the background thread & show progress UI Thread t = new Thread(() => { ExceptionReporter.EnableLogUnhandledOnThread(); foreach (var action in actions) { action.Invoke(); } Action close = () => form.OverrideClose(); form.Invoke(close); }); t.Start(); form.ShowDialog(); OnParseComplete?.Invoke(this, null); }