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); } }
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)); }
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); }
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); } }