diff options
Diffstat (limited to 'partitionmanager.cpp')
-rwxr-xr-x | partitionmanager.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 79068f79d..85dc79d36 100755 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -690,6 +690,7 @@ bool TWPartitionManager::Backup_Partition(PartitionSettings *part_settings) { } sync(); sync(); + string Full_Filename = part_settings->Backup_Folder + "/" + part_settings->Part->Backup_FileName; if (!part_settings->adbbackup && part_settings->generate_digest) { if (!twrpDigestDriver::Make_Digest(Full_Filename)) { goto backup_error; @@ -1550,6 +1551,7 @@ void TWPartitionManager::Update_System_Details(void) { if ((*iter)->Mount_Point == Get_Android_Root_Path()) { int backup_display_size = (int)((*iter)->Backup_Size / 1048576LLU); DataManager::SetValue(TW_BACKUP_SYSTEM_SIZE, backup_display_size); + TWFunc::Is_TWRP_App_In_System(); } else if ((*iter)->Mount_Point == "/data" || (*iter)->Mount_Point == "/datadata") { data_size += (int)((*iter)->Backup_Size / 1048576LLU); } else if ((*iter)->Mount_Point == "/cache") { @@ -3088,7 +3090,7 @@ bool TWPartitionManager::Prepare_Repack(const std::string& Source_Path, const st if (TWFunc::copy_file(Source_Path, destination, 0644)) return false; } - std::string command = "cd " + Temp_Folder_Destination + " && /sbin/magiskboot --unpack -h " + Source_Path; + std::string command = "cd " + Temp_Folder_Destination + " && /sbin/magiskboot --unpack -h '" + Source_Path +"'"; if (TWFunc::Exec_Cmd(command) != 0) { LOGINFO("Error unpacking %s!\n", Source_Path.c_str()); gui_msg(Msg(msg::kError, "unpack_error=Error unpacking image.")); @@ -3154,6 +3156,37 @@ bool TWPartitionManager::Repack_Images(const std::string& Target_Image, const st } DataManager::SetProgress(1); TWFunc::removeDir(REPACK_ORIG_DIR, false); + if (part->SlotSelect && Repack_Options.Type == REPLACE_RAMDISK) { + LOGINFO("Switching slots to flash ramdisk to both partitions\n"); + string Current_Slot = Get_Active_Slot_Display(); + if (Current_Slot == "A") + Set_Active_Slot("B"); + else + Set_Active_Slot("A"); + DataManager::SetProgress(.25); + if (!PartitionManager.Prepare_Repack(part, REPACK_ORIG_DIR, Repack_Options.Backup_First, gui_lookup("repack", "Repack"))) + return false; + if (TWFunc::copy_file(REPACK_NEW_DIR "ramdisk.cpio", REPACK_ORIG_DIR "ramdisk.cpio", 0644)) { + LOGERR("Failed to copy ramdisk\n"); + return false; + } + path = REPACK_ORIG_DIR; + command = "cd " + path + " && /sbin/magiskboot --repack " + path + "boot.img"; + if (TWFunc::Exec_Cmd(command) != 0) { + gui_msg(Msg(msg::kError, "repack_error=Error repacking image.")); + return false; + } + DataManager::SetProgress(.75); + std::string file = "new-boot.img"; + DataManager::SetValue("tw_flash_partition", "/boot;"); + if (!PartitionManager.Flash_Image(path, file)) { + LOGINFO("Error flashing new image\n"); + return false; + } + DataManager::SetProgress(1); + TWFunc::removeDir(REPACK_ORIG_DIR, false); + Set_Active_Slot(Current_Slot); + } TWFunc::removeDir(REPACK_NEW_DIR, false); return true; } |