From bf1d67245ebce9d63e1167920e5dec6728843b11 Mon Sep 17 00:00:00 2001 From: bigbiff Date: Sat, 14 Feb 2015 16:25:59 -0500 Subject: Theme: Add ability to disable size checking before backup (for compressed backup users with low space). Clean up backup folder and copy only recovery.log for debugging. Conflicts: gui/devices/watch/res/watch.xml Change-Id: If8aa3580dbc082d0fe4882d4af8dc3cdb362a8b5 --- gui/devices/1024x600/res/ui.xml | 1 + gui/devices/1024x768/res/ui.xml | 1 + gui/devices/1280x800/res/ui.xml | 1 + gui/devices/1920x1200/res/ui.xml | 1 + gui/devices/2560x1600/res/ui.xml | 1 + gui/devices/320x480/res/images/slider-touch.png | Bin 4445 -> 3781 bytes gui/devices/320x480/res/images/slider-used.png | Bin 1943 -> 1728 bytes gui/devices/320x480/res/images/slider.png | Bin 3028 -> 2611 bytes gui/devices/320x480/res/ui.xml | 4 +- gui/devices/800x480/res/ui.xml | 1 + gui/devices/landscape/res/landscape.xml | 8 ++++ gui/devices/portrait/res/portrait.xml | 8 ++++ gui/devices/watch/res/watch.xml | 10 ++++- partitionmanager.cpp | 51 +++++++++++++++++++++--- partitions.hpp | 2 +- 15 files changed, 80 insertions(+), 9 deletions(-) diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml index e76cc950c..725e11fcc 100644 --- a/gui/devices/1024x600/res/ui.xml +++ b/gui/devices/1024x600/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/1024x768/res/ui.xml b/gui/devices/1024x768/res/ui.xml index cfaf48e00..683be26f1 100644 --- a/gui/devices/1024x768/res/ui.xml +++ b/gui/devices/1024x768/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/1280x800/res/ui.xml b/gui/devices/1280x800/res/ui.xml index 0c7ecf0b9..ddcdb3f64 100644 --- a/gui/devices/1280x800/res/ui.xml +++ b/gui/devices/1280x800/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/1920x1200/res/ui.xml b/gui/devices/1920x1200/res/ui.xml index 05a3ee62b..2407905bf 100644 --- a/gui/devices/1920x1200/res/ui.xml +++ b/gui/devices/1920x1200/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/2560x1600/res/ui.xml b/gui/devices/2560x1600/res/ui.xml index 57945cb77..8f699ee28 100644 --- a/gui/devices/2560x1600/res/ui.xml +++ b/gui/devices/2560x1600/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/320x480/res/images/slider-touch.png b/gui/devices/320x480/res/images/slider-touch.png index 2f36fa7cc..77cb80975 100644 Binary files a/gui/devices/320x480/res/images/slider-touch.png and b/gui/devices/320x480/res/images/slider-touch.png differ diff --git a/gui/devices/320x480/res/images/slider-used.png b/gui/devices/320x480/res/images/slider-used.png index 94a09f3bd..85c2f4368 100644 Binary files a/gui/devices/320x480/res/images/slider-used.png and b/gui/devices/320x480/res/images/slider-used.png differ diff --git a/gui/devices/320x480/res/images/slider.png b/gui/devices/320x480/res/images/slider.png index 5cbb27e2f..2d09187f4 100644 Binary files a/gui/devices/320x480/res/images/slider.png and b/gui/devices/320x480/res/images/slider.png differ diff --git a/gui/devices/320x480/res/ui.xml b/gui/devices/320x480/res/ui.xml index d91df4207..de2c13632 100644 --- a/gui/devices/320x480/res/ui.xml +++ b/gui/devices/320x480/res/ui.xml @@ -94,8 +94,8 @@ - - + + diff --git a/gui/devices/800x480/res/ui.xml b/gui/devices/800x480/res/ui.xml index faa0878b7..5c9f07dfa 100644 --- a/gui/devices/800x480/res/ui.xml +++ b/gui/devices/800x480/res/ui.xml @@ -101,6 +101,7 @@ + diff --git a/gui/devices/landscape/res/landscape.xml b/gui/devices/landscape/res/landscape.xml index fd5fcfe42..c5d29966f 100644 --- a/gui/devices/landscape/res/landscape.xml +++ b/gui/devices/landscape/res/landscape.xml @@ -1623,6 +1623,14 @@ + + + + Disable Free Space Check. + + + + Swipe to Back Up diff --git a/gui/devices/portrait/res/portrait.xml b/gui/devices/portrait/res/portrait.xml index 6fb52f300..315b5a8fd 100644 --- a/gui/devices/portrait/res/portrait.xml +++ b/gui/devices/portrait/res/portrait.xml @@ -1402,6 +1402,14 @@ + + + + Disable Free Space Check. + + + + Swipe to Back Up backup_run diff --git a/gui/devices/watch/res/watch.xml b/gui/devices/watch/res/watch.xml index 1d4e2907f..dfbed16cd 100644 --- a/gui/devices/watch/res/watch.xml +++ b/gui/devices/watch/res/watch.xml @@ -1415,11 +1415,19 @@ - + Skip MD5 generation during backup. + + + + Disable Free Space Check. + + + + main diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 25f9dc7ae..098169c3b 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -526,6 +526,8 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde float pos; unsigned long long total_size, current_size; + string backup_log = Backup_Folder + "recovery.log"; + if (Part == NULL) return true; @@ -574,6 +576,9 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == Part->Mount_Point) { if (!(*subpart)->Backup(Backup_Folder, &total_size, ¤t_size, tar_fork_pid)) { TWFunc::SetPerformanceMode(false); + Clean_Backup_Folder(Backup_Folder); + TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644); + tw_set_default_metadata(backup_log.c_str()); return false; } sync(); @@ -608,12 +613,44 @@ bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folde TWFunc::SetPerformanceMode(false); return md5Success; } else { + Clean_Backup_Folder(Backup_Folder); + TWFunc::copy_file("/tmp/recovery.log", backup_log, 0644); + tw_set_default_metadata(backup_log.c_str()); TWFunc::SetPerformanceMode(false); return false; } return 0; } +void TWPartitionManager::Clean_Backup_Folder(string Backup_Folder) { + DIR *d = opendir(Backup_Folder.c_str()); + struct dirent *p; + int r; + + gui_print("Backup Failed.\nCleaning Backup Folder\n"); + + if (d == NULL) { + LOGERR("Error opening dir: '%s'\n", Backup_Folder.c_str()); + return; + } + + while (p = readdir(d)) { + if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) + continue; + + 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") { + r = unlink(path.c_str()); + if (r != 0) { + LOGINFO("Unable to unlink '%s: %s'\n", path.c_str(), strerror(errno)); + } + } + } + closedir(d); +} + int TWPartitionManager::Cancel_Backup() { string Backup_Folder, Backup_Name, Full_Backup_Path; @@ -638,7 +675,7 @@ int TWPartitionManager::Cancel_Backup() { } int TWPartitionManager::Run_Backup(void) { - int check, do_md5, partition_count = 0; + int check, do_md5, partition_count, disable_free_space_check = 0; string Backup_Folder, Backup_Name, Full_Backup_Path, Backup_List, backup_path; unsigned long long total_bytes = 0, file_bytes = 0, img_bytes = 0, free_space = 0, img_bytes_remaining, file_bytes_remaining, subpart_size; unsigned long img_time = 0, file_time = 0; @@ -726,10 +763,14 @@ int TWPartitionManager::Run_Backup(void) { LOGERR("Unable to locate storage device.\n"); return false; } - if (free_space - (32 * 1024 * 1024) < total_bytes) { - // We require an extra 32MB just in case - LOGERR("Not enough free space on storage.\n"); - return false; + + DataManager::GetValue("tw_disable_free_space", disable_free_space_check); + if (!disable_free_space_check) { + if (free_space - (32 * 1024 * 1024) < total_bytes) { + // We require an extra 32MB just in case + LOGERR("Not enough free space on storage.\n"); + return false; + } } img_bytes_remaining = img_bytes; file_bytes_remaining = file_bytes; diff --git a/partitions.hpp b/partitions.hpp index 3cbd8c3b5..f74fac9a1 100644 --- a/partitions.hpp +++ b/partitions.hpp @@ -213,7 +213,7 @@ public: int Partition_SDCard(void); // Repartitions the sdcard TWPartition *Get_Default_Storage_Partition(); // Returns a pointer to a default storage partition int Cancel_Backup(); // Signals partition backup to cancel - + void Clean_Backup_Folder(string Backup_Folder); // Clean Backup Folder on Error int Fix_Permissions(); void Get_Partition_List(string ListType, std::vector *Partition_List); int Fstab_Processed(); // Indicates if the fstab has been processed or not -- cgit v1.2.3