master
h 48 lines 1.23 KB
Raw
1 /*++
2
3 Copyright (c) Microsoft. All rights reserved.
4
5 Module Name:
6
7 HandleConsoleProgressBar.h
8
9 Abstract:
10
11 This file contains the definition of the HandleConsoleProgressBar class.
12
13 --*/
14
15 #pragma once
16
17 #include "ConsoleProgressBar.h"
18 #include "ConsoleProgressIndicator.h"
19
20 namespace wsl::windows::common {
21 class HandleConsoleProgressBar
22 {
23 public:
24 enum Format
25 {
26 FilePointer,
27 FileSize
28 };
29
30 HandleConsoleProgressBar(HANDLE handle, std::wstring&& message, Format format = FilePointer);
31 HandleConsoleProgressBar(const HandleConsoleProgressBar&) = delete;
32 HandleConsoleProgressBar(HandleConsoleProgressBar&&) = delete;
33
34 ~HandleConsoleProgressBar();
35
36 HandleConsoleProgressBar& operator=(const HandleConsoleProgressBar&) = delete;
37 HandleConsoleProgressBar& operator=(HandleConsoleProgressBar&&) = delete;
38
39 private:
40 void UpdateProgress(HANDLE handle, LARGE_INTEGER totalBytes, ConsoleProgressBar& progressBar) const;
41 void UpdateFileSize(HANDLE handle, ConsoleProgressIndicator& progressBar) const;
42
43 wil::unique_event m_event{wil::EventOptions::ManualReset};
44 std::thread m_thread;
45 std::variant<ConsoleProgressBar, ConsoleProgressIndicator> m_progressBar;
46 };
47
48 } // namespace wsl::windows::common