mirror of
https://github.com/Sude-/lgogdownloader.git
synced 2025-02-02 05:52:31 +01:00
Make progressbar display 10 second average download speed
This commit is contained in:
parent
43ee08227c
commit
21e6c6119d
@ -28,6 +28,7 @@
|
||||
#include <json/json.h>
|
||||
#include <ctime>
|
||||
#include <fstream>
|
||||
#include <deque>
|
||||
|
||||
class Timer
|
||||
{
|
||||
@ -72,6 +73,7 @@ class Downloader
|
||||
Timer timer;
|
||||
Config config;
|
||||
ProgressBar* progressbar;
|
||||
std::deque< std::pair<time_t, size_t> > TimeAndSize;
|
||||
protected:
|
||||
private:
|
||||
CURLcode downloadFile(const std::string& url, const std::string& filepath, const std::string& xml_data = std::string(), const std::string& gamename = std::string());
|
||||
|
@ -1643,6 +1643,7 @@ int Downloader::downloadCovers(const std::string& gamename, const std::string& d
|
||||
|
||||
CURLcode Downloader::beginDownload()
|
||||
{
|
||||
this->TimeAndSize.clear();
|
||||
this->timer.reset();
|
||||
CURLcode result = curl_easy_perform(curlhandle);
|
||||
this->resume_position = 0;
|
||||
@ -1734,6 +1735,20 @@ int Downloader::progressCallback(void *clientp, double dltotal, double dlnow, do
|
||||
{
|
||||
downloader->timer.reset();
|
||||
int iTermWidth = Util::getTerminalWidth();
|
||||
|
||||
// 10 second average download speed
|
||||
// Don't use static value of 10 seconds because update interval depends on when and how often progress callback is called
|
||||
downloader->TimeAndSize.push_back(std::make_pair(time(NULL), static_cast<size_t>(dlnow)));
|
||||
if (downloader->TimeAndSize.size() > 100) // 100 * 100ms = 10s
|
||||
{
|
||||
downloader->TimeAndSize.pop_front();
|
||||
time_t time_first = downloader->TimeAndSize.front().first;
|
||||
size_t size_first = downloader->TimeAndSize.front().second;
|
||||
time_t time_last = downloader->TimeAndSize.back().first;
|
||||
size_t size_last = downloader->TimeAndSize.back().second;
|
||||
rate = (size_last - size_first) / static_cast<double>((time_last - time_first));
|
||||
}
|
||||
|
||||
bptime::time_duration eta(bptime::seconds((long)((dltotal - dlnow) / rate)));
|
||||
std::stringstream eta_ss;
|
||||
if (eta.hours() > 23)
|
||||
|
Loading…
x
Reference in New Issue
Block a user