mirror of
https://github.com/meizu-m86/twrp_multirom_m86
synced 2025-11-04 06:15:41 +08:00
Merge remote-tracking branch 'upstream/android-7.0' into android-7.0-mrom
This commit is contained in:
@@ -1795,18 +1795,11 @@ int GUIAction::flashimage(std::string arg __unused)
|
||||
{
|
||||
int op_status = 0;
|
||||
|
||||
PartitionSettings part_settings;
|
||||
operation_start("Flash Image");
|
||||
string path, filename;
|
||||
DataManager::GetValue("tw_zip_location", path);
|
||||
DataManager::GetValue("tw_file", filename);
|
||||
part_settings.Backup_Folder = path + "/" + filename;
|
||||
unsigned long long total_bytes = TWFunc::Get_File_Size(part_settings.Backup_Folder);
|
||||
ProgressTracking progress(total_bytes);
|
||||
part_settings.progress = &progress;
|
||||
part_settings.adbbackup = false;
|
||||
part_settings.PM_Method = PM_RESTORE;
|
||||
if (PartitionManager.Flash_Image(&part_settings))
|
||||
if (PartitionManager.Flash_Image(path, filename))
|
||||
op_status = 0; // success
|
||||
else
|
||||
op_status = 1; // fail
|
||||
|
||||
@@ -1805,7 +1805,7 @@ bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
|
||||
|
||||
bool TWPartition::Restore(PartitionSettings *part_settings) {
|
||||
TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, gui_parse_text("{@restoring_hdr}"));
|
||||
LOGINFO("Restore filename is: %s%s\n", part_settings->Backup_Folder.c_str(), Backup_FileName.c_str());
|
||||
LOGINFO("Restore filename is: %s/%s\n", part_settings->Backup_Folder.c_str(), Backup_FileName.c_str());
|
||||
|
||||
string Restore_File_System = Get_Restore_File_System(part_settings);
|
||||
|
||||
@@ -2340,7 +2340,7 @@ bool TWPartition::Backup_Tar(PartitionSettings *part_settings, pid_t *tar_fork_p
|
||||
#endif
|
||||
|
||||
Backup_FileName = Backup_Name + "." + Current_File_System + ".win";
|
||||
Full_FileName = part_settings->Backup_Folder + Backup_FileName;
|
||||
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
|
||||
tar.has_data_media = Has_Data_Media;
|
||||
tar.part_settings = part_settings;
|
||||
tar.setdir(Backup_Path);
|
||||
@@ -2400,7 +2400,7 @@ bool TWPartition::Raw_Read_Write(PartitionSettings *part_settings) {
|
||||
if (part_settings->adbbackup)
|
||||
destfn = TW_ADB_BACKUP;
|
||||
else
|
||||
destfn = part_settings->Backup_Folder + Backup_FileName;
|
||||
destfn = part_settings->Backup_Folder + "/" + Backup_FileName;
|
||||
}
|
||||
else {
|
||||
destfn = Actual_Block_Device;
|
||||
@@ -2621,7 +2621,7 @@ bool TWPartition::Restore_Image(PartitionSettings *part_settings) {
|
||||
if (part_settings->adbbackup)
|
||||
Full_FileName = TW_ADB_RESTORE;
|
||||
else
|
||||
Full_FileName = part_settings->Backup_Folder + Backup_FileName;
|
||||
Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
|
||||
|
||||
if (Restore_File_System == "emmc") {
|
||||
if (!part_settings->adbbackup)
|
||||
@@ -2787,10 +2787,7 @@ uint64_t TWPartition::Get_Max_FileSize() {
|
||||
bool TWPartition::Flash_Image(PartitionSettings *part_settings) {
|
||||
string Restore_File_System, full_filename;
|
||||
|
||||
if (part_settings->Part != NULL)
|
||||
full_filename = part_settings->Backup_Folder + "/" + Backup_FileName;
|
||||
else
|
||||
full_filename = part_settings->Backup_Folder; // Flash image action from GUI
|
||||
full_filename = part_settings->Backup_Folder + "/" + Backup_FileName;
|
||||
|
||||
LOGINFO("Image filename is: %s\n", Backup_FileName.c_str());
|
||||
|
||||
|
||||
@@ -499,7 +499,7 @@ bool TWPartitionManager::Make_MD5(PartitionSettings *part_settings)
|
||||
|
||||
if (part_settings->Part == NULL)
|
||||
return false;
|
||||
string Full_File = part_settings->Backup_Folder + part_settings->Part->Backup_FileName;
|
||||
string Full_File = part_settings->Backup_Folder + "/" + part_settings->Part->Backup_FileName;
|
||||
twrpDigest md5sum;
|
||||
|
||||
if (!part_settings->generate_md5)
|
||||
@@ -635,7 +635,7 @@ void TWPartitionManager::Clean_Backup_Folder(string Backup_Folder) {
|
||||
if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, ".."))
|
||||
continue;
|
||||
|
||||
string path = Backup_Folder + p->d_name;
|
||||
string path = Backup_Folder + "/" + p->d_name;
|
||||
|
||||
size_t dot = path.find_last_of(".") + 1;
|
||||
if (path.substr(dot) == "win" || path.substr(dot) == "md5" || path.substr(dot) == "info") {
|
||||
@@ -660,7 +660,7 @@ int TWPartitionManager::Cancel_Backup() {
|
||||
if (tar_fork_pid != 0) {
|
||||
DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
|
||||
DataManager::GetValue(TW_BACKUPS_FOLDER_VAR, Backup_Folder);
|
||||
Full_Backup_Path = Backup_Folder + "/" + Backup_Name + "/";
|
||||
Full_Backup_Path = Backup_Folder + "/" + Backup_Name;
|
||||
LOGINFO("Killing pid: %d\n", tar_fork_pid);
|
||||
kill(tar_fork_pid, SIGUSR2);
|
||||
while (kill(tar_fork_pid, 0) == 0) {
|
||||
@@ -727,9 +727,9 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
|
||||
}
|
||||
|
||||
LOGINFO("Backup Name is: '%s'\n", Backup_Name.c_str());
|
||||
part_settings.Backup_Folder = part_settings.Backup_Folder + "/" + Backup_Name + "/";
|
||||
part_settings.Backup_Folder = part_settings.Backup_Folder + "/" + Backup_Name;
|
||||
|
||||
LOGINFO("Full_Backup_Path is: '%s'\n", part_settings.Backup_Folder.c_str());
|
||||
LOGINFO("Backup_Folder is: '%s'\n", part_settings.Backup_Folder.c_str());
|
||||
|
||||
LOGINFO("Calculating backup details...\n");
|
||||
DataManager::GetValue("tw_backup_list", Backup_List);
|
||||
@@ -877,7 +877,7 @@ int TWPartitionManager::Run_Backup(bool adbbackup) {
|
||||
Update_System_Details();
|
||||
UnMount_Main_Partitions();
|
||||
gui_msg(Msg(msg::kHighlight, "backup_completed=[BACKUP COMPLETED IN {1} SECONDS]")(total_time)); // the end
|
||||
string backup_log = part_settings.Backup_Folder + "recovery.log";
|
||||
string backup_log = part_settings.Backup_Folder + "/recovery.log";
|
||||
TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644);
|
||||
tw_set_default_metadata(backup_log.c_str());
|
||||
|
||||
@@ -2392,13 +2392,13 @@ bool TWPartitionManager::Remove_MTP_Storage(unsigned int Storage_ID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TWPartitionManager::Flash_Image(PartitionSettings *part_settings) {
|
||||
bool TWPartitionManager::Flash_Image(string& path, string& filename) {
|
||||
int check, partition_count = 0;
|
||||
TWPartition* flash_part = NULL;
|
||||
string Flash_List, flash_path, full_filename;
|
||||
size_t start_pos = 0, end_pos = 0;
|
||||
|
||||
full_filename = part_settings->Backup_Folder;
|
||||
full_filename = path + "/" + filename;
|
||||
|
||||
gui_msg("image_flash_start=[IMAGE FLASH STARTED]");
|
||||
gui_msg(Msg("img_to_flash=Image to flash: '{1}'")(full_filename));
|
||||
@@ -2413,6 +2413,14 @@ bool TWPartitionManager::Flash_Image(PartitionSettings *part_settings) {
|
||||
}
|
||||
}
|
||||
|
||||
PartitionSettings part_settings;
|
||||
part_settings.Backup_Folder = path;
|
||||
unsigned long long total_bytes = TWFunc::Get_File_Size(full_filename);
|
||||
ProgressTracking progress(total_bytes);
|
||||
part_settings.progress = &progress;
|
||||
part_settings.adbbackup = false;
|
||||
part_settings.PM_Method = PM_RESTORE;
|
||||
|
||||
gui_msg("calc_restore=Calculating restore details...");
|
||||
DataManager::GetValue("tw_flash_partition", Flash_List);
|
||||
if (!Flash_List.empty()) {
|
||||
@@ -2442,7 +2450,8 @@ bool TWPartitionManager::Flash_Image(PartitionSettings *part_settings) {
|
||||
|
||||
DataManager::SetProgress(0.0);
|
||||
if (flash_part) {
|
||||
if (!flash_part->Flash_Image(part_settings))
|
||||
flash_part->Backup_FileName = filename;
|
||||
if (!flash_part->Flash_Image(&part_settings))
|
||||
return false;
|
||||
} else {
|
||||
gui_err("invalid_flash=Invalid flash partition specified.");
|
||||
|
||||
@@ -39,29 +39,29 @@ struct PartitionList {
|
||||
unsigned int selected;
|
||||
};
|
||||
|
||||
enum PartitionManager_Op { // PartitionManager Restore Mode for Raw_Read_Write()
|
||||
enum PartitionManager_Op { // PartitionManager Restore Mode for Raw_Read_Write()
|
||||
PM_BACKUP = 0,
|
||||
PM_RESTORE = 1,
|
||||
};
|
||||
|
||||
class TWPartition;
|
||||
|
||||
struct PartitionSettings { // Settings for backup session
|
||||
TWPartition* Part; // Partition to pass to the partition backup loop
|
||||
std::string Backup_Folder; // Path to restore folder
|
||||
bool adbbackup; // tell the system we are backing up over adb
|
||||
bool adb_compression; // 0 == uncompressed, 1 == compressed
|
||||
bool generate_md5; // tell system to create md5 for partitions
|
||||
uint64_t total_restore_size; // Total size of restored backup
|
||||
uint64_t img_bytes_remaining; // remaining img/emmc bytes to backup for progress indicator
|
||||
uint64_t file_bytes_remaining; // remaining file bytes to backup for progress indicator
|
||||
uint64_t img_time; // used to calculate how fast we backup images
|
||||
uint64_t file_time; // used to calculate how fast we backup files
|
||||
uint64_t img_bytes; // total image bytes of all emmc partitions
|
||||
uint64_t file_bytes; // total file bytes of all file based partitions
|
||||
int partition_count; // Number of partitions to restore
|
||||
ProgressTracking *progress; // Keep track of progress in GUI
|
||||
enum PartitionManager_Op PM_Method; // Current operation of backup or restore
|
||||
struct PartitionSettings { // Settings for backup session
|
||||
TWPartition* Part; // Partition to pass to the partition backup loop
|
||||
std::string Backup_Folder; // Path to restore folder
|
||||
bool adbbackup; // tell the system we are backing up over adb
|
||||
bool adb_compression; // 0 == uncompressed, 1 == compressed
|
||||
bool generate_md5; // tell system to create md5 for partitions
|
||||
uint64_t total_restore_size; // Total size of restored backup
|
||||
uint64_t img_bytes_remaining; // remaining img/emmc bytes to backup for progress indicator
|
||||
uint64_t file_bytes_remaining; // remaining file bytes to backup for progress indicator
|
||||
uint64_t img_time; // used to calculate how fast we backup images
|
||||
uint64_t file_time; // used to calculate how fast we backup files
|
||||
uint64_t img_bytes; // total image bytes of all emmc partitions
|
||||
uint64_t file_bytes; // total file bytes of all file based partitions
|
||||
int partition_count; // Number of partitions to restore
|
||||
ProgressTracking *progress; // Keep track of progress in GUI
|
||||
enum PartitionManager_Op PM_Method; // Current operation of backup or restore
|
||||
};
|
||||
|
||||
enum Backup_Method_enum {
|
||||
@@ -105,7 +105,7 @@ public:
|
||||
bool Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid); // Backs up the partition to the folder specified
|
||||
bool Check_MD5(PartitionSettings *part_settings); // Checks MD5 of a backup
|
||||
bool Restore(PartitionSettings *part_settings); // Restores the partition using the backup folder provided
|
||||
unsigned long long Get_Restore_Size(PartitionSettings *part_settings);// Returns the overall restore size of the backup
|
||||
unsigned long long Get_Restore_Size(PartitionSettings *part_settings); // Returns the overall restore size of the backup
|
||||
string Backup_Method_By_Name(); // Returns a string of the backup method for human readable output
|
||||
bool Decrypt(string Password); // Decrypts the partition, return 0 for failure and -1 for success
|
||||
bool Wipe_Encryption(); // Ignores wipe commands for /data/media devices and formats the original block device
|
||||
@@ -337,15 +337,15 @@ public:
|
||||
void Decrypt_Adopted(); // Attempt to identy and decrypt any adopted storage partitions
|
||||
void Remove_Partition_By_Path(string Path); // Removes / erases a partition entry from the partition list
|
||||
|
||||
bool Flash_Image(PartitionSettings *part_settings); // Flashes an image to a selected partition from the partition list
|
||||
bool Restore_Partition(struct PartitionSettings *part_settings); // Restore the partitions based on type
|
||||
bool Flash_Image(string& path, string& filename); // Flashes an image to a selected partition from the partition list
|
||||
bool Restore_Partition(struct PartitionSettings *part_settings); // Restore the partitions based on type
|
||||
TWAtomicInt stop_backup;
|
||||
|
||||
private:
|
||||
void Setup_Settings_Storage_Partition(TWPartition* Part); // Sets up settings storage
|
||||
void Setup_Android_Secure_Location(TWPartition* Part); // Sets up .android_secure if needed
|
||||
bool Make_MD5(struct PartitionSettings *part_settings); // Generates an MD5 after a backup is made
|
||||
bool Backup_Partition(struct PartitionSettings *part_settings); // Backup the partitions based on type
|
||||
bool Make_MD5(struct PartitionSettings *part_settings); // Generates an MD5 after a backup is made
|
||||
bool Backup_Partition(struct PartitionSettings *part_settings); // Backup the partitions based on type
|
||||
void Output_Partition(TWPartition* Part); // Outputs partition details to the log
|
||||
TWPartition* Find_Partition_By_MTP_Storage_ID(unsigned int Storage_ID); // Returns a pointer to a partition based on MTP Storage ID
|
||||
bool Add_Remove_MTP_Storage(TWPartition* Part, int message_type); // Adds or removes an MTP Storage partition
|
||||
|
||||
@@ -445,7 +445,7 @@ int twrpTar::createTarFork(pid_t *tar_fork_pid) {
|
||||
part_settings->progress->UpdateDisplayDetails(true);
|
||||
|
||||
if (!part_settings->adbbackup) {
|
||||
InfoManager backup_info(backup_folder + partition_name + ".info");
|
||||
InfoManager backup_info(backup_folder + "/" + partition_name + ".info");
|
||||
backup_info.SetValue("backup_size", size_backup);
|
||||
if (use_compression && use_encryption)
|
||||
backup_info.SetValue("backup_type", COMPRESSED_ENCRYPTED);
|
||||
|
||||
Reference in New Issue
Block a user