Files
LeonOS/data/computercraft/lua/rom/update.lua
Leonmmcoset 44a44caffe fix(installer/updater): 修复版本显示和更新流程问题
- 在installer.lua中添加INSTALLER_VERSION常量替代_VERSION
- 更新update.lua中的版本检查流程和用户提示
- 改进updater的界面显示,添加顶部名称栏
- 统一更新确认提示为小写[y/n]
- 将"stage"改为更准确的"step"描述
2025-09-01 09:42:28 +08:00

86 lines
2.3 KiB
Lua

-- update: download a new copy of LeonOS
local rc = require("rc")
local term = require("term")
local colors = require("colors")
local textutils = require("textutils")
if not package.loaded.http then
io.stderr:write("The HTTP API is disabled and the updater cannot continue. Please enable the HTTP API in the ComputerCraft configuration and try again.\n")
return
end
term.at(1, 1).clear()
-- 程序顶部名称栏
local term = require("term")
local colors = require("colors")
-- 保存当前颜色设置
local old_fg = term.getTextColor()
local old_bg = term.getBackgroundColor()
-- 设置名称栏颜色并显示
term.setTextColor(colors.white)
term.setBackgroundColor(colors.cyan)
term.at(1, 1).clearLine()
term.at(1, 1).write("=== LeonOS Updater ===")
-- 恢复颜色设置
term.setTextColor(old_fg)
term.setBackgroundColor(old_bg)
term.at(1, 2)
-- 只清除顶栏以下的区域
for y=2, term.getSize() do
term.at(1, y).clearLine()
end
term.at(1, 2)
textutils.coloredPrint(colors.yellow,
"LeonOS Updater (Step 1)\n===========================")
print("Checking for update...")
local http = require("http")
local base = "https://gh.catmak.name/https://raw.githubusercontent.com/Leonmmcoset/LeonOS/refs/heads/main/"
local Bhandle, Berr = http.get(base .. "data/computercraft/lua/bios.lua")
if not Bhandle then
error(Berr, 0)
end
local first = Bhandle.readLine()
Bhandle.close()
local oldVersion = rc.version():gsub("LeonOS ", "")
local newVersion = first:match("LeonOS v?(%d+.%d+.%d+)")
if newVersion and (oldVersion ~= newVersion) or (...) == "-f" then
textutils.coloredPrint(colors.green, "Found", colors.white, ": ",
colors.red, oldVersion, colors.yellow, " -> ", colors.lime,
newVersion or oldVersion)
io.write("Apply update? [y/n]: ")
if io.read() ~= "y" then
textutils.coloredPrint(colors.red, "Not applying update.")
return
end
textutils.coloredPrint(colors.green, "Applying update.")
local handle, err = http.get(base.."updater.lua", nil, true)
if not handle then
error("Failed downloading step 2: " .. err, 0)
end
local data = handle.readAll()
handle.close()
local out = io.open("/.start_rc.lua", "w")
out:write(data)
out:close()
textutils.coloredWrite(colors.yellow, "Restarting...")
rc.sleep(3)
rc.reboot()
else
textutils.coloredPrint(colors.red, "None found")
end