mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-18 22:18:38 -04:00
Fixed issues with restoring from legacy backups and cases when the database set fetched from backup package is different than the system one.
87 lines
2.8 KiB
Lua
87 lines
2.8 KiB
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)
|
|
-- Give some time to an user to view the displayed image
|
|
rec.sys.sleep(5)
|
|
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 = assert(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)
|
|
display_image(scripts[boot_reason].img_failure)
|
|
print(message)
|
|
end
|
|
|
|
local function handle_exit(boot_reason_str, status, message)
|
|
generate_report_file(boot_reason_str, status, message)
|
|
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)
|
|
|