gparted/include/Copy_Blocks.h

67 lines
1.8 KiB
C
Raw Normal View History

/* Copyright (C) 2013 Phillip Susi
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GPARTED_COPY_BLOCKS_H
#define GPARTED_COPY_BLOCKS_H
Write a generic progress bar class (#760709) Write a generic progress bar class. Has the following features: * Has separate progress and target numbers, rather than a single completion fraction, to enable the the next feature. * Optionally generates text reporting the amount of data copied using the progress and target numbers like this: "1.00 MiB of 16.00 MiB copied" * After running for 5 seconds, also add estimated remaining time. (Waits to allow the data copying rate to settle down a little before estimating the remaining time). Looks like this: "1.00 MiB of 16.00 MiB copied (00:01:59) remaining)" The ProgressBar class is not driving the visual progress bar yet. It has just been added into the internal block copy algorithm and generates debug messages showing the progress bar is operating correctly. Debugging looks like this: DEBUG: ProgressBar::start(target=2.0636e+09, text_mode=PROGRESSBAR_TEXT_COPY_BYTES) DEBUG: ProgressBar::update(progress=1.30023e+08) m_fraction=0.0630081 m_text="124.00 MiB of 1.92 GiB copied" DEBUG: ProgressBar::update(progress=2.67387e+08) m_fraction=0.129573 m_text="255.00 MiB of 1.92 GiB copied" DEBUG: ProgressBar::update(progress=4.0475e+08) m_fraction=0.196138 m_text="386.00 MiB of 1.92 GiB copied" ... DEBUG: ProgressBar::update(progress=1.13351e+09) m_fraction=0.549289 m_text="1.06 GiB of 1.92 GiB copied (00:00:04 remaining)" DEBUG: ProgressBar::update(progress=1.26249e+09) m_fraction=0.611789 m_text="1.18 GiB of 1.92 GiB copied (00:00:04 remaining)" DEBUG: ProgressBar::update(progress=1.39041e+09) m_fraction=0.67378 m_text="1.29 GiB of 1.92 GiB copied (00:00:03 remaining)" ... DEBUG: ProgressBar::update(progress=1.97552e+09) m_fraction=0.957317 m_text="1.84 GiB of 1.92 GiB copied (00:00:00 remaining)" DEBUG: ProgressBar::update(progress=2.0636e+09) m_fraction=1 m_text="1.92 GiB of 1.92 GiB copied" DEBUG: ProgressBar::stop() Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific copy methods
2016-01-11 05:19:05 -07:00
#include "../include/OperationDetail.h"
#include "../include/Utils.h"
#include <glibmm/ustring.h>
#include <parted/parted.h>
namespace GParted {
class copy_blocks {
const Glib::ustring & src_device;
const Glib::ustring & dst_device;
Byte_Value length;
Byte_Value blocksize;
OperationDetail &operationdetail;
Byte_Value & total_done;
Byte_Value total_length;
char *buf;
Byte_Value done;
PedDevice *lp_device_src;
PedDevice *lp_device_dst;
Sector offset_src;
Sector offset_dst;
bool success;
Glib::ustring error_message;
void copy_thread();
bool cancel;
bool cancel_safe;
void set_cancel( bool force );
public:
bool set_progress_info();
copy_blocks( const Glib::ustring & in_src_device,
const Glib::ustring & in_dst_device,
Sector src_start,
Sector dst_start,
Byte_Value in_length,
Byte_Value in_blocksize,
OperationDetail & in_operationdetail,
Byte_Value & in_total_done,
Byte_Value in_total_length,
bool cancel_safe );
bool copy();
void copy_block();
};
} // namespace GParted
#endif /* GPARTED_COPY_BLOCKS_H */