예제 #1
0
        public static WorkshopFileDetailResponse GetSteamModDetails(string appId)
        {
            const int MAX_IDS = 100;

            var totalRequests = 0;
            var requestIndex  = 1;

            var response = new WorkshopFileDetailResponse();

            try
            {
                do
                {
                    var httpRequest = WebRequest.Create($"https://api.steampowered.com/IPublishedFileService/QueryFiles/v1/?key={Config.Default.SteamAPIKey}&format=json&query_type=1&page={requestIndex}&numperpage={MAX_IDS}&appid={appId}&match_all_tags=0&include_recent_votes_only=0&totalonly=0&return_vote_data=0&return_tags=0&return_kv_tags=0&return_previews=0&return_children=0&return_short_description=0&return_for_sale_data=0&return_metadata=1");
                    httpRequest.Timeout = 30000;
                    var httpResponse   = httpRequest.GetResponse();
                    var responseString = new StreamReader(httpResponse.GetResponseStream()).ReadToEnd();

                    var result = JsonUtils.Deserialize <WorkshopFileDetailResult>(responseString);
                    if (result == null || result.response == null)
                    {
                        break;
                    }

                    if (totalRequests == 0)
                    {
                        totalRequests = 1;
                        response      = result.response;

                        if (response.total > MAX_IDS)
                        {
                            int remainder;
                            totalRequests = Math.DivRem(response.total, MAX_IDS, out remainder);
                            if (remainder > 0)
                            {
                                totalRequests++;
                            }
                        }
                    }
                    else
                    {
                        if (result.response.publishedfiledetails != null)
                        {
                            response.publishedfiledetails.AddRange(result.response.publishedfiledetails);
                        }
                    }

                    requestIndex++;
                } while (requestIndex <= totalRequests);

                return(response);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"ERROR: {nameof(GetSteamModDetails)}\r\n{ex.Message}");
                return(null);
            }
        }
        private async Task LoadWorkshopItems(bool loadFromCacheFile)
        {
            var cursor = this.Cursor;

            try
            {
                Application.Current.Dispatcher.Invoke(() => this.Cursor = System.Windows.Input.Cursors.Wait);
                await Task.Delay(500);

                WorkshopFileDetailResponse localCache = null;
                WorkshopFileDetailResponse steamCache = null;

                await Task.Run(() => {
                    var file = Path.Combine(Config.Default.DataDir, _isSotF ? Config.Default.WorkshopCacheFile_SotF : Config.Default.WorkshopCacheFile);

                    // try to load the cache file.
                    localCache = WorkshopFileDetailResponse.Load(file);

                    if (loadFromCacheFile)
                    {
                        steamCache = localCache;

                        // check if the cache is old
                        if (localCache != null && localCache.cached.AddHours(Config.Default.WorkshopCache_ExpiredHours) < DateTime.UtcNow)
                        {
                            // cache is considered old, clear cache variable so it will reload from internet
                            steamCache = null;
                        }
                    }

                    // check if the cache exists
                    if (steamCache == null)
                    {
                        steamCache = SteamUtils.GetSteamModDetails(_isSotF ? Config.Default.AppId_SotF : Config.Default.AppId);
                        if (steamCache != null)
                        {
                            steamCache.Save(file);
                        }
                        else
                        {
                            MessageBox.Show(_globalizer.GetResourceString("WorkshopFiles_Refresh_FailedLabel"), _globalizer.GetResourceString("WorkshopFiles_Refresh_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
                            steamCache = localCache;
                        }
                    }
                });

                WorkshopFiles = WorkshopFileList.GetList(steamCache);
            }
            finally
            {
                Application.Current.Dispatcher.Invoke(() => this.Cursor = cursor);
            }
        }
예제 #3
0
        private async Task <WorkshopFileList> LoadWorkshopItemsAsync(bool isSotF)
        {
            WorkshopFileDetailResponse localCache = null;

            await Task.Run(() => {
                var file = Path.Combine(Config.Default.DataDir, isSotF ? Config.Default.WorkshopCacheFile_SotF : Config.Default.WorkshopCacheFile);

                // try to load the cache file.
                localCache = WorkshopFileDetailResponse.Load(file);
            });

            return(WorkshopFileList.GetList(localCache));
        }
예제 #4
0
        public static WorkshopFileList GetList(WorkshopFileDetailResponse response)
        {
            var result = new WorkshopFileList();

            if (response != null)
            {
                result.CachedTime = response.cached.ToLocalTime();
                if (response.publishedfiledetails != null)
                {
                    foreach (var detail in response.publishedfiledetails)
                    {
                        result.Add(WorkshopFileItem.GetItem(detail));
                    }
                }
            }
            return(result);
        }
예제 #5
0
        private async Task LoadWorkshopItems(bool loadFromCacheFile)
        {
            var cursor = this.Cursor;

            try
            {
                Application.Current.Dispatcher.Invoke(() => this.Cursor = System.Windows.Input.Cursors.Wait);
                await Task.Delay(500);

                WorkshopFileDetailResponse cache = null;

                await Task.Run(() => {
                    var file = Path.Combine(Config.Default.DataDir, _isSotF ? Config.Default.WorkshopCacheFile_SotF : Config.Default.WorkshopCacheFile);

                    if (loadFromCacheFile)
                    {
                        // try to load the cache file.
                        cache = WorkshopFileDetailResponse.Load(file);

                        // check if the cache is old
                        if (cache != null && cache.cached.AddHours(Config.Default.WorkshopCache_ExpiredHours) < DateTime.UtcNow)
                        {
                            // cache is considered old, clear cache variable so it will reload from internet
                            cache = null;
                        }
                    }

                    // check if the cache exists
                    if (cache == null)
                    {
                        cache = SteamUtils.GetSteamModDetails(_isSotF ? Config.Default.AppId_SotF : Config.Default.AppId);
                        if (cache != null)
                        {
                            cache.Save(file);
                        }
                    }
                });

                WorkshopFiles = WorkshopFileList.GetList(cache);
            }
            finally
            {
                Application.Current.Dispatcher.Invoke(() => this.Cursor = cursor);
            }
        }