コード例 #1
0
        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();
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }