Пример #1
0
        /// <summary>
        /// Fetch a list of Abuse Report categories from the simulator
        /// </summary>
        /// <param name="lang">language to return categories in</param>
        /// <returns>Returns Dictionary<string, string> of Abuse Report categories from the server</returns>
        public Dictionary <string, string> FetchAbuseReportCategories(string lang)
        {
            Dictionary <string, string> reportCategories = null;
            Uri abuseCategoriesCap = Client.Network.CurrentSim.Caps.CapabilityURI("AbuseCategories");

            if (abuseCategoriesCap != null)
            {
                if (lang != null)
                {
                    // s***e C# nonsense
                    UriBuilder builder = new UriBuilder(abuseCategoriesCap);
                    builder.Query      = $"lc={lang}";
                    abuseCategoriesCap = builder.Uri;
                }

                var request = new CapsClient(abuseCategoriesCap);
                request.OnComplete += delegate(CapsClient client, OSD result, Exception error)
                {
                    if (error != null)
                    {
                        Logger.Log($"Could not fetch abuse categories from cap. ({error.Message}",
                                   Helpers.LogLevel.Info);
                        return;
                    }
                    if (result != null && result is OSDMap respMap && respMap.ContainsKey("categories"))
                    {
                        reportCategories = new Dictionary <string, string>();
                        var categories = respMap["categories"] as OSDArray;
                        foreach (OSDMap row in categories)
                        {
                            reportCategories.Add(
                                row["description_localized"].AsString(), row["category"].AsString());
                        }
                    }
                };
                request.GetRequestAsync(Client.Settings.CAPS_TIMEOUT);
            }
            else
            {
                Logger.Log("AbuseCategories capability does not exist. Could not fetch categories list.",
                           Helpers.LogLevel.Info);
            }
            return(reportCategories);
        }