Esempio n. 1
0
        public async Task LoadOrUpdate()
        {
            Task updateTask = null;

            lock (_lock)
            {
                if (_updateTask == null)
                {
                    updateTask = _updateTask = Task.Run(async() =>
                    {
                        try
                        {
                            try
                            {
                                //this resource contains species stats that we need
                                await DownloadHelper.DownloadFile(
                                    @"https://raw.githubusercontent.com/cadon/ARKStatsExtractor/master/ARKBreedingStats/json/values.json",
                                    _speciesstatsFileName,
                                    true,
                                    TimeSpan.FromDays(1)
                                    );
                            }
                            catch { /*ignore exceptions */ }


                            //even if download failed try with local file if it exists
                            if (File.Exists(_speciesstatsFileName))
                            {
                                using (var reader = new StreamReader(_speciesstatsFileName))
                                {
                                    var json = await reader.ReadToEndAsync();
                                    var data = JsonConvert.DeserializeObject <ArkSpeciesStatsData>(json);
                                    if (data != null)
                                    {
                                        Data = data;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logging.LogException($"Error when attempting to read {_speciesstatsFileName}", ex, typeof(ArkSpeciesStats), LogLevel.ERROR, ExceptionLevel.Ignored);
                        }
                        finally
                        {
                            lock (_lock)
                            {
                                _updateTask = null;
                            }
                        }
                    });
                }
                else
                {
                    updateTask = _updateTask;
                }
            }

            await updateTask;
        }
Esempio n. 2
0
        public ArkSpeciesStatsData(ArkSpeciesStatsData values, List <ArkSpeciesStatsData> mods) : this()
        {
            if (values?.SpeciesStats != null)
            {
                SpeciesStats.AddRange(values.SpeciesStats);
            }

            foreach (var mod in mods)
            {
                if (mod?.SpeciesStats != null)
                {
                    SpeciesStats.AddRange(mod.SpeciesStats);
                }
            }
        }
Esempio n. 3
0
        public async Task LoadOrUpdate(int[] modIds)
        {
            Task updateTask = null;

            lock (_lock)
            {
                if (_updateTask == null)
                {
                    updateTask = _updateTask = Task.Run(async() =>
                    {
                        try
                        {
                            // values.json
                            var data = await DownloadResource <ArkSpeciesStatsData>(_obeliskUrl + _valuesUrl, _valuesFileName);
                            if (data != null)
                            {
                                Values = data;
                            }

                            // _manifest.json
                            var manifest = await DownloadResource <ObeliskManifest>(_obeliskUrl + _manifestUrl, _manifestFileName);
                            if (manifest != null)
                            {
                                Manifest = manifest;
                            }

                            // mods
                            if (modIds?.Length > 0)
                            {
                                foreach (var modId in modIds)
                                {
                                    var strModId = modId.ToString();
                                    var mod      = Manifest?.Files?.FirstOrDefault(x => x.Value?.Mod?.Id.Equals(strModId) == true);

                                    var modData = await DownloadResource <ArkSpeciesStatsData>(mod.HasValue ? _obeliskUrl + mod.Value.Key : null, $"obelisk-asb-species-{modId}.json", skipDownload: mod == null);
                                    if (modData != null)
                                    {
                                        ViewModel.Workspace.Instance.Console.AddLog("Loaded species data for " + (mod.HasValue ? $"{mod.Value.Value.Mod.Title} ({modId})" : $"'{modId}'") + ".");
                                        Mods.Add(modData);
                                    }
                                    else
                                    {
                                        ViewModel.Workspace.Instance.Console.AddLog($"Mod '{modId}' is not supported and could result in some data missing from the web app.");
                                    }
                                }
                            }

                            Data = new ArkSpeciesStatsData(Values, Mods);
                        }
                        finally
                        {
                            lock (_lock)
                            {
                                _updateTask = null;
                            }
                        }
                    });
                }
                else
                {
                    updateTask = _updateTask;
                }
            }

            await updateTask;
        }