mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-06 03:58:02 +08:00
add ETA in read/write tasks
This commit is contained in:
parent
fb67c9eab2
commit
782605f2d1
@ -526,6 +526,18 @@ Result util_close_archive(FS_Archive archive) {
|
||||
return FSUSER_CloseArchive(archive);
|
||||
}
|
||||
|
||||
const char* util_get_display_eta(u32 seconds) {
|
||||
static char disp[9];
|
||||
|
||||
u8 hours = seconds / 3600;
|
||||
seconds -= hours * 3600;
|
||||
u8 minutes = seconds / 60;
|
||||
seconds -= minutes* 60;
|
||||
|
||||
snprintf(disp, 9, "%02u:%02u:%02u", hours, minutes, (u8) seconds);
|
||||
return disp;
|
||||
}
|
||||
|
||||
double util_get_display_size(u64 size) {
|
||||
double s = size;
|
||||
if(s > 1024) {
|
||||
|
@ -76,6 +76,7 @@ Result util_open_archive(FS_Archive* archive, FS_ArchiveID id, FS_Path path);
|
||||
Result util_ref_archive(FS_Archive archive);
|
||||
Result util_close_archive(FS_Archive archive);
|
||||
|
||||
const char* util_get_display_eta(u32 seconds);
|
||||
double util_get_display_size(u64 size);
|
||||
const char* util_get_display_size_units(u64 size);
|
||||
|
||||
|
@ -122,7 +122,7 @@ static void action_erase_twl_save_update(ui_view* view, void* data, float* progr
|
||||
}
|
||||
|
||||
*progress = eraseData->eraseInfo.currTotal != 0 ? (float) ((double) eraseData->eraseInfo.currProcessed / (double) eraseData->eraseInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s", util_get_display_size(eraseData->eraseInfo.currProcessed), util_get_display_size_units(eraseData->eraseInfo.currProcessed), util_get_display_size(eraseData->eraseInfo.currTotal), util_get_display_size_units(eraseData->eraseInfo.currTotal), util_get_display_size(eraseData->eraseInfo.copyBytesPerSecond), util_get_display_size_units(eraseData->eraseInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", util_get_display_size(eraseData->eraseInfo.currProcessed), util_get_display_size_units(eraseData->eraseInfo.currProcessed), util_get_display_size(eraseData->eraseInfo.currTotal), util_get_display_size_units(eraseData->eraseInfo.currTotal), util_get_display_size(eraseData->eraseInfo.copyBytesPerSecond), util_get_display_size_units(eraseData->eraseInfo.copyBytesPerSecond), util_get_display_eta(eraseData->eraseInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_erase_twl_save_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -144,7 +144,7 @@ static void action_export_twl_save_update(ui_view* view, void* data, float* prog
|
||||
}
|
||||
|
||||
*progress = exportData->exportInfo.currTotal != 0 ? (float) ((double) exportData->exportInfo.currProcessed / (double) exportData->exportInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s", util_get_display_size(exportData->exportInfo.currProcessed), util_get_display_size_units(exportData->exportInfo.currProcessed), util_get_display_size(exportData->exportInfo.currTotal), util_get_display_size_units(exportData->exportInfo.currTotal), util_get_display_size(exportData->exportInfo.copyBytesPerSecond), util_get_display_size_units(exportData->exportInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", util_get_display_size(exportData->exportInfo.currProcessed), util_get_display_size_units(exportData->exportInfo.currProcessed), util_get_display_size(exportData->exportInfo.currTotal), util_get_display_size_units(exportData->exportInfo.currTotal), util_get_display_size(exportData->exportInfo.copyBytesPerSecond), util_get_display_size_units(exportData->exportInfo.copyBytesPerSecond), util_get_display_eta(exportData->exportInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_export_twl_save_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -130,7 +130,7 @@ static void action_import_twl_save_update(ui_view* view, void* data, float* prog
|
||||
}
|
||||
|
||||
*progress = importData->importInfo.currTotal != 0 ? (float) ((double) importData->importInfo.currProcessed / (double) importData->importInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s", util_get_display_size(importData->importInfo.currProcessed), util_get_display_size_units(importData->importInfo.currProcessed), util_get_display_size(importData->importInfo.currTotal), util_get_display_size_units(importData->importInfo.currTotal), util_get_display_size(importData->importInfo.copyBytesPerSecond), util_get_display_size_units(importData->importInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", util_get_display_size(importData->importInfo.currProcessed), util_get_display_size_units(importData->importInfo.currProcessed), util_get_display_size(importData->importInfo.currTotal), util_get_display_size_units(importData->importInfo.currTotal), util_get_display_size(importData->importInfo.copyBytesPerSecond), util_get_display_size_units(importData->importInfo.copyBytesPerSecond), util_get_display_eta(importData->importInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_import_twl_save_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -240,7 +240,7 @@ static void action_install_cdn_update(ui_view* view, void* data, float* progress
|
||||
}
|
||||
|
||||
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond), util_get_display_eta(installData->installInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_install_cdn_n3ds_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -247,7 +247,7 @@ static void action_install_cias_update(ui_view* view, void* data, float* progres
|
||||
}
|
||||
|
||||
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond), util_get_display_eta(installData->installInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_install_cias_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -210,7 +210,7 @@ static void action_install_tickets_update(ui_view* view, void* data, float* prog
|
||||
}
|
||||
|
||||
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond), util_get_display_eta(installData->installInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
#define CDN_PROMPT_DEFAULT_VERSION 0
|
||||
|
@ -287,7 +287,7 @@ static void action_install_url_install_update(ui_view* view, void* data, float*
|
||||
}
|
||||
|
||||
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total, util_get_display_size(installData->installInfo.currProcessed), util_get_display_size_units(installData->installInfo.currProcessed), util_get_display_size(installData->installInfo.currTotal), util_get_display_size_units(installData->installInfo.currTotal), util_get_display_size(installData->installInfo.copyBytesPerSecond), util_get_display_size_units(installData->installInfo.copyBytesPerSecond), util_get_display_eta(installData->installInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_install_url_confirm_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -279,7 +279,7 @@ static void action_paste_contents_update(ui_view* view, void* data, float* progr
|
||||
}
|
||||
|
||||
*progress = pasteData->pasteInfo.currTotal != 0 ? (float) ((double) pasteData->pasteInfo.currProcessed / (double) pasteData->pasteInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s", pasteData->pasteInfo.processed, pasteData->pasteInfo.total, util_get_display_size(pasteData->pasteInfo.currProcessed), util_get_display_size_units(pasteData->pasteInfo.currProcessed), util_get_display_size(pasteData->pasteInfo.currTotal), util_get_display_size_units(pasteData->pasteInfo.currTotal), util_get_display_size(pasteData->pasteInfo.copyBytesPerSecond), util_get_display_size_units(pasteData->pasteInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", pasteData->pasteInfo.processed, pasteData->pasteInfo.total, util_get_display_size(pasteData->pasteInfo.currProcessed), util_get_display_size_units(pasteData->pasteInfo.currProcessed), util_get_display_size(pasteData->pasteInfo.currTotal), util_get_display_size_units(pasteData->pasteInfo.currTotal), util_get_display_size(pasteData->pasteInfo.copyBytesPerSecond), util_get_display_size_units(pasteData->pasteInfo.copyBytesPerSecond), util_get_display_eta(pasteData->pasteInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void action_paste_contents_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -122,7 +122,7 @@ static void dumpnand_update(ui_view* view, void* data, float* progress, char* te
|
||||
}
|
||||
|
||||
*progress = dumpData->currTotal != 0 ? (float) ((double) dumpData->currProcessed / (double) dumpData->currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s", util_get_display_size(dumpData->currProcessed), util_get_display_size_units(dumpData->currProcessed), util_get_display_size(dumpData->currTotal), util_get_display_size_units(dumpData->currTotal), util_get_display_size(dumpData->copyBytesPerSecond), util_get_display_size_units(dumpData->copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", util_get_display_size(dumpData->currProcessed), util_get_display_size_units(dumpData->currProcessed), util_get_display_size(dumpData->currTotal), util_get_display_size_units(dumpData->currTotal), util_get_display_size(dumpData->copyBytesPerSecond), util_get_display_size_units(dumpData->copyBytesPerSecond), util_get_display_eta(dumpData->estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void dumpnand_onresponse(ui_view* view, void* data, u32 response) {
|
||||
|
@ -68,6 +68,7 @@ static Result task_data_op_copy(data_op_data* data, u32 index) {
|
||||
if(buffer != NULL) {
|
||||
u32 dstHandle = 0;
|
||||
|
||||
u64 ioStartTime = 0;
|
||||
u64 lastBytesPerSecondUpdate = osGetTime();
|
||||
u32 bytesSinceUpdate = 0;
|
||||
|
||||
@ -103,6 +104,15 @@ static Result task_data_op_copy(data_op_data* data, u32 index) {
|
||||
if(elapsed >= 1000) {
|
||||
data->copyBytesPerSecond = (u32) (bytesSinceUpdate / (elapsed / 1000.0f));
|
||||
|
||||
if (ioStartTime != 0) {
|
||||
data->estimatedRemainingSeconds = (u32) ((data->currTotal - data->currProcessed) / (data->currProcessed / ((time - ioStartTime) / 1000.0f)));
|
||||
} else {
|
||||
data->estimatedRemainingSeconds = 0;
|
||||
}
|
||||
if (ioStartTime == 0 && data->currProcessed > 0) {
|
||||
ioStartTime = time;
|
||||
}
|
||||
|
||||
bytesSinceUpdate = 0;
|
||||
lastBytesPerSecondUpdate = time;
|
||||
}
|
||||
|
@ -107,6 +107,7 @@ typedef struct data_op_data_s {
|
||||
bool copyEmpty;
|
||||
|
||||
u32 copyBytesPerSecond;
|
||||
u32 estimatedRemainingSeconds;
|
||||
|
||||
u32 processed;
|
||||
u32 total;
|
||||
|
@ -151,7 +151,7 @@ static void update_install_update(ui_view* view, void* data, float* progress, ch
|
||||
}
|
||||
|
||||
*progress = updateData->installInfo.currTotal != 0 ? (float) ((double) updateData->installInfo.currProcessed / (double) updateData->installInfo.currTotal) : 0;
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s", util_get_display_size(updateData->installInfo.currProcessed), util_get_display_size_units(updateData->installInfo.currProcessed), util_get_display_size(updateData->installInfo.currTotal), util_get_display_size_units(updateData->installInfo.currTotal), util_get_display_size(updateData->installInfo.copyBytesPerSecond), util_get_display_size_units(updateData->installInfo.copyBytesPerSecond));
|
||||
snprintf(text, PROGRESS_TEXT_MAX, "%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", util_get_display_size(updateData->installInfo.currProcessed), util_get_display_size_units(updateData->installInfo.currProcessed), util_get_display_size(updateData->installInfo.currTotal), util_get_display_size_units(updateData->installInfo.currTotal), util_get_display_size(updateData->installInfo.copyBytesPerSecond), util_get_display_size_units(updateData->installInfo.copyBytesPerSecond), util_get_display_eta(updateData->installInfo.estimatedRemainingSeconds));
|
||||
}
|
||||
|
||||
static void update_check_update(ui_view* view, void* data, float* progress, char* text) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user