Skip to content

Commit

Permalink
Updater: Show progress in taskbar
Browse files Browse the repository at this point in the history
  • Loading branch information
spycrab committed Nov 8, 2018
1 parent 80259b0 commit 1595a9b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 12 deletions.
7 changes: 1 addition & 6 deletions Source/Core/Updater/Main.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -656,14 +656,9 @@ bool PerformUpdate(const TodoList& todo, const std::string& install_base_path,


void FatalError(const std::string& message) void FatalError(const std::string& message)
{ {
auto wide_message = UTF8ToUTF16(message);

MessageBox(nullptr,
(L"A fatal error occured and the updater cannot continue:\n " + wide_message).c_str(),
L"Error", MB_ICONERROR);

fprintf(log_fp, "%s\n", message.c_str()); fprintf(log_fp, "%s\n", message.c_str());


UI::Error(message);
UI::Stop(); UI::Stop();
} }
} // namespace } // namespace
Expand Down
22 changes: 17 additions & 5 deletions Source/Core/Updater/UI.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "Updater/UI.h" #include "Updater/UI.h"


#include <CommCtrl.h> #include <CommCtrl.h>
#include <ShObjIdl.h>


#include <string> #include <string>


Expand All @@ -16,6 +17,7 @@ namespace
HWND window_handle = nullptr; HWND window_handle = nullptr;
HWND label_handle = nullptr; HWND label_handle = nullptr;
HWND progressbar_handle = nullptr; HWND progressbar_handle = nullptr;
ITaskbarList3* taskbar_list = nullptr;


Common::Flag running; Common::Flag running;
Common::Flag request_stop; Common::Flag request_stop;
Expand Down Expand Up @@ -44,6 +46,8 @@ bool Init()
if (!window_handle) if (!window_handle)
return false; return false;


CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&taskbar_list));

label_handle = CreateWindow(L"STATIC", NULL, WS_VISIBLE | WS_CHILD, 5, 5, 500, 25, window_handle, label_handle = CreateWindow(L"STATIC", NULL, WS_VISIBLE | WS_CHILD, 5, 5, 500, 25, window_handle,
nullptr, nullptr, 0); nullptr, nullptr, 0);


Expand Down Expand Up @@ -80,6 +84,7 @@ void SetMarquee(bool marquee)
{ {
SetWindowLong(progressbar_handle, GWL_STYLE, PROGRESSBAR_FLAGS | (marquee ? PBS_MARQUEE : 0)); SetWindowLong(progressbar_handle, GWL_STYLE, PROGRESSBAR_FLAGS | (marquee ? PBS_MARQUEE : 0));
SendMessage(progressbar_handle, PBM_SETMARQUEE, marquee, 0); SendMessage(progressbar_handle, PBM_SETMARQUEE, marquee, 0);
taskbar_list->SetProgressState(window_handle, marquee ? TBPF_INDETERMINATE : TBPF_NORMAL);
} }


void ResetProgress() void ResetProgress()
Expand All @@ -88,15 +93,22 @@ void ResetProgress()
SetMarquee(true); SetMarquee(true);
} }


void SetProgress(int current, int total) void Error(const std::string& text)
{ {
SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total); auto wide_text = UTF8ToUTF16(text);
SendMessage(progressbar_handle, PBM_SETPOS, current, 0);
MessageBox(nullptr,
(L"A fatal error occured and the updater cannot continue:\n " + wide_text).c_str(),
L"Error", MB_ICONERROR);

taskbar_list->SetProgressState(window_handle, TBPF_ERROR);
} }


void IncrementProgress(int amount) void SetProgress(int current, int total)
{ {
SendMessage(progressbar_handle, PBM_DELTAPOS, amount, 0); SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total);
SendMessage(progressbar_handle, PBM_SETPOS, current, 0);
taskbar_list->SetProgressValue(window_handle, current, total);
} }


void SetDescription(const std::string& text) void SetDescription(const std::string& text)
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Updater/UI.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
namespace UI namespace UI
{ {
void MessageLoop(); void MessageLoop();
void Error(const std::string& text);
void Stop(); void Stop();


void SetDescription(const std::string& text); void SetDescription(const std::string& text);
void SetMarquee(bool marquee); void SetMarquee(bool marquee);
void ResetProgress(); void ResetProgress();
void SetProgress(int current, int total); void SetProgress(int current, int total);
void IncrementProgress(int amount);
} // namespace UI } // namespace UI

0 comments on commit 1595a9b

Please sign in to comment.