Esempio n. 1
0
        private async Task Update()
        {
            if (!LoadOld())
            {
                return;
            }
            foreach (var gem in ItemDB.GetAllGems())
            {
                var fetched = await _gemReader.FetchGemAsync(gem.Name);

                if (fetched != null)
                {
                    gem.Merge(fetched);
                }
            }
        }
        public SocketedGemsEditingViewModel(ItemImageService itemImageService, Item itemWithSockets)
        {
            _itemWithSockets = itemWithSockets;
            // convert ItemDB.Gems into GemBaseViewModels
            AvailableGems   = ItemDB.GetAllGems().Select(g => new GemBaseViewModel(itemImageService, g)).ToList();
            NumberOfSockets = _itemWithSockets.BaseType.MaximumNumberOfSockets;
            NewSocketedGem  = new SocketedGemViewModel
            {
                GemBase = AvailableGems[0],
                Level   = 1,
                Quality = 0,
                Group   = 1
            };
            AddGemCommand    = new RelayCommand(AddGem, CanAddGem);
            RemoveGemCommand = new RelayCommand <SocketedGemViewModel>(RemoveGem);

            SocketedGemsViewSource = new CollectionViewSource
            {
                Source = _socketedGems
            };
            SocketedGemsViewSource.SortDescriptions.Add(new SortDescription(
                                                            nameof(SocketedGemViewModel.GemBase) + "." + nameof(GemBaseViewModel.Name),
                                                            ListSortDirection.Ascending));
            SocketedGemsViewSource.SortDescriptions.Add(new SortDescription(
                                                            nameof(SocketedGemViewModel.Group),
                                                            ListSortDirection.Ascending));

            // convert currently socketed gem Items into SocketedGemViewModels
            foreach (var gem in _itemWithSockets.Gems)
            {
                var gemBase = AvailableGems.FirstOrDefault(g => g.Name == gem.Name);
                if (gemBase == null)
                {
                    continue;
                }
                var socketedGem = new SocketedGemViewModel
                {
                    GemBase = gemBase,
                    Level   = ItemDB.LevelOf(gem),
                    Quality = ItemDB.QualityOf(gem),
                    Group   = gem.SocketGroup + 1
                };
                socketedGem.PropertyChanged += SocketedGemsOnPropertyChanged;
                _socketedGems.Add(socketedGem);
            }
        }
Esempio n. 3
0
        // Main entry point.
        static int Main(string[] arguments)
        {
            bool   exit           = false;
            int    argFile        = -1;
            int    argGem         = -1;
            int    argMerge       = -1;
            string optFileName    = null;
            string optGemName     = null;
            string optMergeName   = null;
            bool   assetsDownload = false;
            bool   noBackup       = false;

            // Get options.
            if (arguments.Length > 0)
            {
                List <string> args = new List <string>(arguments);
                int           pos  = 0;

                for (var i = 0; i < args.Count && !exit;)
                {
                    string arg = args[i];

                    if (arg.Length == 0)
                    {
                        args.RemoveAt(0);   // Ignore empty argument.
                    }
                    else if (arg[0] == '/') // Decode switch.
                    {
                        switch (arg.ToUpperInvariant())
                        {
                        case "/?":
                            Console.WriteLine("Updates item database.\r\n");
                            Console.WriteLine("UPDATEDB [/F file] [[/G string] | [/M file]] [/N] [/Q | /V]\r\n");
                            Console.WriteLine("UPDATEDB /A\r\n");
                            Console.WriteLine("/A\tDownloads skill tree assets into current directory.");
                            Console.WriteLine("/F\tUpdate specified file instead of default file \"Items.xml\".");
                            Console.WriteLine("/G\tUpdate single gem specified by string.");
                            Console.WriteLine("/M\tMerge data of specified file instead of update.");
                            Console.WriteLine("/N\tDoes not create backup of file being updated before writing changes.");
                            Console.WriteLine("/Q\tDoes not display any output.");
                            Console.WriteLine("/V\tEnables verbose output.");
                            exit = true;
                            break;

                        case "/A":
                            assetsDownload = true;
                            break;

                        case "/F":
                            argFile = pos++;
                            break;

                        case "/G":
                            argGem = pos++;
                            break;

                        case "/M":
                            argMerge = pos++;
                            break;

                        case "/N":
                            noBackup = true;
                            break;

                        case "/Q":
                            Verbosity = VerbosityLevel.Quiet;
                            break;

                        case "/V":
                            Verbosity = VerbosityLevel.Verbose;
                            break;

                        default:
                            Console.WriteLine("Invalid switch - \"" + (arg.Length > 1 ? arg[1].ToString() : "") + "\"");
                            exit = true;
                            break;
                        }

                        args.RemoveAt(i);
                    }
                    else
                    {
                        ++i;  // Skip non-switch argument.
                    }
                }

                // Download assets if requested.
                if (assetsDownload)
                {
                    try
                    {
                        // Download Skill tree assets into current directory.
                        AppData.SetApplicationData(Environment.CurrentDirectory);

                        Info("Downloading skill tree assets...");
                        SkillTree.CreateSkillTree();
                        Info("Done.");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error: " + e.Message);

                        return(1);
                    }

                    return(0);
                }

                // Consume non-switch arguments in order of their switch appearance.
                if (argFile >= 0)
                {
                    if (args.Count < argFile + 1)
                    {
                        Console.WriteLine("Missing name of file to update");
                        exit = true;
                    }
                    else
                    {
                        optFileName = args[argFile];
                    }
                }
                if (argGem >= 0)
                {
                    if (args.Count < argGem + 1)
                    {
                        Console.WriteLine("Missing gem name");
                        exit = true;
                    }
                    else
                    {
                        optGemName = args[argGem];
                    }
                }
                if (argMerge >= 0)
                {
                    if (args.Count < argMerge + 1)
                    {
                        Console.WriteLine("Missing name of file to merge");
                        exit = true;
                    }
                    else
                    {
                        optMergeName = args[argMerge];
                    }
                }
            }
            if (exit)
            {
                return(1);
            }

            string appDataPath    = AppData.GetFolder(true);
            string updateFileName = optFileName == null ? "Items.xml" : optFileName;

            if (!File.Exists(appDataPath + updateFileName))
            {
                Console.WriteLine("File not found: " + appDataPath + updateFileName);

                return(1);
            }
            if (optMergeName != null && !File.Exists(appDataPath + optMergeName))
            {
                Console.WriteLine("File not found: " + appDataPath + optMergeName);

                return(1);
            }

            ItemDB.Load(updateFileName);

            bool   modified = false;
            Reader reader   = new GamepediaReader();

            if (optMergeName != null)
            {
                ItemDB.Merge(optMergeName);

                modified = true;
            }
            else if (optGemName != null)
            {
                Gem fetched = reader.FetchGem(optGemName);
                if (fetched != null)
                {
                    Gem gem = ItemDB.GetGem(optGemName);
                    if (gem == null)
                    {
                        ItemDB.Add(fetched);
                    }
                    else
                    {
                        gem.Merge(fetched);
                    }

                    modified = true;
                }
            }
            else
            {
                foreach (Gem gem in ItemDB.GetAllGems())
                {
                    Gem fetched = reader.FetchGem(gem.Name);
                    if (fetched != null)
                    {
                        gem.Merge(fetched);
                        modified = true;
                    }
                }
            }

            if (modified)
            {
                if (!noBackup)
                {
                    File.Copy(appDataPath + updateFileName, appDataPath + updateFileName + ".bak", true);
                }
                ItemDB.WriteTo(updateFileName);
            }

            return(0);
        }