43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
#pragma once
|
|
#include <atomic>
|
|
#include <mutex>
|
|
#include <string>
|
|
|
|
struct TransferState {
|
|
std::atomic<bool> done{false};
|
|
std::atomic<bool> cancelled{false};
|
|
std::atomic<bool> connection_failed{false};
|
|
std::atomic<uint64_t> bytes_done{0};
|
|
std::atomic<uint64_t> bytes_total{0};
|
|
|
|
std::string status;
|
|
std::string fail_reason;
|
|
mutable std::mutex status_mutex;
|
|
|
|
void reset() {
|
|
done = false;
|
|
cancelled = false;
|
|
connection_failed = false;
|
|
bytes_done = 0;
|
|
bytes_total = 0;
|
|
fail_reason.clear();
|
|
std::lock_guard<std::mutex> lock(status_mutex);
|
|
status.clear();
|
|
}
|
|
|
|
double progress() const {
|
|
uint64_t t = bytes_total.load();
|
|
return t ? (double)bytes_done.load() / (double)t * 100.0 : 0.0;
|
|
}
|
|
|
|
std::string getStatus() const {
|
|
std::lock_guard<std::mutex> lock(status_mutex);
|
|
return status;
|
|
}
|
|
|
|
void setStatus(const std::string& s) {
|
|
std::lock_guard<std::mutex> lock(status_mutex);
|
|
status = s;
|
|
}
|
|
};
|