Example #1
0
 public static void ToggleMod(string GUID, bool enable)
 {
     if (modDetails.TryGetValue(GUID, out ModDetails details))
     {
         if (CanToggleMod(GUID, out bool curEnabled))
         {
             if (curEnabled != enable)
             {
                 if (details.frogtownModDetails != null)
                 {
                     details.enabled = enable;
                     details.afterToggle?.Invoke(details);
                     details.frogtownModDetails.afterToggle?.Invoke();
                     var config = FrogtownShared.GetConfig();
                     config.Wrap("mods", GUID, "", "true").Value = enable.ToString();
                     config.Save();
                 }
                 else
                 {
                     SetNonFrogtownModStatus(details, enable);
                 }
             }
         }
     }
 }
Example #2
0
        internal void SaveSettings()
        {
            var config = FrogtownShared.GetConfig();

            config.Wrap("ui", "scale", "", "1").Value          = uiSettings.scale.ToString();
            config.Wrap("ui", "showonstart", "", "true").Value = uiSettings.showOnStart.ToString();
            config.Save();
        }
Example #3
0
        private void LoadSettings()
        {
            var config = FrogtownShared.GetConfig();

            string raw = config.Wrap("ui", "scale", "", "1").Value;

            if (!float.TryParse(raw, out uiSettings.scale))
            {
                uiSettings.scale = 1f;
            }
            uiSettings.scale = Mathf.Clamp(uiSettings.scale, 0.5f, 2f);

            raw = config.Wrap("ui", "showonstart", "", "true").Value;
            bool.TryParse(raw, out uiSettings.showOnStart);
        }
Example #4
0
        private static void FindActiveMods()
        {
            var config = FrogtownShared.GetConfig();

            var allModDetails =
                (from a in AppDomain.CurrentDomain.GetAssemblies()
                 from t in a.GetTypes()
                 let attributeList = t.GetCustomAttributes(typeof(BepInPlugin), true).Take(1)
                                     where attributeList != null && attributeList.Count() > 0
                                     let attribute = attributeList.First() as BepInPlugin
                                                     select new ModDetails(attribute, t.Assembly.Location)).ToArray();

            foreach (var info in allModDetails)
            {
                modDetails.Add(info.GUID, info);
                info.afterToggle += AfterModToggle;
                if (frogtownDetails.TryGetValue(info.GUID, out FrogtownModDetails frogDetails))
                {
                    info.frogtownModDetails = frogDetails;
                    frogDetails.modDetails  = info;

                    string raw            = config.Wrap("mods", info.GUID, "", "True").Value;
                    bool   shouldBeActive = raw.ToLower() == "true";
                    if (shouldBeActive)
                    {
                        ToggleMod(info.GUID, true);
                    }
                }
                else
                {
                    //Do not call ToggleMod because it will try to move DLLs around and shit like that.
                    //This is intializing the enabled properties and active mod count to reflect the actual
                    //state of what is loading.
                    info.enabled        = true;
                    info.initialEnabled = true;
                    info.afterToggle?.Invoke(info);
                }
            }
        }
Example #5
0
        internal static IEnumerator CheckForUpdates()
        {
            var config = FrogtownShared.GetConfig();

            foreach (string GUID in modDetails.Keys)
            {
                if (modDetails.TryGetValue(GUID, out ModDetails details))
                {
                    if (details.frogtownModDetails != null)
                    {
                        details.newVersionLoading = true;
                    }
                }
            }

            bool anyError = false;

            foreach (string GUID in modDetails.Keys)
            {
                if (modDetails.TryGetValue(GUID, out ModDetails details))
                {
                    if (details.frogtownModDetails != null)
                    {
                        string lastUpdateInst = config.Wrap("modupdates", "lastcheck-" + GUID, "", "0").Value;
                        if (long.TryParse(lastUpdateInst, out long updateInst))
                        {
                            DateTime lastUpdate = new DateTime(updateInst);
                            if (lastUpdate.AddDays(0.5) > DateTime.Now)
                            {
                                string newV = config.Wrap("modupdates", "newestversion-" + GUID, "", "0").Value;
                                if (newV.CompareTo(details.version) > 0)
                                {
                                    details.frogtownModDetails.newVersion = newV;
                                }

                                FrogtownShared.Log("FrogShared", LogLevel.Info, "Loaded new version of " + GUID + " from cache.");
                                details.newVersionLoading = false;
                                continue;
                            }
                        }

                        if (anyError)
                        {
                            details.newVersionLoading = false;
                            continue;
                        }

                        string url = "https://api.github.com/repos/" + details.frogtownModDetails.githubAuthor + "/" + details.frogtownModDetails.githubRepo + "/releases";
                        FrogtownShared.Log("FrogShared", LogLevel.Info, "Requesting " + url);
                        var req = UnityWebRequest.Get(url).SendWebRequest();
                        while (!req.isDone)
                        {
                            yield return(new WaitForEndOfFrame());
                        }
                        details.newVersionLoading = false;
                        if (req.webRequest.isHttpError || req.webRequest.isNetworkError)
                        {
                            FrogtownShared.Log("FrogShared", LogLevel.Error, "Error loading releases from " + url);
                            anyError = true;
                        }
                        else
                        {
                            try
                            {
                                string text = req.webRequest.downloadHandler.text;

                                string topRelease = "";
                                int    ix         = 0;
                                while ((ix = text.IndexOf("\"tag_name\": \"")) >= 0)
                                {
                                    text = text.Substring(ix + "\"tag_name\": \"".Length, text.Length - ix - "\"tag_name\": \"".Length);
                                    string version = text.Substring(0, text.IndexOf("\""));
                                    if (version.CompareTo(topRelease) > 0 && version.CompareTo(details.version) > 0)
                                    {
                                        topRelease = version;
                                    }
                                }
                                details.frogtownModDetails.newVersion = topRelease;
                            }
                            catch (Exception e)
                            {
                                FrogtownShared.Log("FrogShared", LogLevel.Info, "Error parsing JSON ");
                                FrogtownShared.Log("FrogShared", LogLevel.Info, e.Message + " " + e.StackTrace);
                            }
                            config.Wrap("modupdates", "lastcheck-" + GUID, "", "0").Value     = DateTime.Now.Ticks.ToString();
                            config.Wrap("modupdates", "newestversion-" + GUID, "", "0").Value = details.frogtownModDetails.newVersion;
                        }
                    }
                }
            }
            config.Save();
        }