Example #1
0
        private static string GetBrowserDownloadUrl(string dataString)
        {
            var jsonData = DivinityJsonUtils.SafeDeserialize <Dictionary <string, object> >(dataString);

            if (jsonData != null)
            {
                if (jsonData.TryGetValue("assets", out var assetsArray))
                {
                    JArray assets = (JArray)assetsArray;
                    foreach (var obj in assets.Children <JObject>())
                    {
                        if (obj.TryGetValue("browser_download_url", StringComparison.OrdinalIgnoreCase, out var browserUrl))
                        {
                            return(browserUrl.ToString());
                        }
                    }
                }
#if DEBUG
                var lines = jsonData.Select(kvp => kvp.Key + ": " + kvp.Value.ToString());
                DivinityApp.Log($"Can't find 'browser_download_url' in:\n{String.Join(Environment.NewLine, lines)}");
#endif
            }
            return("");
        }
        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);
        }
Example #3
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);
        }