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
diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp
index 4479ec9..0147027 100644
--- a/openrecoveryscript.cpp
+++ b/openrecoveryscript.cpp
@@ -184,24 +184,21 @@
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 @@
// 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 @@
{
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;