adds .local/share/millennium and easyeffects

This commit is contained in:
2026-08-06 18:23:36 +02:00
parent f92fb90275
commit 8dc466cbac
2581 changed files with 339035 additions and 0 deletions
@@ -0,0 +1,248 @@
local millennium = require("millennium")
local fs = require("fs")
local json = require("json")
local utils = require("utils")
local logger = require("logger")
local install_extension = require("install_extension.init")
local legacy_extensions = require("legacy_extensions")
local EXTENDIUM_EXTERNAL_LINKS_FILE = "external-links.json"
local EXTENDIUM_INSTALL_STATE_FILE = "install-state.json"
local utils = require('utils')
local extendium_settings = {}
---@return string|nil
function GetPluginDir()
local backend_path = utils.get_backend_path()
if not backend_path then
return nil
end
return fs.parent_path(backend_path)
end
---@return string
function GetExternalLinks()
local plugin_dir = GetPluginDir()
if not plugin_dir then
logger:error("Failed to get plugin directory")
return "[]"
end
local external_links_path = fs.join(plugin_dir, EXTENDIUM_EXTERNAL_LINKS_FILE)
if fs.is_file(external_links_path) then
local content, err = utils.read_file(external_links_path)
if content then
return content
else
logger:error("Error reading external links " .. external_links_path .. ": " .. (err or "unknown error"))
end
end
return "[]"
end
---@param external_links string
---@return string
function UpdateExternalLinks(external_links)
local plugin_dir = GetPluginDir()
if not plugin_dir then
logger:error("Failed to get plugin directory")
return "error"
end
local external_links_path = fs.join(plugin_dir, EXTENDIUM_EXTERNAL_LINKS_FILE)
local success, err = utils.write_file(external_links_path, external_links)
if not success then
logger:error("Error writing external links " .. external_links_path .. ": " .. (err or "unknown error"))
end
return "success"
end
---@return table
function GetInstallState()
local plugin_dir = GetPluginDir()
if not plugin_dir then
logger:error("Failed to get plugin directory")
return {}
end
local state_path = fs.join(plugin_dir, EXTENDIUM_INSTALL_STATE_FILE)
if fs.is_file(state_path) then
local content, err = utils.read_file(state_path)
if content then
local state, decode_err = json.decode(content)
if state then
return state
else
logger:error("Error decoding install state " .. state_path .. ": " .. (decode_err or "unknown error"))
end
else
logger:error("Error reading install state " .. state_path .. ": " .. (err or "unknown error"))
end
end
return {}
end
---@param state table
---@return string
function SaveInstallState(state)
local plugin_dir = GetPluginDir()
if not plugin_dir then
logger:error("Failed to get plugin directory")
return "error"
end
local state_path = fs.join(plugin_dir, EXTENDIUM_INSTALL_STATE_FILE)
local state_json = json.encode(state)
local success, err = utils.write_file(state_path, state_json)
if not success then
logger:error("Error writing install state " .. state_path .. ": " .. (err or "unknown error"))
end
return "success"
end
---@param settings string
---@return string
function UpdateSettings(settings)
local settings = json.decode(settings)
if settings then
extendium_settings = settings
else
logger:error("Error decoding settings JSON")
end
return "success"
end
---@return string
function GetExtendiumInfo()
return json.encode({
externalLinks = GetExternalLinks(),
installState = GetInstallState(),
settings = extendium_settings,
})
end
---Install the fake-header-extension into Steam's Chromium preferences
---@return string JSON result with success status
function InstallInternalExtension()
logger:info("InstallExtension called from frontend")
return install_extension.install()
end
---Check if the extension is currently installed
---@return string JSON result with installation status
function CheckInternalExtensionStatus()
logger:info("CheckExtensionStatus called from frontend")
return install_extension.check_status()
end
function CheckIfInternalExtensionIsInstalled()
utils.sleep(3000)
local install_state = GetInstallState() or {}
if install_state.ignoreRequirement then
logger:info("Helper extension requirement is ignored, skipping check")
return false
end
local status_result = install_extension.check_status()
local status = json.decode(status_result)
if status and status.installed then
if install_state.installAttempted then
logger:info("Clearing previous install attempt flag")
SaveInstallState({
installAttempted = false,
installFailed = false,
lastChecked = os.time()
})
end
else
logger:info("Helper extension is not installed")
if install_state.installAttempted then
logger:error("Helper extension installation failed - extension not found after previous install attempt")
SaveInstallState({
installAttempted = true,
installFailed = true,
lastChecked = os.time(),
errorMessage = "Helper extension installation failed. Please try installing manually or check logs."
})
millennium.call_frontend_method("showExtensionInstallationFailedDialog")
return true
else
logger:info("First run - attempting to install helper extension")
SaveInstallState({
installAttempted = true,
installFailed = false,
lastChecked = os.time()
})
local install_result = install_extension.install()
local result = json.decode(install_result)
if result and result.success then
logger:info("Helper extension installation initiated successfully")
else
logger:error("Helper extension installation failed: " .. (result and result.error or "unknown error"))
SaveInstallState({
installAttempted = true,
installFailed = true,
lastChecked = os.time(),
errorMessage = result and result.error or "Installation failed with unknown error"
})
end
end
end
return false
end
---Mark the helper extension requirement as ignored so the failure dialog is skipped on startup
---@return string
function IgnoreInternalExtensionRequirement()
SaveInstallState({
installAttempted = false,
installFailed = false,
ignoreRequirement = true,
lastChecked = os.time()
})
logger:info("Internal extension requirement ignored")
return "success"
end
---Delete the .extensions folder
function DeleteLegacyExtensions()
return legacy_extensions.DeleteLegacyExtensions()
end
function on_load()
logger:info("Extendium loaded in Millennium version: " .. millennium.version())
millennium.ready()
end
function on_frontend_loaded()
local did_show_dialog = CheckIfInternalExtensionIsInstalled()
if not did_show_dialog then
legacy_extensions.HandleLegacyExtensions()
end
end
function on_unload()
logger:info("Extendium unloaded")
end
return {
on_load = on_load,
on_frontend_loaded = on_frontend_loaded,
on_unload = on_unload,
}