diff options
author | Ethan Yonker <dees_troy@teamw.in> | 2016-02-25 20:47:30 +0100 |
---|---|---|
committer | Dees Troy <dees_troy@teamw.in> | 2016-03-31 16:44:24 +0200 |
commit | 472f506817bb1af2fceb039ba148d15723944562 (patch) | |
tree | 187516086121c42b1b671f69b4fc252fe5498b1c /progresstracking.cpp | |
parent | DataManager Updates (diff) | |
download | android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar.gz android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar.bz2 android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar.lz android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar.xz android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.tar.zst android_bootable_recovery-472f506817bb1af2fceb039ba148d15723944562.zip |
Diffstat (limited to 'progresstracking.cpp')
-rw-r--r-- | progresstracking.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/progresstracking.cpp b/progresstracking.cpp new file mode 100644 index 000000000..b43e13057 --- /dev/null +++ b/progresstracking.cpp @@ -0,0 +1,108 @@ +/* + Copyright 2016 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +// Progress tracking class for tracking backup progess and updating the progress bar as appropriate + + +#include "progresstracking.hpp" +#include "twcommon.h" +#ifndef BUILD_TWRPTAR_MAIN +#include "gui/gui.hpp" +#include "data.hpp" +#endif +#include "twrp-functions.hpp" +#include <time.h> + +const int32_t update_interval_ms = 200; // Update interval in ms + +ProgressTracking::ProgressTracking(const unsigned long long backup_size) { + total_backup_size = backup_size; + partition_size = 0; + file_count = 0; + current_size = 0; + current_count = 0; + previous_partitions_size = 0; + display_file_count = false; + clock_gettime(CLOCK_MONOTONIC, &last_update); +} + +void ProgressTracking::SetPartitionSize(const unsigned long long part_size) { + previous_partitions_size += partition_size; + partition_size = part_size; + UpdateDisplayDetails(true); +} + +void ProgressTracking::SetSizeCount(const unsigned long long part_size, unsigned long long f_count) { + previous_partitions_size += partition_size; + partition_size = part_size; + file_count = f_count; + display_file_count = (file_count != 0); + UpdateDisplayDetails(true); +} + +void ProgressTracking::UpdateSize(const unsigned long long size) { + current_size = size; + UpdateDisplayDetails(false); +} + +void ProgressTracking::UpdateSizeCount(const unsigned long long size, const unsigned long long count) { + current_size = size; + current_count = count; + UpdateDisplayDetails(false); +} + +void ProgressTracking::DisplayFileCount(const bool display) { + display_file_count = display; + UpdateDisplayDetails(true); +} + +void ProgressTracking::UpdateDisplayDetails(const bool force) { +#ifndef BUILD_TWRPTAR_MAIN + if (!force) { + // Do something to check the time frame and only update periodically to reduce the total number of GUI updates + timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + + int32_t diff = TWFunc::timespec_diff_ms(last_update, now); + if (diff < update_interval_ms) + return; + } + clock_gettime(CLOCK_MONOTONIC, &last_update); + double display_percent, progress_percent; + string size_prog = gui_lookup("size_progress", "%lluMB of %lluMB, %i%%"); + char size_progress[1024]; + + if (total_backup_size != 0) // prevent division by 0 + display_percent = (double)(current_size + previous_partitions_size) / (double)(total_backup_size) * 100; + sprintf(size_progress, size_prog.c_str(), (current_size + previous_partitions_size) / 1048576, total_backup_size / 1048576, (int)(display_percent)); + DataManager::SetValue("tw_size_progress", size_progress); + progress_percent = (display_percent / 100); + DataManager::SetProgress((float)(progress_percent)); + + if (!display_file_count || file_count == 0) { + DataManager::SetValue("tw_file_progress", ""); + } else { + string file_prog = gui_lookup("file_progress", "%llu of %llu files, %i%%"); + char file_progress[1024]; + + display_percent = (double)(current_count) / (double)(file_count) * 100; + sprintf(file_progress, file_prog.c_str(), current_count, file_count, (int)(display_percent)); + DataManager::SetValue("tw_file_progress", file_progress); + } +#endif +} |