--#region Startup.lua (modified by SilentSalo) --#region Shortcuts local J = Utils.Joaat local F = string.format --#endregion --#region Enums local eFeatureHash = { SETTINGS = 4067697962, TRANSLATIONS = 476570075, THEMES = 3578289549, LOAD_SETTINGS = 726878929, LOAD_TRANSLATION = 1079343186, LOAD_THEME = 2958805088 } --#endregion --#region Variables local DEFAULT_SETTINGS = "Empty" local DEFAULT_TRANSLATION = "TranslationFile" local DEFAULT_THEME = "Original.json" local SETTINGS = nil local TRANSLATION = nil local THEME = nil local AUTO_SETTINGS = nil local AUTO_TRANSLATION = nil local AUTO_THEME = nil local INITIALIZED = false --#endregion --#region Startup.ini local INI_FILE_PATH = F("%s\\Lua\\Startup.ini", FileMgr.GetMenuRootPath()) local function SaveStartupIni() local content = F( "Settings=%s\nTranslation=%s\nTheme=%s\nAutoSettings=%s\nAutoTranslation=%s\nAutoTheme=%s", SETTINGS, TRANSLATION, THEME, tostring(AUTO_SETTINGS), tostring(AUTO_TRANSLATION), tostring(AUTO_THEME) ) if not FileMgr.WriteFileContent(INI_FILE_PATH, content, false) then Logger.Log("Failed to write 'Startup.ini' file due to an unknown error.") SetShouldUnload() end end local function LoadStartupIni() if not FileMgr.DoesFileExist(INI_FILE_PATH) then SETTINGS = DEFAULT_SETTINGS TRANSLATION = DEFAULT_TRANSLATION THEME = DEFAULT_THEME AUTO_SETTINGS = false AUTO_TRANSLATION = false AUTO_THEME = false Logger.Log("'Startup.ini' file doesn't exist. File created. Using defaults.") SaveStartupIni() return end local content = FileMgr.ReadFileContent(INI_FILE_PATH) if not content or content == "" then SETTINGS = DEFAULT_SETTINGS TRANSLATION = DEFAULT_TRANSLATION THEME = DEFAULT_THEME AUTO_SETTINGS = false AUTO_TRANSLATION = false AUTO_THEME = false SaveStartupIni() Logger.Log("'Startup.ini' file is empty or corrupted. Using defaults.") return end for line in string.gmatch(content, "[^\r\n]+") do local key, value = string.match(line, "^(%w+)=(.+)$") if key and value then if key == "Settings" then SETTINGS = value end if key == "Translation" then TRANSLATION = value end if key == "Theme" then THEME = value end if key == "AutoSettings" then AUTO_SETTINGS = (value == "true") end if key == "AutoTranslation" then AUTO_TRANSLATION = (value == "true") end if key == "AutoTheme" then AUTO_THEME = (value == "true") end end end local isCorrupted = false if SETTINGS == nil then isCorrupted = true end if TRANSLATION == nil then isCorrupted = true end if THEME == nil then isCorrupted = true end if AUTO_SETTINGS == nil then isCorrupted = true end if AUTO_TRANSLATION == nil then isCorrupted = true end if AUTO_THEME == nil then isCorrupted = true end if isCorrupted then if SETTINGS == nil then SETTINGS = DEFAULT_SETTINGS AUTO_SETTINGS = false end if TRANSLATION == nil then TRANSLATION = DEFAULT_TRANSLATION AUTO_TRANSLATION = false end if THEME == nil then THEME = DEFAULT_THEME AUTO_THEME = false end if AUTO_SETTINGS == nil then AUTO_SETTINGS = false end if AUTO_TRANSLATION == nil then AUTO_TRANSLATION = false end if AUTO_THEME == nil then AUTO_THEME = false end SaveStartupIni() Logger.Log("'Startup.ini' file is corrupted. Using defaults for missing values.") end end --#endregion --#region Wrappers local _Log = Logger.Log function Logger.Log(str) _Log(eLogColor.LIGHTCYAN, "Settings", str) GUI.AddToast("Settings", str, 7000, eToastPos.TOP_RIGHT) end function Feature:GetListIndexByString(str) local list = self:GetList() if not list then return nil end for key, value in ipairs(list) do if value == str then return key - 1 end end FileMgr.DeleteFile(INI_FILE_PATH) Logger.Log(F("'Startup.ini' references to a bad entry: '%s' in feature '%s'.", str, self:GetName())) Logger.Log("'Startup.ini' file has been deleted to prevent further issues.") Logger.Log("'Startup.lua' needs to be restarted.") SetShouldUnload() return nil end function Feature:SetListIndexByString(str) local list = self:GetList() if not list then return self end for key, value in ipairs(list) do if value == str then self:SetListIndex(key - 1) return self end end FileMgr.DeleteFile(INI_FILE_PATH) Logger.Log(F("'Startup.ini' references to a bad entry: '%s' in feature '%s'.", str, self:GetName())) Logger.Log("'Startup.ini' file has been deleted to prevent further issues.") Logger.Log("'Startup.lua' needs to be restarted.") SetShouldUnload() return self end --#endregion --#region Features local ftrAutoSettings = { hash = J("AUTO_SETTINGS"), name = "Auto-Load Settings", type = eFeatureType.Toggle, desc = "Auto-loads the selected settings on startup." } local ftrAutoTranslation = { hash = J("AUTO_TRANSLATION"), name = "Auto-Load Translation", type = eFeatureType.Toggle, desc = "Auto-loads the selected translation on startup." } local ftrAutoTheme = { hash = J("AUTO_THEME"), name = "Auto-Load Theme", type = eFeatureType.Toggle, desc = "Auto-loads the selected theme on startup." } FeatureMgr.AddFeature(ftrAutoSettings.hash, ftrAutoSettings.name, ftrAutoSettings.type, ftrAutoSettings.desc, function(f) local selectedSettings = FeatureMgr.GetCurrentFeatureListString(eFeatureHash.SETTINGS) if f:IsToggled() then if selectedSettings ~= SETTINGS then SETTINGS = selectedSettings AUTO_SETTINGS = true else AUTO_SETTINGS = true end else if selectedSettings == SETTINGS then AUTO_SETTINGS = false end end SaveStartupIni() end) FeatureMgr.AddFeature(ftrAutoTranslation.hash, ftrAutoTranslation.name, ftrAutoTranslation.type, ftrAutoTranslation.desc, function(f) local selectedTranslation = FeatureMgr.GetCurrentFeatureListString(eFeatureHash.TRANSLATIONS) if f:IsToggled() then if selectedTranslation ~= TRANSLATION then TRANSLATION = selectedTranslation AUTO_TRANSLATION = true else AUTO_TRANSLATION = true end else if selectedTranslation == TRANSLATION then AUTO_TRANSLATION = false end end SaveStartupIni() end) FeatureMgr.AddFeature(ftrAutoTheme.hash, ftrAutoTheme.name, ftrAutoTheme.type, ftrAutoTheme.desc, function(f) local selectedTheme = FeatureMgr.GetCurrentFeatureListString(eFeatureHash.THEMES) if f:IsToggled() then if selectedTheme ~= THEME then THEME = selectedTheme AUTO_THEME = true else AUTO_THEME = true end else if selectedTheme == THEME then AUTO_THEME = false end end SaveStartupIni() end) --#endregion --#region Main Script.QueueJob(function() Script.Yield(1000) if not GUI.IsOpen() then GUI.Toggle() end LoadStartupIni() FeatureMgr.GetFeature(eFeatureHash.SETTINGS):AddRenderAfter(FeatureMgr.GetFeature(ftrAutoSettings.hash)) FeatureMgr.GetFeature(eFeatureHash.TRANSLATIONS):AddRenderAfter(FeatureMgr.GetFeature(ftrAutoTranslation.hash)) FeatureMgr.GetFeature(eFeatureHash.THEMES):AddRenderAfter(FeatureMgr.GetFeature(ftrAutoTheme.hash)) if SETTINGS == DEFAULT_SETTINGS and AUTO_SETTINGS then AUTO_SETTINGS = false end if AUTO_SETTINGS then if not FeatureMgr.GetFeature(eFeatureHash.SETTINGS):GetListIndexByString(SETTINGS) then return end FeatureMgr.GetFeature(eFeatureHash.SETTINGS):SetListIndexByString(SETTINGS) local temp1 = AUTO_SETTINGS local temp2 = AUTO_TRANSLATION local temp3 = AUTO_THEME while not FeatureMgr.LoadSettings(SETTINGS) do Script.Yield() end AUTO_SETTINGS = temp1 AUTO_TRANSLATION = temp2 AUTO_THEME = temp3 Logger.Log(F("Successfully loaded settings '%s'.", SETTINGS:gsub("%.json$", ""))) end if AUTO_TRANSLATION then if not FeatureMgr.GetFeature(eFeatureHash.TRANSLATIONS):GetListIndexByString(TRANSLATION) then return end FeatureMgr.GetFeature(eFeatureHash.TRANSLATIONS):SetListIndexByString(TRANSLATION) FeatureMgr.GetFeature(eFeatureHash.LOAD_TRANSLATION):OnClick() Logger.Log(F("Successfully loaded translation '%s'.", TRANSLATION)) end if AUTO_THEME then if not FeatureMgr.GetFeature(eFeatureHash.THEMES):GetListIndexByString(THEME) then return end FeatureMgr.GetFeature(eFeatureHash.THEMES):SetListIndexByString(THEME) FeatureMgr.GetFeature(eFeatureHash.LOAD_THEME):OnClick() Logger.Log(F("Successfully loaded theme '%s'.", THEME:gsub("%.json$", ""))) end INITIALIZED = true end) --#endregion --#region On Present EventMgr.RegisterHandler(eLuaEvent.ON_PRESENT, function() if not INITIALIZED then return end if FeatureMgr.GetCurrentFeatureListString(eFeatureHash.TRANSLATIONS) ~= TRANSLATION then FeatureMgr.GetFeature(ftrAutoTranslation.hash):Toggle(false) else if AUTO_TRANSLATION then FeatureMgr.GetFeature(ftrAutoTranslation.hash):Toggle(true) end end if FeatureMgr.GetCurrentFeatureListString(eFeatureHash.THEMES) ~= THEME then FeatureMgr.GetFeature(ftrAutoTheme.hash):Toggle(false) else if AUTO_THEME then FeatureMgr.GetFeature(ftrAutoTheme.hash):Toggle(true) end end if FeatureMgr.GetCurrentFeatureListString(eFeatureHash.SETTINGS) ~= SETTINGS then FeatureMgr.GetFeature(ftrAutoSettings.hash):Toggle(false) else if AUTO_SETTINGS then FeatureMgr.GetFeature(ftrAutoSettings.hash):Toggle(true) end end end) --#endregion --#region On Unload EventMgr.RegisterHandler(eLuaEvent.ON_UNLOAD, function() FeatureMgr.GetFeature(eFeatureHash.TRANSLATIONS):RemoveRenderAfter(FeatureMgr.GetFeature(ftrAutoTranslation.hash)) FeatureMgr.GetFeature(eFeatureHash.THEMES):RemoveRenderAfter(FeatureMgr.GetFeature(ftrAutoTheme.hash)) FeatureMgr.GetFeature(eFeatureHash.SETTINGS):RemoveRenderAfter(FeatureMgr.GetFeature(ftrAutoSettings.hash)) end) --#endregion --#endregion