get rid of console thread for OpenRecoveryScript

- CLI commands run in a threaded action "twcmd"
- Console is displayed via "singleaction_page"
- move ORS execution code from GUI action to OpenRecoveryScript class
- remove unused function gui_changePackage
- don't change PageManager package in home action
- fix that /tmp/openrecoveryscript was not deleted after execution

Change-Id: Ic688c0b04647ce09e9db979b0bc5123f47cf4f70
This commit is contained in:
that
2015-12-26 20:53:51 +01:00
committed by Ethan Yonker
parent 0af1ac13d1
commit 10ae24ff94
8 changed files with 144 additions and 176 deletions
+68
View File
@@ -48,6 +48,8 @@ extern "C" {
int TWinstall_zip(const char* path, int* wipe_cache);
}
OpenRecoveryScript::VoidFunction OpenRecoveryScript::call_after_cli_command;
#define SCRIPT_COMMAND_SIZE 512
int OpenRecoveryScript::check_for_script_file(void) {
@@ -398,6 +400,7 @@ int OpenRecoveryScript::run_script_file(void) {
}
}
fclose(fp);
unlink(SCRIPT_FILE_TMP);
gui_msg("done_ors=Done processing script file");
} else {
gui_msg(Msg(msg::kError, "error_opening_strerr=Error opening: '{1}' ({2})")(SCRIPT_FILE_TMP)(strerror(errno)));
@@ -569,9 +572,11 @@ int OpenRecoveryScript::Backup_Command(string Options) {
return 0;
}
// this is called by main()
void OpenRecoveryScript::Run_OpenRecoveryScript(void) {
DataManager::SetValue("tw_back", "main");
DataManager::SetValue("tw_action", "openrecoveryscript");
DataManager::SetValue("tw_action_param", "");
DataManager::SetValue("tw_has_action2", "0");
DataManager::SetValue("tw_action2", "");
DataManager::SetValue("tw_action2_param", "");
@@ -589,3 +594,66 @@ void OpenRecoveryScript::Run_OpenRecoveryScript(void) {
LOGERR("Failed to load OpenRecoveryScript GUI page.\n");
}
}
// this is called by the "openrecoveryscript" GUI action called via action page from Run_OpenRecoveryScript
int OpenRecoveryScript::Run_OpenRecoveryScript_Action() {
int op_status = 1;
// Check for the SCRIPT_FILE_TMP first as these are AOSP recovery commands
// that we converted to ORS commands during boot in recovery.cpp.
// Run those first.
int reboot = 0;
if (TWFunc::Path_Exists(SCRIPT_FILE_TMP)) {
gui_msg("running_recovery_commands=Running Recovery Commands");
if (OpenRecoveryScript::run_script_file() == 0) {
reboot = 1;
op_status = 0;
}
}
// Check for the ORS file in /cache and attempt to run those commands.
if (OpenRecoveryScript::check_for_script_file()) {
gui_msg("running_ors=Running OpenRecoveryScript");
if (OpenRecoveryScript::run_script_file() == 0) {
reboot = 1;
op_status = 0;
}
}
if (reboot) {
// Disable stock recovery reflashing
TWFunc::Disable_Stock_Recovery_Replace();
usleep(2000000); // Sleep for 2 seconds before rebooting
TWFunc::tw_reboot(rb_system);
usleep(5000000); // Sleep for 5 seconds to allow reboot to occur
} else {
DataManager::SetValue("tw_page_done", 1);
}
return op_status;
}
// this is called by the "twcmd" GUI action when a command is received via FIFO from the "twrp" command line tool
void OpenRecoveryScript::Run_CLI_Command(const char* command) {
if (strlen(command) > 11 && strncmp(command, "runscript", 9) == 0) {
const char* filename = command + 10;
if (OpenRecoveryScript::copy_script_file(filename) == 0) {
LOGINFO("Unable to copy script file\n");
} else {
OpenRecoveryScript::run_script_file();
}
} else if (strlen(command) > 5 && strncmp(command, "get", 3) == 0) {
const char* varname = command + 4;
string value;
DataManager::GetValue(varname, value);
gui_print("%s = %s\n", varname, value.c_str());
} else if (strlen(command) > 9 && strncmp(command, "decrypt", 7) == 0) {
const char* pass = command + 8;
gui_msg("decrypt_cmd=Attempting to decrypt data partition via command line.");
if (PartitionManager.Decrypt_Device(pass) == 0) {
// set_page_done = 1; // done by singleaction_page anyway
}
} else if (OpenRecoveryScript::Insert_ORS_Command(command)) {
OpenRecoveryScript::run_script_file();
}
// let the GUI close the output fd and restart the command listener
call_after_cli_command();
LOGINFO("Done reading ORS command from command line\n");
}