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;