Improve ORS scanning of storage locations

Grab a vector of storage locations and iterate through them for
searching for zips and restore folders.

Change-Id: Ia045b1e15ac3701132d61fe9f5847da5785a9b4e
This commit is contained in:
Ethan Yonker
2014-02-15 16:43:23 -06:00
parent ede51c528e
commit d7adf29ba1
+29 -46
View File
@@ -184,24 +184,21 @@ int OpenRecoveryScript::run_script_file(void) {
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);
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)) {
LOGINFO("Backup folder '%s' not found on external storage, trying internal...\n", folder_path);
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 0);
} else {
LOGINFO("Backup folder '%s' not found on internal storage, trying external...\n", folder_path);
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 1);
}
std::vector<PartitionList> Storage_List;
PartitionManager.Get_Partition_List("storage", &Storage_List);
int listSize = Storage_List.size();
for (int i = 0; i < listSize; i++) {
if (PartitionManager.Is_Mounted_By_Path(Storage_List.at(i).Mount_Point)) {
DataManager::SetValue("tw_storage_path", Storage_List.at(i).Mount_Point);
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, folder_var);
sprintf(backup_folder, "%s/%s", folder_var.c_str(), folder_path);
LOGINFO("2Restoring relative path: '%s'\n", backup_folder);
if (TWFunc::Path_Exists(backup_folder)) {
strcpy(folder_path, backup_folder);
break;
}
}
}
strcpy(folder_path, backup_folder);
} else {
if (folder_path[strlen(folder_path) - 1] == '/')
strcat(folder_path, ".");
@@ -398,42 +395,26 @@ int OpenRecoveryScript::Install_Command(string Zip) {
// Install zip
string ret_string;
int ret_val = 0, wipe_cache = 0;
std::vector<PartitionList> Storage_List;
string Full_Path;
PartitionManager.Mount_All_Storage();
if (Zip.substr(0, 1) != "/") {
// Relative path given
string Full_Path;
Full_Path = DataManager::GetCurrentStoragePath();
Full_Path += "/" + Zip;
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)) {
LOGINFO("Zip file not found on external storage, trying internal...\n");
DataManager::SetValue(TW_USE_EXTERNAL_STORAGE, 0);
} else {
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;
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;
PartitionManager.Get_Partition_List("storage", &Storage_List);
int listSize = Storage_List.size();
for (int i = 0; i < listSize; i++) {
if (PartitionManager.Is_Mounted_By_Path(Storage_List.at(i).Mount_Point)) {
Full_Path = Storage_List.at(i).Mount_Point + "/" + Zip;
if (TWFunc::Path_Exists(Full_Path)) {
Zip = Full_Path;
break;
}
}
Zip = Full_Path;
} else {
// Full path given
if (!TWFunc::Path_Exists(Zip)) {
ret_string = Locate_Zip_File(Zip, DataManager::GetCurrentStoragePath());
if (!ret_string.empty())
Full_Path = Zip;
LOGINFO("Trying to find zip '%s' on '%s'...\n", Full_Path.c_str(), Storage_List.at(i).Mount_Point.c_str());
ret_string = Locate_Zip_File(Full_Path, Storage_List.at(i).Mount_Point);
if (!ret_string.empty()) {
Zip = ret_string;
break;
}
}
}
@@ -465,9 +446,11 @@ string OpenRecoveryScript::Locate_Zip_File(string Zip, string Storage_Root) {
{
pathCpy = Path.substr(pos, Path.size() - pos);
wholePath = pathCpy + "/" + File;
LOGINFO("Looking for zip at '%s'\n", wholePath.c_str());
if (TWFunc::Path_Exists(wholePath))
return wholePath;
wholePath = Storage_Root + "/" + wholePath;
LOGINFO("Looking for zip at '%s'\n", wholePath.c_str());
if (TWFunc::Path_Exists(wholePath))
return wholePath;