mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-19 03:20:56 -05:00
89 lines
2.8 KiB
Lua
89 lines
2.8 KiB
Lua
package.path = package.path .. ";share/?.lua"
|
|
|
|
local helpers = require('helpers')
|
|
|
|
local paths = require('paths')
|
|
local rec = require('recovery')
|
|
local backup = require('backup')
|
|
local restore = require('restore')
|
|
local update = require('update')
|
|
local factory = require('factory')
|
|
|
|
local scripts = {}
|
|
scripts[rec.sys.boot_reason_codes.backup] = backup
|
|
scripts[rec.sys.boot_reason_codes.restore] = restore
|
|
scripts[rec.sys.boot_reason_codes.update] = update
|
|
scripts[rec.sys.boot_reason_codes.factory] = factory
|
|
|
|
--- Display image
|
|
-- @function display_image
|
|
-- @param path path to raw image data
|
|
local function display_image(path)
|
|
local raw_data = helpers.read_whole_file(path)
|
|
rec.gui.clear()
|
|
rec.gui.display_raw_img(600, 480, raw_data)
|
|
end
|
|
|
|
local function print_recovery_info()
|
|
print(string.format("PureRecovery version: %s, branch: %s, revision: %s", rec.version(), rec.branch(),
|
|
rec.revision()))
|
|
end
|
|
|
|
local function print_boot_reason()
|
|
print(string.format("Boot reason: %s", rec.sys.boot_reason_str()))
|
|
end
|
|
|
|
local function generate_report_file(boot_reason_str, success, message)
|
|
local file_path = paths.temp_dir .. "/recovery_status.json"
|
|
local body = string.format(
|
|
"{\"version\": \"%s\",\"branch\": \"%s\",\"revision\": \"%s\",\"operation\": \"%s\",\"successful\": %s,\"message\": \"%s\"}",
|
|
rec.version(), rec.branch(), rec.revision(), boot_reason_str, tostring(success), message)
|
|
local fd = io.open(file_path, 'w')
|
|
fd:write(body)
|
|
fd:close()
|
|
end
|
|
|
|
local function handle_boot_reason()
|
|
local boot_reason = rec.sys.boot_reason()
|
|
local boot_reason_str = rec.sys.boot_reason_str()
|
|
rec.sys.set_boot_reason(rec.sys.boot_reason_codes.os)
|
|
return boot_reason, boot_reason_str
|
|
end
|
|
|
|
local function handle_script_success(boot_reason)
|
|
display_image(scripts[boot_reason].img_success)
|
|
print("Finished successfully")
|
|
end
|
|
|
|
local function handle_script_failure(boot_reason, message)
|
|
print(message)
|
|
display_image(scripts[boot_reason].img_failure)
|
|
end
|
|
|
|
local function handle_exit(boot_reason_str, status, message)
|
|
generate_report_file(boot_reason_str, status, message)
|
|
rec.sys.sleep(1)
|
|
rec.gui.clear()
|
|
end
|
|
|
|
local function invoke_script(boot_reason)
|
|
print(string.format("Executing '%s' script...", scripts[boot_reason].script_name))
|
|
display_image(scripts[boot_reason].img_in_progress)
|
|
|
|
local status, message = pcall(scripts[boot_reason].execute)
|
|
if status then
|
|
handle_script_success(boot_reason)
|
|
return true, "ok"
|
|
else
|
|
handle_script_failure(boot_reason, message)
|
|
return false, message
|
|
end
|
|
end
|
|
|
|
print_recovery_info()
|
|
print_boot_reason()
|
|
local boot_reason, boot_reason_str = handle_boot_reason()
|
|
local status, message = invoke_script(boot_reason)
|
|
handle_exit(boot_reason_str, status, message)
|
|
|