summaryrefslogtreecommitdiffstats
path: root/openrecoveryscript.cpp
diff options
context:
space:
mode:
authorDees_Troy <dees_troy@teamw.in>2013-04-02 22:22:16 +0200
committerDees_Troy <dees_troy@teamw.in>2013-04-04 20:57:34 +0200
commit2673cec07a4740f86438b50cfe1b70b258a9a8c8 (patch)
tree3133d98e33eba4fab9760f9a4a54aeac83107119 /openrecoveryscript.cpp
parentAdd partition list GUI element (diff)
downloadandroid_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar.gz
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar.bz2
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar.lz
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar.xz
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.tar.zst
android_bootable_recovery-2673cec07a4740f86438b50cfe1b70b258a9a8c8.zip
Diffstat (limited to 'openrecoveryscript.cpp')
-rw-r--r--openrecoveryscript.cpp159
1 files changed, 81 insertions, 78 deletions
diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp
index 5a23c1d4a..a842d3370 100644
--- a/openrecoveryscript.cpp
+++ b/openrecoveryscript.cpp
@@ -35,7 +35,7 @@
#include "twrp-functions.hpp"
#include "partitions.hpp"
-#include "common.h"
+#include "twcommon.h"
#include "openrecoveryscript.hpp"
#include "variables.h"
#include "adb_install.h"
@@ -46,16 +46,15 @@ extern "C" {
int TWinstall_zip(const char* path, int* wipe_cache);
}
-extern RecoveryUI* ui;
#define SCRIPT_COMMAND_SIZE 512
int OpenRecoveryScript::check_for_script_file(void) {
if (!PartitionManager.Mount_By_Path(SCRIPT_FILE_CACHE, false)) {
- LOGE("Unable to mount /cache for OpenRecoveryScript support.\n");
+ LOGERR("Unable to mount /cache for OpenRecoveryScript support.\n");
return 0;
}
if (TWFunc::Path_Exists(SCRIPT_FILE_CACHE)) {
- LOGI("Script file found: '%s'\n", SCRIPT_FILE_CACHE);
+ LOGINFO("Script file found: '%s'\n", SCRIPT_FILE_CACHE);
// Copy script file to /tmp
TWFunc::copy_file(SCRIPT_FILE_CACHE, SCRIPT_FILE_TMP, 0755);
// Delete the file from /cache
@@ -81,7 +80,7 @@ int OpenRecoveryScript::run_script_file(void) {
line_len = strlen(script_line);
if (line_len < 2)
continue; // there's a blank line or line is too short to contain a command
- //ui_print("script line: '%s'\n", script_line);
+ //gui_print("script line: '%s'\n", script_line);
for (i=0; i<line_len; i++) {
if ((int)script_line[i] == 32) {
cindex = i;
@@ -96,14 +95,14 @@ int OpenRecoveryScript::run_script_file(void) {
remove_nl = 1;
if (cindex != 0) {
strncpy(command, script_line, cindex);
- LOGI("command is: '%s' and ", command);
+ LOGINFO("command is: '%s' and ", command);
val_start = script_line;
val_start += cindex + 1;
strncpy(value, val_start, line_len - cindex - remove_nl);
- LOGI("value is: '%s'\n", value);
+ LOGINFO("value is: '%s'\n", value);
} else {
strncpy(command, script_line, line_len - remove_nl + 1);
- ui_print("command is: '%s' and there is no value\n", command);
+ gui_print("command is: '%s' and there is no value\n", command);
}
if (strcmp(command, "install") == 0) {
// Install Zip
@@ -114,19 +113,19 @@ int OpenRecoveryScript::run_script_file(void) {
} else if (strcmp(command, "wipe") == 0) {
// Wipe
if (strcmp(value, "cache") == 0 || strcmp(value, "/cache") == 0) {
- ui_print("-- Wiping Cache Partition...\n");
+ gui_print("-- Wiping Cache Partition...\n");
PartitionManager.Wipe_By_Path("/cache");
- ui_print("-- Cache Partition Wipe Complete!\n");
+ gui_print("-- Cache Partition Wipe Complete!\n");
} else if (strcmp(value, "dalvik") == 0 || strcmp(value, "dalvick") == 0 || strcmp(value, "dalvikcache") == 0 || strcmp(value, "dalvickcache") == 0) {
- ui_print("-- Wiping Dalvik Cache...\n");
+ gui_print("-- Wiping Dalvik Cache...\n");
PartitionManager.Wipe_Dalvik_Cache();
- ui_print("-- Dalvik Cache Wipe Complete!\n");
+ gui_print("-- Dalvik Cache Wipe Complete!\n");
} else if (strcmp(value, "data") == 0 || strcmp(value, "/data") == 0 || strcmp(value, "factory") == 0 || strcmp(value, "factoryreset") == 0) {
- ui_print("-- Wiping Data Partition...\n");
+ gui_print("-- Wiping Data Partition...\n");
PartitionManager.Factory_Reset();
- ui_print("-- Data Partition Wipe Complete!\n");
+ gui_print("-- Data Partition Wipe Complete!\n");
} else {
- LOGE("Error with wipe command value: '%s'\n", value);
+ LOGERR("Error with wipe command value: '%s'\n", value);
ret_val = 1;
}
} else if (strcmp(command, "backup") == 0) {
@@ -148,7 +147,7 @@ int OpenRecoveryScript::run_script_file(void) {
remove_nl = 0;
strncpy(value2, tok, line_len - remove_nl);
DataManager::SetValue(TW_BACKUP_NAME, value2);
- ui_print("Backup folder set to '%s'\n", value2);
+ gui_print("Backup folder set to '%s'\n", value2);
if (PartitionManager.Check_Backup_Name(true) != 0) {
ret_val = 1;
continue;
@@ -177,27 +176,27 @@ int OpenRecoveryScript::run_script_file(void) {
strcpy(partitions, restore_partitions.c_str());
}
strcpy(folder_path, restore_folder.c_str());
- LOGI("Restore folder is: '%s' and partitions: '%s'\n", folder_path, partitions);
- ui_print("Restoring '%s'\n", folder_path);
+ LOGINFO("Restore folder is: '%s' and partitions: '%s'\n", folder_path, partitions);
+ gui_print("Restoring '%s'\n", folder_path);
if (folder_path[0] != '/') {
char backup_folder[512];
string folder_var;
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, folder_var);
sprintf(backup_folder, "%s/%s", folder_var.c_str(), folder_path);
- LOGI("Restoring relative path: '%s'\n", backup_folder);
+ LOGINFO("Restoring relative path: '%s'\n", backup_folder);
if (!TWFunc::Path_Exists(backup_folder)) {
if (DataManager::GetIntValue(TW_HAS_DUAL_STORAGE)) {
if (DataManager::GetIntValue(TW_USE_EXTERNAL_STORAGE)) {
- LOGI("Backup folder '%s' not found on external storage, trying internal...\n", folder_path);
+ LOGINFO("Backup folder '%s' not found on external storage, trying internal...\n", folder_path);
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 0);
} else {
- LOGI("Backup folder '%s' not found on internal storage, trying external...\n", folder_path);
+ LOGINFO("Backup folder '%s' not found on internal storage, trying external...\n", folder_path);
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 1);
}
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, folder_var);
sprintf(backup_folder, "%s/%s", folder_var.c_str(), folder_path);
- LOGI("2Restoring relative path: '%s'\n", backup_folder);
+ LOGINFO("2Restoring relative path: '%s'\n", backup_folder);
}
}
strcpy(folder_path, backup_folder);
@@ -208,7 +207,7 @@ int OpenRecoveryScript::run_script_file(void) {
strcat(folder_path, "/.");
}
if (!TWFunc::Path_Exists(folder_path)) {
- ui_print("Unable to locate backup '%s'\n", folder_path);
+ gui_print("Unable to locate backup '%s'\n", folder_path);
ret_val = 1;
continue;
}
@@ -222,38 +221,38 @@ int OpenRecoveryScript::run_script_file(void) {
memset(value2, 0, sizeof(value2));
strcpy(value2, partitions);
- ui_print("Setting restore options: '%s':\n", value2);
+ gui_print("Setting restore options: '%s':\n", value2);
line_len = strlen(value2);
for (i=0; i<line_len; i++) {
if ((value2[i] == 'S' || value2[i] == 's') && Partition_List.find("/system;") != string::npos) {
Restore_List += "/system;";
- ui_print("System\n");
+ gui_print("System\n");
} else if ((value2[i] == 'D' || value2[i] == 'd') && Partition_List.find("/data;") != string::npos) {
Restore_List += "/data;";
- ui_print("Data\n");
+ gui_print("Data\n");
} else if ((value2[i] == 'C' || value2[i] == 'c') && Partition_List.find("/cache;") != string::npos) {
Restore_List += "/cache;";
- ui_print("Cache\n");
+ gui_print("Cache\n");
} else if ((value2[i] == 'R' || value2[i] == 'r') && Partition_List.find("/recovery;") != string::npos) {
- ui_print("Recovery -- Not allowed to restore recovery\n");
+ gui_print("Recovery -- Not allowed to restore recovery\n");
} else if (value2[i] == '1' && DataManager::GetIntValue(TW_RESTORE_SP1_VAR) > 0) {
- ui_print("%s\n", "Special1 -- No Longer Supported...");
+ gui_print("%s\n", "Special1 -- No Longer Supported...");
} else if (value2[i] == '2' && DataManager::GetIntValue(TW_RESTORE_SP2_VAR) > 0) {
- ui_print("%s\n", "Special2 -- No Longer Supported...");
+ gui_print("%s\n", "Special2 -- No Longer Supported...");
} else if (value2[i] == '3' && DataManager::GetIntValue(TW_RESTORE_SP3_VAR) > 0) {
- ui_print("%s\n", "Special3 -- No Longer Supported...");
+ gui_print("%s\n", "Special3 -- No Longer Supported...");
} else if ((value2[i] == 'B' || value2[i] == 'b') && Partition_List.find("/boot;") != string::npos) {
Restore_List += "/boot;";
- ui_print("Boot\n");
+ gui_print("Boot\n");
} else if ((value2[i] == 'A' || value2[i] == 'a') && Partition_List.find("/and-sec;") != string::npos) {
Restore_List += "/and-sec;";
- ui_print("Android Secure\n");
+ gui_print("Android Secure\n");
} else if ((value2[i] == 'E' || value2[i] == 'e') && Partition_List.find("/sd-ext;") != string::npos) {
Restore_List += "/sd-ext;";
- ui_print("SD-Ext\n");
+ gui_print("SD-Ext\n");
} else if (value2[i] == 'M' || value2[i] == 'm') {
DataManager::SetValue(TW_SKIP_MD5_CHECK_VAR, 1);
- ui_print("MD5 check skip is on\n");
+ gui_print("MD5 check skip is on\n");
}
}
@@ -264,7 +263,7 @@ int OpenRecoveryScript::run_script_file(void) {
if (!PartitionManager.Run_Restore(folder_path))
ret_val = 1;
else
- ui_print("Restore complete!\n");
+ gui_print("Restore complete!\n");
} else if (strcmp(command, "mount") == 0) {
// Mount
DataManager::SetValue("tw_action_text2", "Mounting");
@@ -274,7 +273,7 @@ int OpenRecoveryScript::run_script_file(void) {
} else
strcpy(mount, value);
if (PartitionManager.Mount_By_Path(mount, true))
- ui_print("Mounted '%s'\n", mount);
+ gui_print("Mounted '%s'\n", mount);
} else if (strcmp(command, "unmount") == 0 || strcmp(command, "umount") == 0) {
// Unmount
DataManager::SetValue("tw_action_text2", "Unmounting");
@@ -284,21 +283,21 @@ int OpenRecoveryScript::run_script_file(void) {
} else
strcpy(mount, value);
if (PartitionManager.UnMount_By_Path(mount, true))
- ui_print("Unmounted '%s'\n", mount);
+ gui_print("Unmounted '%s'\n", mount);
} else if (strcmp(command, "set") == 0) {
// Set value
tok = strtok(value, " ");
strcpy(value1, tok);
tok = strtok(NULL, " ");
strcpy(value2, tok);
- ui_print("Setting '%s' to '%s'\n", value1, value2);
+ gui_print("Setting '%s' to '%s'\n", value1, value2);
DataManager::SetValue(value1, value2);
} else if (strcmp(command, "mkdir") == 0) {
// Make directory (recursive)
DataManager::SetValue("tw_action_text2", "Making Directory");
- ui_print("Making directory (recursive): '%s'\n", value);
+ gui_print("Making directory (recursive): '%s'\n", value);
if (TWFunc::Recursive_Mkdir(value)) {
- LOGE("Unable to create folder: '%s'\n", value);
+ LOGERR("Unable to create folder: '%s'\n", value);
ret_val = 1;
}
} else if (strcmp(command, "reboot") == 0) {
@@ -309,10 +308,10 @@ int OpenRecoveryScript::run_script_file(void) {
string status;
TWFunc::Exec_Cmd(value, status);
} else {
- LOGE("No value given for cmd\n");
+ LOGERR("No value given for cmd\n");
}
} else if (strcmp(command, "print") == 0) {
- ui_print("%s\n", value);
+ gui_print("%s\n", value);
} else if (strcmp(command, "sideload") == 0) {
// ADB Sideload
DataManager::SetValue("tw_action_text2", "ADB Sideload");
@@ -328,32 +327,36 @@ int OpenRecoveryScript::run_script_file(void) {
if (TWFunc::Path_Exists(Sideload_File)) {
unlink(Sideload_File.c_str());
}
- ui_print("Starting ADB sideload feature...\n");
+ gui_print("Starting ADB sideload feature...\n");
DataManager::SetValue("tw_has_cancel", 1);
DataManager::SetValue("tw_cancel_action", "adbsideloadcancel");
- ret_val = apply_from_adb(ui, &wipe_cache, Sideload_File.c_str());
+ ret_val = apply_from_adb(Sideload_File.c_str());
DataManager::SetValue("tw_has_cancel", 0);
if (ret_val != 0)
ret_val = 1; // failure
- else if (wipe_cache)
- PartitionManager.Wipe_By_Path("/cache");
+ else if (TWinstall_zip(Sideload_File.c_str(), &wipe_cache) == 0) {
+ if (wipe_cache)
+ PartitionManager.Wipe_By_Path("/cache");
+ } else {
+ ret_val = 1; // failure
+ }
sideload = 1; // Causes device to go to the home screen afterwards
- ui_print("Sideload finished.\n");
+ gui_print("Sideload finished.\n");
}
} else {
- LOGE("Unrecognized script command: '%s'\n", command);
+ LOGERR("Unrecognized script command: '%s'\n", command);
ret_val = 1;
}
}
fclose(fp);
- ui_print("Done processing script file\n");
+ gui_print("Done processing script file\n");
} else {
- LOGE("Error opening script file '%s'\n", SCRIPT_FILE_TMP);
+ LOGERR("Error opening script file '%s'\n", SCRIPT_FILE_TMP);
return 1;
}
if (install_cmd && DataManager::GetIntValue(TW_HAS_INJECTTWRP) == 1 && DataManager::GetIntValue(TW_INJECT_AFTER_ZIP) == 1) {
string status;
- ui_print("Injecting TWRP into boot image...\n");
+ gui_print("Injecting TWRP into boot image...\n");
TWPartition* Boot = PartitionManager.Find_Partition_By_Path("/boot");
if (Boot == NULL || Boot->Current_File_System != "emmc")
TWFunc::Exec_Cmd("injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash", status);
@@ -361,7 +364,7 @@ int OpenRecoveryScript::run_script_file(void) {
string injectcmd = "injecttwrp --dump /tmp/backup_recovery_ramdisk.img /tmp/injected_boot.img --flash bd=" + Boot->Actual_Block_Device;
TWFunc::Exec_Cmd(injectcmd.c_str(), status);
}
- ui_print("TWRP injection complete.\n");
+ gui_print("TWRP injection complete.\n");
}
if (sideload)
ret_val = 1; // Forces booting to the home page after sideload
@@ -373,12 +376,12 @@ int OpenRecoveryScript::Insert_ORS_Command(string Command) {
if (ORSfile.is_open()) {
//if (Command.substr(Command.size() - 1, 1) != "\n")
// Command += "\n";
- LOGI("Inserting '%s'\n", Command.c_str());
+ LOGINFO("Inserting '%s'\n", Command.c_str());
ORSfile << Command.c_str();
ORSfile.close();
return 1;
}
- LOGE("Unable to append '%s' to '%s'\n", Command.c_str(), SCRIPT_FILE_TMP);
+ LOGERR("Unable to append '%s' to '%s'\n", Command.c_str(), SCRIPT_FILE_TMP);
return 0;
}
@@ -394,22 +397,22 @@ int OpenRecoveryScript::Install_Command(string Zip) {
Full_Path = DataManager::GetCurrentStoragePath();
Full_Path += "/" + Zip;
- LOGI("Full zip path: '%s'\n", Full_Path.c_str());
+ LOGINFO("Full zip path: '%s'\n", Full_Path.c_str());
if (!TWFunc::Path_Exists(Full_Path)) {
ret_string = Locate_Zip_File(Full_Path, DataManager::GetCurrentStoragePath());
if (!ret_string.empty()) {
Full_Path = ret_string;
} else if (DataManager::GetIntValue(TW_HAS_DUAL_STORAGE)) {
if (DataManager::GetIntValue(TW_USE_EXTERNAL_STORAGE)) {
- LOGI("Zip file not found on external storage, trying internal...\n");
+ LOGINFO("Zip file not found on external storage, trying internal...\n");
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 0);
} else {
- LOGI("Zip file not found on internal storage, trying external...\n");
+ LOGINFO("Zip file not found on internal storage, trying external...\n");
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 1);
}
Full_Path = DataManager::GetCurrentStoragePath();
Full_Path += "/" + Zip;
- LOGI("Full zip path: '%s'\n", Full_Path.c_str());
+ LOGINFO("Full zip path: '%s'\n", Full_Path.c_str());
ret_string = Locate_Zip_File(Full_Path, DataManager::GetCurrentStoragePath());
if (!ret_string.empty())
Full_Path = ret_string;
@@ -427,14 +430,14 @@ int OpenRecoveryScript::Install_Command(string Zip) {
if (!TWFunc::Path_Exists(Zip)) {
// zip file doesn't exist
- ui_print("Unable to locate zip file '%s'.\n", Zip.c_str());
+ gui_print("Unable to locate zip file '%s'.\n", Zip.c_str());
ret_val = 1;
} else {
- ui_print("Installing zip file '%s'\n", Zip.c_str());
+ gui_print("Installing zip file '%s'\n", Zip.c_str());
ret_val = TWinstall_zip(Zip.c_str(), &wipe_cache);
}
if (ret_val != 0) {
- LOGE("Error installing zip file '%s'\n", Zip.c_str());
+ LOGERR("Error installing zip file '%s'\n", Zip.c_str());
ret_val = 1;
} else if (wipe_cache)
PartitionManager.Wipe_By_Path("/cache");
@@ -474,50 +477,50 @@ int OpenRecoveryScript::Backup_Command(string Options) {
DataManager::SetValue(TW_USE_COMPRESSION_VAR, 0);
DataManager::SetValue(TW_SKIP_MD5_GENERATE_VAR, 0);
- ui_print("Setting backup options:\n");
+ gui_print("Setting backup options:\n");
line_len = Options.size();
for (i=0; i<line_len; i++) {
if (Options.substr(i, 1) == "S" || Options.substr(i, 1) == "s") {
Backup_List += "/system;";
- ui_print("System\n");
+ gui_print("System\n");
} else if (Options.substr(i, 1) == "D" || Options.substr(i, 1) == "d") {
Backup_List += "/data;";
- ui_print("Data\n");
+ gui_print("Data\n");
} else if (Options.substr(i, 1) == "C" || Options.substr(i, 1) == "c") {
Backup_List += "/cache;";
- ui_print("Cache\n");
+ gui_print("Cache\n");
} else if (Options.substr(i, 1) == "R" || Options.substr(i, 1) == "r") {
Backup_List += "/recovery;";
- ui_print("Recovery\n");
+ gui_print("Recovery\n");
} else if (Options.substr(i, 1) == "1") {
- ui_print("%s\n", "Special1 -- No Longer Supported...");
+ gui_print("%s\n", "Special1 -- No Longer Supported...");
} else if (Options.substr(i, 1) == "2") {
- ui_print("%s\n", "Special2 -- No Longer Supported...");
+ gui_print("%s\n", "Special2 -- No Longer Supported...");
} else if (Options.substr(i, 1) == "3") {
- ui_print("%s\n", "Special3 -- No Longer Supported...");
+ gui_print("%s\n", "Special3 -- No Longer Supported...");
} else if (Options.substr(i, 1) == "B" || Options.substr(i, 1) == "b") {
Backup_List += "/boot;";
- ui_print("Boot\n");
+ gui_print("Boot\n");
} else if (Options.substr(i, 1) == "A" || Options.substr(i, 1) == "a") {
Backup_List += "/and-sec;";
- ui_print("Android Secure\n");
+ gui_print("Android Secure\n");
} else if (Options.substr(i, 1) == "E" || Options.substr(i, 1) == "e") {
Backup_List += "/sd-ext;";
- ui_print("SD-Ext\n");
+ gui_print("SD-Ext\n");
} else if (Options.substr(i, 1) == "O" || Options.substr(i, 1) == "o") {
DataManager::SetValue(TW_USE_COMPRESSION_VAR, 1);
- ui_print("Compression is on\n");
+ gui_print("Compression is on\n");
} else if (Options.substr(i, 1) == "M" || Options.substr(i, 1) == "m") {
DataManager::SetValue(TW_SKIP_MD5_GENERATE_VAR, 1);
- ui_print("MD5 Generation is off\n");
+ gui_print("MD5 Generation is off\n");
}
}
DataManager::SetValue("tw_backup_list", Backup_List);
if (!PartitionManager.Run_Backup()) {
- LOGE("Backup failed!\n");
+ LOGERR("Backup failed!\n");
return 1;
}
- ui_print("Backup complete!\n");
+ gui_print("Backup complete!\n");
return 0;
}
@@ -533,6 +536,6 @@ void OpenRecoveryScript::Run_OpenRecoveryScript(void) {
DataManager::SetValue("tw_has_cancel", 0);
DataManager::SetValue("tw_show_reboot", 0);
if (gui_startPage("action_page") != 0) {
- LOGE("Failed to load OpenRecoveryScript GUI page.\n");
+ LOGERR("Failed to load OpenRecoveryScript GUI page.\n");
}
}