mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[ui] report ISO progress in main/icon progressbar
* Also improve granularity for ISO progress * Also fixes an issue with badblocks report
This commit is contained in:
parent
8d2fd913b0
commit
bb76f1f636
6 changed files with 37 additions and 20 deletions
|
@ -566,6 +566,9 @@ BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, size_t block_size,
|
||||||
blk_t first_block = 0, last_block = disk_size/block_size;
|
blk_t first_block = 0, last_block = disk_size/block_size;
|
||||||
|
|
||||||
if (report == NULL) return FALSE;
|
if (report == NULL) return FALSE;
|
||||||
|
num_read_errors = 0;
|
||||||
|
num_write_errors = 0;
|
||||||
|
num_corruption_errors = 0;
|
||||||
report->bb_count = 0;
|
report->bb_count = 0;
|
||||||
if (fd != NULL) {
|
if (fd != NULL) {
|
||||||
log_fd = fd;
|
log_fd = fd;
|
||||||
|
|
12
src/format.c
12
src/format.c
|
@ -659,7 +659,7 @@ static BOOL SetupWinPE(char drive_letter)
|
||||||
continue;
|
continue;
|
||||||
uprintf(" 0x%08X: '%s' -> '%s'\n", i, &buf[i], patch_str_rep[j]);
|
uprintf(" 0x%08X: '%s' -> '%s'\n", i, &buf[i], patch_str_rep[j]);
|
||||||
strcpy(&buf[i], patch_str_rep[j]);
|
strcpy(&buf[i], patch_str_rep[j]);
|
||||||
i += max(strlen(patch_str_org[j]), strlen(patch_str_rep[j])); // in case org is a substring of rep
|
i += (DWORD)max(strlen(patch_str_org[j]), strlen(patch_str_rep[j])); // in case org is a substring of rep
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -898,8 +898,8 @@ DWORD WINAPI FormatThread(LPVOID param)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (IsChecked(IDC_DOS)) {
|
if (IsChecked(IDC_DOS)) {
|
||||||
UpdateProgress(OP_DOS, -1.0f);
|
|
||||||
if ((dt == DT_WINME) || (dt == DT_FREEDOS)) {
|
if ((dt == DT_WINME) || (dt == DT_FREEDOS)) {
|
||||||
|
UpdateProgress(OP_DOS, -1.0f);
|
||||||
PrintStatus(0, TRUE, "Copying DOS files...");
|
PrintStatus(0, TRUE, "Copying DOS files...");
|
||||||
if (!ExtractDOS(drive_name)) {
|
if (!ExtractDOS(drive_name)) {
|
||||||
if (!FormatStatus)
|
if (!FormatStatus)
|
||||||
|
@ -908,6 +908,7 @@ DWORD WINAPI FormatThread(LPVOID param)
|
||||||
}
|
}
|
||||||
} else if (dt == DT_ISO) {
|
} else if (dt == DT_ISO) {
|
||||||
if (iso_path != NULL) {
|
if (iso_path != NULL) {
|
||||||
|
UpdateProgress(OP_DOS, 0.0f);
|
||||||
PrintStatus(0, TRUE, "Copying ISO files...");
|
PrintStatus(0, TRUE, "Copying ISO files...");
|
||||||
drive_name[2] = 0;
|
drive_name[2] = 0;
|
||||||
if (!ExtractISO(iso_path, drive_name, FALSE)) {
|
if (!ExtractISO(iso_path, drive_name, FALSE)) {
|
||||||
|
@ -922,14 +923,17 @@ DWORD WINAPI FormatThread(LPVOID param)
|
||||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UpdateProgress(OP_FINALIZE, -1.0f);
|
||||||
|
PrintStatus(0, TRUE, "Finalizing...");
|
||||||
if (IsChecked(IDC_SET_ICON))
|
if (IsChecked(IDC_SET_ICON))
|
||||||
SetAutorun(drive_name);
|
SetAutorun(drive_name);
|
||||||
UpdateProgress(OP_DOS, -1.0f);
|
|
||||||
// Issue another complete remount before we exit, to ensure we're clean
|
// Issue another complete remount before we exit, to ensure we're clean
|
||||||
RemountVolume(drive_name[0]);
|
RemountVolume(drive_name[0]);
|
||||||
// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
|
// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
|
||||||
if ((dt == DT_ISO) && (fs == FS_NTFS))
|
if ((dt == DT_ISO) && (fs == FS_NTFS)) {
|
||||||
CheckDisk(drive_name[0]);
|
CheckDisk(drive_name[0]);
|
||||||
|
UpdateProgress(OP_FINALIZE, -1.0f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
|
|
||||||
// How often should we update the progress bar (in 2K blocks) as updating
|
// How often should we update the progress bar (in 2K blocks) as updating
|
||||||
// the progress bar for every block will bring extraction to a crawl
|
// the progress bar for every block will bring extraction to a crawl
|
||||||
#define PROGRESS_THRESHOLD 1024
|
#define PROGRESS_THRESHOLD 128
|
||||||
#define FOUR_GIGABYTES 4294967296LL
|
#define FOUR_GIGABYTES 4294967296LL
|
||||||
|
|
||||||
// Needed for UDF ISO access
|
// Needed for UDF ISO access
|
||||||
|
@ -237,6 +237,7 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
|
||||||
i_file_length -= i_read;
|
i_file_length -= i_read;
|
||||||
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) {
|
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) {
|
||||||
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
|
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
|
||||||
|
UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If you have a fast USB 3.0 device, the default Windows buffering does an
|
// If you have a fast USB 3.0 device, the default Windows buffering does an
|
||||||
|
@ -352,6 +353,7 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
|
||||||
i_file_length -= ISO_BLOCKSIZE;
|
i_file_length -= ISO_BLOCKSIZE;
|
||||||
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) {
|
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) {
|
||||||
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
|
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
|
||||||
|
UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ISO_BLOCKING(safe_closehandle(file_handle));
|
ISO_BLOCKING(safe_closehandle(file_handle));
|
||||||
|
|
25
src/rufus.c
25
src/rufus.c
|
@ -698,9 +698,11 @@ static BOOL GetUSBDevices(DWORD devnum)
|
||||||
*/
|
*/
|
||||||
static void InitProgress(void)
|
static void InitProgress(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i, dt, fs;
|
||||||
float last_end = 0.0f, slots_discrete = 0.0f, slots_analog = 0.0f;
|
float last_end = 0.0f, slots_discrete = 0.0f, slots_analog = 0.0f;
|
||||||
|
|
||||||
|
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
|
dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType));
|
||||||
memset(&nb_slots, 0, sizeof(nb_slots));
|
memset(&nb_slots, 0, sizeof(nb_slots));
|
||||||
memset(&slot_end, 0, sizeof(slot_end));
|
memset(&slot_end, 0, sizeof(slot_end));
|
||||||
previous_end = 0.0f;
|
previous_end = 0.0f;
|
||||||
|
@ -711,15 +713,18 @@ static void InitProgress(void)
|
||||||
}
|
}
|
||||||
if (IsChecked(IDC_DOS)) {
|
if (IsChecked(IDC_DOS)) {
|
||||||
// 1 extra slot for PBR writing
|
// 1 extra slot for PBR writing
|
||||||
switch (ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType))) {
|
switch (dt) {
|
||||||
case DT_WINME:
|
case DT_WINME:
|
||||||
nb_slots[OP_DOS] = 4+1;
|
nb_slots[OP_DOS] = 3+1;
|
||||||
break;
|
break;
|
||||||
case DT_FREEDOS:
|
case DT_FREEDOS:
|
||||||
nb_slots[OP_DOS] = 6+1;
|
nb_slots[OP_DOS] = 5+1;
|
||||||
|
break;
|
||||||
|
case DT_ISO:
|
||||||
|
nb_slots[OP_DOS] = -1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
nb_slots[OP_DOS] = 3+1;
|
nb_slots[OP_DOS] = 2+1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -730,6 +735,7 @@ static void InitProgress(void)
|
||||||
if (!IsChecked(IDC_QUICKFORMAT)) {
|
if (!IsChecked(IDC_QUICKFORMAT)) {
|
||||||
nb_slots[OP_FORMAT] = -1;
|
nb_slots[OP_FORMAT] = -1;
|
||||||
}
|
}
|
||||||
|
nb_slots[OP_FINALIZE] = ((dt == DT_ISO) && (fs == FS_NTFS))?2:1;
|
||||||
|
|
||||||
for (i=0; i<OP_MAX; i++) {
|
for (i=0; i<OP_MAX; i++) {
|
||||||
if (nb_slots[i] > 0) {
|
if (nb_slots[i] > 0) {
|
||||||
|
@ -1430,6 +1436,11 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
}
|
}
|
||||||
FormatStatus = 0;
|
FormatStatus = 0;
|
||||||
|
// Reset all progress bars
|
||||||
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0);
|
||||||
|
SetTaskbarProgressState(TASKBAR_NORMAL);
|
||||||
|
SetTaskbarProgressValue(0, MAX_PROGRESS);
|
||||||
|
SendMessage(hProgress, PBM_SETPOS, 0, 0);
|
||||||
selection_default = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType));
|
selection_default = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType));
|
||||||
nDeviceIndex = ComboBox_GetCurSel(hDeviceList);
|
nDeviceIndex = ComboBox_GetCurSel(hDeviceList);
|
||||||
if (nDeviceIndex != CB_ERR) {
|
if (nDeviceIndex != CB_ERR) {
|
||||||
|
@ -1462,10 +1473,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
_snwprintf(wstr, ARRAYSIZE(wstr), L"WARNING: ALL DATA ON DEVICE %s\r\nWILL BE DESTROYED.\r\n"
|
_snwprintf(wstr, ARRAYSIZE(wstr), L"WARNING: ALL DATA ON DEVICE %s\r\nWILL BE DESTROYED.\r\n"
|
||||||
L"To continue with this operation, click OK. To quit click CANCEL.", wtmp);
|
L"To continue with this operation, click OK. To quit click CANCEL.", wtmp);
|
||||||
if (MessageBoxW(hMainDialog, wstr, L"Rufus", MB_OKCANCEL|MB_ICONWARNING) == IDOK) {
|
if (MessageBoxW(hMainDialog, wstr, L"Rufus", MB_OKCANCEL|MB_ICONWARNING) == IDOK) {
|
||||||
// Reset all progress bars
|
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0);
|
|
||||||
SetTaskbarProgressState(TASKBAR_NORMAL);
|
|
||||||
SetTaskbarProgressValue(0, MAX_PROGRESS);
|
|
||||||
// Disable all controls except cancel
|
// Disable all controls except cancel
|
||||||
EnableControls(FALSE);
|
EnableControls(FALSE);
|
||||||
DeviceNum = (DWORD)ComboBox_GetItemData(hDeviceList, nDeviceIndex);
|
DeviceNum = (DWORD)ComboBox_GetItemData(hDeviceList, nDeviceIndex);
|
||||||
|
|
|
@ -107,6 +107,7 @@ enum action_type {
|
||||||
OP_CREATE_FS,
|
OP_CREATE_FS,
|
||||||
OP_FIX_MBR,
|
OP_FIX_MBR,
|
||||||
OP_DOS,
|
OP_DOS,
|
||||||
|
OP_FINALIZE,
|
||||||
OP_MAX
|
OP_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
12
src/rufus.rc
12
src/rufus.rc
|
@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 289
|
IDD_DIALOG DIALOGEX 12, 12, 206, 289
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
CAPTION "Rufus v1.2.0.164"
|
CAPTION "Rufus v1.2.0.165"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,248,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,248,50,14
|
||||||
|
@ -71,7 +71,7 @@ BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP
|
DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP
|
||||||
CONTROL "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL,
|
CONTROL "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL,
|
||||||
"SysLink",WS_TABSTOP,46,47,114,9
|
"SysLink",WS_TABSTOP,46,47,114,9
|
||||||
LTEXT "Version 1.2.0 (Build 164)",IDC_STATIC,46,19,78,8
|
LTEXT "Version 1.2.0 (Build 165)",IDC_STATIC,46,19,78,8
|
||||||
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP
|
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP
|
||||||
EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
||||||
LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8
|
LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8
|
||||||
|
@ -216,8 +216,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,2,0,164
|
FILEVERSION 1,2,0,165
|
||||||
PRODUCTVERSION 1,2,0,164
|
PRODUCTVERSION 1,2,0,165
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -234,13 +234,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "akeo.ie"
|
VALUE "CompanyName", "akeo.ie"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "1.2.0.164"
|
VALUE "FileVersion", "1.2.0.165"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "1.2.0.164"
|
VALUE "ProductVersion", "1.2.0.165"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Reference in a new issue