Ejemplo n.º 1
0
        // 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);
        }
Ejemplo n.º 2
0
 public void Save(ICollection <DatabaseItem> items)
 {
     ThreadExecuter.Execute(
         () => _repo.Save(items),
         ThreadExecuter.ThreadTimeout * 2
         );
 }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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");
                }
            }
        }
Ejemplo n.º 6
0
 public void Save(DatabaseItem item)
 {
     ThreadExecuter.Execute(
         () => _repo.Save(item)
         );
 }
Ejemplo n.º 7
0
        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);
        }