mirror of
https://github.com/HamletDuFromage/aio-switch-updater.git
synced 2024-12-01 05:42:02 +00:00
Added information about download progress.
This commit is contained in:
parent
7511637f8d
commit
cc9e74386e
6 changed files with 38 additions and 4 deletions
2
Makefile
2
Makefile
|
@ -22,7 +22,7 @@ DATA := data
|
||||||
INCLUDES := include lib/zipper/include
|
INCLUDES := include lib/zipper/include
|
||||||
APP_TITLE := All-in-One Switch Updater
|
APP_TITLE := All-in-One Switch Updater
|
||||||
APP_AUTHOR := HamletDuFromage
|
APP_AUTHOR := HamletDuFromage
|
||||||
APP_VERSION := 2.4.0
|
APP_VERSION := 2.4.1
|
||||||
TARGET := $(notdir $(CURDIR))
|
TARGET := $(notdir $(CURDIR))
|
||||||
|
|
||||||
ROMFS := resources
|
ROMFS := resources
|
||||||
|
|
|
@ -5,6 +5,9 @@ private:
|
||||||
ProgressEvent() {}
|
ProgressEvent() {}
|
||||||
int _current = 0;
|
int _current = 0;
|
||||||
int _max = 60;
|
int _max = 60;
|
||||||
|
double _now = 0;
|
||||||
|
double _total = 0;
|
||||||
|
double _speed = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProgressEvent(const ProgressEvent&) = delete;
|
ProgressEvent(const ProgressEvent&) = delete;
|
||||||
|
@ -20,11 +23,20 @@ public:
|
||||||
void reset() {
|
void reset() {
|
||||||
_current = 0;
|
_current = 0;
|
||||||
_max = 60;
|
_max = 60;
|
||||||
|
_now = 0;
|
||||||
|
_total = 0;
|
||||||
|
_speed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setTotalSteps(int steps) { _max = steps; }
|
inline void setTotalSteps(int steps) { _max = steps; }
|
||||||
|
inline void setTotalCount(double total) { _total = total; }
|
||||||
|
inline void setSpeed(double speed) { _speed = speed; }
|
||||||
inline void setStep(int step) { _current = step; }
|
inline void setStep(int step) { _current = step; }
|
||||||
|
inline void setNow(double now) { _now = now; }
|
||||||
inline int getStep() { return _current; }
|
inline int getStep() { return _current; }
|
||||||
|
inline double getNow() { return _now; }
|
||||||
inline bool finished() { return (_current == _max) ; }
|
inline bool finished() { return (_current == _max) ; }
|
||||||
inline int getMax() { return _max; }
|
inline int getMax() { return _max; }
|
||||||
|
inline double getTotal() { return _total; }
|
||||||
|
inline double getSpeed() { return _speed; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#include <borealis.hpp>
|
#include <borealis.hpp>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
|
||||||
typedef std::function<void()> worker_func_t;
|
typedef std::function<void()> worker_func_t;
|
||||||
|
|
||||||
class WorkerPage : public brls::View
|
class WorkerPage : public brls::View
|
||||||
|
@ -13,6 +12,7 @@ class WorkerPage : public brls::View
|
||||||
brls::StagedAppletFrame* frame;
|
brls::StagedAppletFrame* frame;
|
||||||
brls::Button* button;
|
brls::Button* button;
|
||||||
brls::Label* label;
|
brls::Label* label;
|
||||||
|
std::string text;
|
||||||
int progressValue = 0;
|
int progressValue = 0;
|
||||||
bool workStarted = false;
|
bool workStarted = false;
|
||||||
std::thread* workerThread;
|
std::thread* workerThread;
|
||||||
|
|
|
@ -118,6 +118,9 @@ ChangelogPage::ChangelogPage() : AppletFrame(true, true)
|
||||||
verTitles.push_back("v2.4.0");
|
verTitles.push_back("v2.4.0");
|
||||||
changes.push_back("\uE016 Added option to extract the entire gbatemp cheats archive.\n\uE016 Shortened load times.\n\uE016 Added German localisation (thanks to github.com/Slluxx).\n\uE016 Added option to disable sysmodules prior to updating.\n\uE016 Improved Japanese localisation (thanks to github.com/yyoossk).\n\uE016 Added current AMS version display.");
|
changes.push_back("\uE016 Added option to extract the entire gbatemp cheats archive.\n\uE016 Shortened load times.\n\uE016 Added German localisation (thanks to github.com/Slluxx).\n\uE016 Added option to disable sysmodules prior to updating.\n\uE016 Improved Japanese localisation (thanks to github.com/yyoossk).\n\uE016 Added current AMS version display.");
|
||||||
|
|
||||||
|
verTitles.push_back("v2.4.1");
|
||||||
|
changes.push_back("\uE016 Added information about download progress.");
|
||||||
|
|
||||||
for(int i = verTitles.size() -1 ; i >= 0; i--){
|
for(int i = verTitles.size() -1 ; i >= 0; i--){
|
||||||
listItem = new brls::ListItem(verTitles[i]);
|
listItem = new brls::ListItem(verTitles[i]);
|
||||||
change = changes[i];
|
change = changes[i];
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
@ -16,6 +17,9 @@
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
std::chrono::_V2::steady_clock::time_point time_old;
|
||||||
|
double dlold;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char *memory;
|
char *memory;
|
||||||
|
@ -54,6 +58,15 @@ int download_progress(void *p, double dltotal, double dlnow, double ultotal, dou
|
||||||
double fractionDownloaded = dlnow / dltotal;
|
double fractionDownloaded = dlnow / dltotal;
|
||||||
int counter = (int) (fractionDownloaded * ProgressEvent::instance().getMax()); //20 is the number of increments
|
int counter = (int) (fractionDownloaded * ProgressEvent::instance().getMax()); //20 is the number of increments
|
||||||
ProgressEvent::instance().setStep(std::min(ProgressEvent::instance().getMax() - 1, counter));
|
ProgressEvent::instance().setStep(std::min(ProgressEvent::instance().getMax() - 1, counter));
|
||||||
|
ProgressEvent::instance().setNow(dlnow);
|
||||||
|
ProgressEvent::instance().setTotalCount(dltotal);
|
||||||
|
auto time_now = std::chrono::steady_clock::now();
|
||||||
|
double elasped_time = ((std::chrono::duration<double>) (time_now - time_old)).count();
|
||||||
|
if(elasped_time > 1.0f) {
|
||||||
|
ProgressEvent::instance().setSpeed((dlnow - dlold) / elasped_time);
|
||||||
|
dlold = dlnow;
|
||||||
|
time_old = time_now;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +75,8 @@ std::vector<std::uint8_t> downloadFile(const char *url, const char *output, int
|
||||||
ProgressEvent::instance().reset();
|
ProgressEvent::instance().reset();
|
||||||
CURL *curl = curl_easy_init();
|
CURL *curl = curl_easy_init();
|
||||||
ntwrk_struct_t chunk = {0};
|
ntwrk_struct_t chunk = {0};
|
||||||
|
time_old = std::chrono::steady_clock::now();
|
||||||
|
dlold = 0.0f;
|
||||||
if (curl)
|
if (curl)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(output, "wb");
|
FILE *fp = fopen(output, "wb");
|
||||||
|
@ -84,7 +99,6 @@ std::vector<std::uint8_t> downloadFile(const char *url, const char *output, int
|
||||||
if (api == OFF)
|
if (api == OFF)
|
||||||
{
|
{
|
||||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
||||||
//curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &prog);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, download_progress);
|
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, download_progress);
|
||||||
}
|
}
|
||||||
curl_easy_perform(curl);
|
curl_easy_perform(curl);
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
#include "constants.hpp"
|
#include "constants.hpp"
|
||||||
#include "progress_event.hpp"
|
#include "progress_event.hpp"
|
||||||
|
|
||||||
WorkerPage::WorkerPage(brls::StagedAppletFrame* frame, const std::string& text, worker_func_t worker_func): frame(frame), workerFunc(worker_func)
|
|
||||||
|
WorkerPage::WorkerPage(brls::StagedAppletFrame* frame, const std::string& text, worker_func_t worker_func): frame(frame), workerFunc(worker_func), text(text)
|
||||||
{
|
{
|
||||||
this->progressDisp = new brls::ProgressDisplay();
|
this->progressDisp = new brls::ProgressDisplay();
|
||||||
this->progressDisp->setParent(this);
|
this->progressDisp->setParent(this);
|
||||||
|
@ -43,6 +44,10 @@ void WorkerPage::draw(NVGcontext* vg, int x, int y, unsigned width, unsigned hei
|
||||||
{
|
{
|
||||||
this->progressDisp->setProgress(ProgressEvent::instance().getStep(), ProgressEvent::instance().getMax());
|
this->progressDisp->setProgress(ProgressEvent::instance().getStep(), ProgressEvent::instance().getMax());
|
||||||
this->progressDisp->frame(ctx);
|
this->progressDisp->frame(ctx);
|
||||||
|
if(ProgressEvent::instance().getTotal()) {
|
||||||
|
this->label->setText(fmt::format("{0} ({1:.1f} MB of {2:.1f} MB - {3:.1f} MB/s)", text, ProgressEvent::instance().getNow() / 0x100000, ProgressEvent::instance().getTotal() / 0x100000, ProgressEvent::instance().getSpeed() / 0x100000));
|
||||||
|
//this->label->setText(fmt::format("{0} ({1:.1f}MB of {2:.1f}MB - MB/s)", text, ProgressEvent::instance().getNow() / 0x100000, ProgressEvent::instance().getTotal() / 0x100000));
|
||||||
|
}
|
||||||
this->label->frame(ctx);
|
this->label->frame(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue