private void commitAddModButton_Click(object sender, EventArgs e) { List <string> temp = new List <string>(); temp.Add(modSearchTermTextBox.Text); PublishedFileDetailsResponse wsFile = SteamWorkshop.GetSteamModDetails(temp); if (wsFile.publishedfiledetails == null) { MessageBox.Show("Mod was not found. Please try again."); return; } PublishedFileDetail wsDetail = wsFile.publishedfiledetails[0]; Mod newMod = new Mod() { Name = wsDetail.title, Id = Convert.ToUInt32(modSearchTermTextBox.Text), LastUpdate = SteamWorkshop.FromUnixTime(wsDetail.time_updated) }; Profiles.currentProfile.mods[Profiles.currentProfile.mods.Count + 1] = newMod; Profiles.currentProfile.save(); ConfigUI.LoadProfileMods(Profiles.currentProfile.mods); Close(); }
public static PublishedFileDetailsResponse GetSteamModDetails(List <string> modIdList) { const int MAX_IDS = 20; PublishedFileDetailsResponse response = null; try { if (modIdList.Count == 0) { return(new PublishedFileDetailsResponse()); } modIdList = ModUtils.ValidateModList(modIdList); int remainder; var totalRequests = Math.DivRem(modIdList.Count, MAX_IDS, out remainder); if (remainder > 0) { totalRequests++; } var requestIndex = 0; while (requestIndex < totalRequests) { var count = 0; var postData = ""; for (var index = requestIndex * MAX_IDS; count < MAX_IDS && index < modIdList.Count; index++) { postData += $"&publishedfileids[{count}]={modIdList[index]}"; count++; } postData = $"key={Config.Default.SteamAPIKey}&format=json&itemcount={count}{postData}"; var data = Encoding.ASCII.GetBytes(postData); var httpRequest = WebRequest.Create("https://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1/"); httpRequest.Timeout = 30000; httpRequest.Method = "POST"; httpRequest.ContentType = "application/x-www-form-urlencoded"; httpRequest.ContentLength = data.Length; using (var stream = httpRequest.GetRequestStream()) { stream.Write(data, 0, data.Length); } var httpResponse = (HttpWebResponse)httpRequest.GetResponse(); var responseString = new StreamReader(httpResponse.GetResponseStream()).ReadToEnd(); var result = JsonUtils.Deserialize <PublishedFileDetailsResult>(responseString); if (result != null && result.response != null) { if (response == null) { response = result.response; } else { response.resultcount += result.response.resultcount; response.publishedfiledetails.AddRange(result.response.publishedfiledetails); } } requestIndex++; } ; return(response ?? new PublishedFileDetailsResponse()); } catch (Exception ex) { Debug.WriteLine($"ERROR: {nameof(GetSteamModDetails)}\r\n{ex.Message}"); return(null); } }
public static async Task <int> LoadAllWorkshopDataAsync(List <DivinityModData> workshopMods, DivinityModManagerCachedWorkshopData cachedData) { if (workshopMods == null || workshopMods.Count == 0) { return(0); } //var workshopMods = mods.Where(x => !String.IsNullOrEmpty(x.WorkshopData.ID)).ToList(); var values = new Dictionary <string, string> { { "itemcount", workshopMods.Count.ToString() } }; int i = 0; foreach (var mod in workshopMods) { values.Add($"publishedfileids[{i}]", mod.WorkshopData.ID); i++; } Trace.WriteLine($"Updating workshop data for mods."); string responseData = ""; try { var content = new FormUrlEncodedContent(values); var response = await WebHelper.Client.PostAsync(STEAM_API_GET_WORKSHOP_DATA_URL, content); responseData = await response.Content.ReadAsStringAsync(); } catch (Exception ex) { Trace.WriteLine($"Error requesting Steam API to get workshop mod data:\n{ex.ToString()}"); } int totalLoaded = 0; if (!String.IsNullOrEmpty(responseData)) { PublishedFileDetailsResponse pResponse = DivinityJsonUtils.SafeDeserialize <PublishedFileDetailsResponse>(responseData); if (pResponse != null && pResponse.response != null && pResponse.response.publishedfiledetails != null && pResponse.response.publishedfiledetails.Count > 0) { var details = pResponse.response.publishedfiledetails; foreach (var d in details) { try { var mod = workshopMods.FirstOrDefault(x => x.WorkshopData.ID == d.publishedfileid); if (mod != null) { mod.WorkshopData.CreatedDate = DateUtils.UnixTimeStampToDateTime(d.time_created); mod.WorkshopData.UpdatedDate = DateUtils.UnixTimeStampToDateTime(d.time_updated); if (d.tags != null && d.tags.Count > 0) { mod.WorkshopData.Tags = GetWorkshopTags(d); mod.AddTags(mod.WorkshopData.Tags); } cachedData.AddOrUpdate(mod.UUID, d, mod.WorkshopData.Tags); //Trace.WriteLine($"Loaded workshop details for mod {mod.Name}:"); totalLoaded++; } } catch (Exception ex) { Trace.WriteLine($"Error parsing mod data for {d.title}({d.publishedfileid})\n{ex.ToString()}"); } } Trace.WriteLine($"Successfully loaded workshop data for {totalLoaded} mods."); } else { Trace.WriteLine("Failed to load workshop data for mods."); Trace.WriteLine($"{responseData}"); } } else { Trace.WriteLine("Failed to load workshop data for mods - no response data."); } return(totalLoaded); }
public static async Task <Unit> LoadAllWorkshopDataAsync(List <DivinityModData> workshopMods) { if (workshopMods.Count == 0) { return(Unit.Default); } //var workshopMods = mods.Where(x => !String.IsNullOrEmpty(x.WorkshopData.ID)).ToList(); var values = new Dictionary <string, string> { { "itemcount", workshopMods.Count.ToString() } }; int i = 0; foreach (var mod in workshopMods) { values.Add($"publishedfileids[{i}]", mod.WorkshopData.ID); i = i + 1; } Trace.WriteLine($"Attempting to get workshop data from mods."); string responseData = ""; try { var content = new FormUrlEncodedContent(values); var response = await WebHelper.Client.PostAsync(STEAM_API_GET_WORKSHOP_DATA_URL, content); responseData = await response.Content.ReadAsStringAsync(); } catch (Exception ex) { Trace.WriteLine($"Error requesting Steam API to get workshop mod data:\n{ex.ToString()}"); } if (!String.IsNullOrEmpty(responseData)) { PublishedFileDetailsResponse pResponse = DivinityJsonUtils.SafeDeserialize <PublishedFileDetailsResponse>(responseData); if (pResponse != null && pResponse.response != null && pResponse.response.publishedfiledetails != null && pResponse.response.publishedfiledetails.Count > 0) { int totalLoaded = 0; var details = pResponse.response.publishedfiledetails; foreach (var d in details) { try { var mod = workshopMods.FirstOrDefault(x => x.WorkshopData.ID == d.publishedfileid); if (mod != null) { if (d.tags != null && d.tags.Count > 0) { mod.WorkshopData.Tags = d.tags.Select(x => x.tag).ToList(); //Trace.WriteLine($"Tags: {String.Join(";", mod.WorkshopData.Tags)}"); } mod.WorkshopData.PreviewUrl = d.preview_url; mod.WorkshopData.Title = d.title; mod.WorkshopData.Description = d.description; mod.WorkshopData.CreatedDate = DateUtils.UnixTimeStampToDateTime(d.time_created); mod.WorkshopData.UpdatedDate = DateUtils.UnixTimeStampToDateTime(d.time_updated); mod.WorkshopData.Subscriptions = d.subscriptions; mod.WorkshopData.LifetimeSubscriptions = d.lifetime_subscriptions; mod.WorkshopData.Favorites = d.favorited; mod.WorkshopData.LifetimeFavorites = d.lifetime_favorited; mod.WorkshopData.Views = d.views; //Trace.WriteLine($"Loaded workshop details for mod {mod.Name}:"); totalLoaded++; } } catch (Exception ex) { Trace.WriteLine($"Error parsing mod data for {d.title}({d.publishedfileid})\n{ex.ToString()}"); } } Trace.WriteLine($"Successfully loaded workshop data for {totalLoaded} mods."); } else { Trace.WriteLine("Failed to load workshop data for mods."); Trace.WriteLine($"{responseData}"); } } else { Trace.WriteLine("Failed to load workshop data for mods - no response data."); } return(Unit.Default); }
public static ModDetailList GetModDetails(List <string> modIdList, string modsRootFolder, WorkshopFileList workshopFiles, PublishedFileDetailsResponse response) { var result = new ModDetailList(); if (modIdList != null) { foreach (var modId in modIdList) { var temp = workshopFiles?.FirstOrDefault(w => w.WorkshopId.Equals(modId)); result.Add(new ModDetail() { AppId = temp?.AppId ?? string.Empty, ModId = modId, TimeUpdated = -1, Title = temp?.Title ?? "Mod name not available", IsValid = false, }); } } if (response?.publishedfiledetails != null) { foreach (var item in result) { var temp = response.publishedfiledetails.FirstOrDefault(w => w.publishedfileid.Equals(item.ModId)); if (temp != null) { item.AppId = temp?.creator_app_id ?? string.Empty; item.ModId = temp?.publishedfileid ?? item.ModId; item.TimeUpdated = temp?.time_updated ?? item.TimeUpdated; item.Title = temp?.title ?? item.Title; item.IsValid = temp?.creator_app_id != null; } } } result.SetPublishedFileIndex(); result.PopulateExtended(modsRootFolder); return(result); }