p2pool: add more detailed failure message

This commit is contained in:
selsta 2023-04-09 03:00:42 +02:00
parent f650e96363
commit 6ac8e7a464
No known key found for this signature in database
GPG key ID: 2EA0A99A8B07AE5E
3 changed files with 34 additions and 7 deletions

View file

@ -641,10 +641,25 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
}
}
function p2poolDownloadFailed() {
function p2poolDownloadFailed(errorCode) {
statusMessage.visible = false
errorPopup.title = qsTr("P2Pool Installation Failed") + translationManager.emptyString;
errorPopup.text = qsTr("P2Pool installation failed.") + isWindows ? (" " + qsTr("Try starting the program with administrator privileges.")) : ""
switch (errorCode) {
case P2PoolManager.HashVerificationFailed:
errorPopup.text = qsTr("Hash verification failed.") + translationManager.emptyString;
break;
case P2PoolManager.BinaryNotAvailable:
errorPopup.text = qsTr("P2Pool download is not available.") + translationManager.emptyString;
break;
case P2PoolManager.ConnectionIssue:
errorPopup.text = qsTr("P2Pool download failed due to a connection issue.") + translationManager.emptyString;
break;
case P2PoolManager.InstallationFailed:
errorPopup.text = qsTr("P2Pool installation failed.") + (isWindows ? (" " + qsTr("Try starting the program with administrator privileges.")) : "")
break;
default:
errorPopup.text = qsTr("Unknown error.") + translationManager.emptyString;
}
errorPopup.icon = StandardIcon.Critical
errorPopup.open()
update()

View file

@ -68,7 +68,10 @@ void P2PoolManager::download() {
std::chrono::milliseconds timeout = std::chrono::seconds(10);
http_client.set_server(url.host().toStdString(), "443", {});
bool success = http_client.invoke_get(url.path().toStdString(), timeout, {}, std::addressof(response), {{"User-Agent", userAgent}});
if (response->m_response_code == 302) {
if (response->m_response_code == 404) {
emit p2poolDownloadFailure(BinaryNotAvailable);
return;
} else if (response->m_response_code == 302) {
epee::net_utils::http::fields_list fields = response->m_header_info.m_etc_fields;
for (std::pair<std::string, std::string> i : fields) {
if (i.first == "Location") {
@ -82,7 +85,7 @@ void P2PoolManager::download() {
}
}
if (!success) {
emit p2poolDownloadFailure();
emit p2poolDownloadFailure(ConnectionIssue);
}
else {
std::string stringData = response->m_body;
@ -90,7 +93,7 @@ void P2PoolManager::download() {
QByteArray hashData = QCryptographicHash::hash(data, QCryptographicHash::Sha256);
QString hash = hashData.toHex();
if (hash != validHash) {
emit p2poolDownloadFailure();
emit p2poolDownloadFailure(HashVerificationFailed);
}
else {
file.open(QIODevice::WriteOnly);
@ -102,7 +105,7 @@ void P2PoolManager::download() {
emit p2poolDownloadSuccess();
}
else {
emit p2poolDownloadFailure();
emit p2poolDownloadFailure(InstallationFailed);
}
}
}

View file

@ -51,13 +51,22 @@ public:
Q_INVOKABLE bool isInstalled();
Q_INVOKABLE void getStatus();
Q_INVOKABLE void download();
enum DownloadError {
BinaryNotAvailable,
ConnectionIssue,
HashVerificationFailed,
InstallationFailed,
};
Q_ENUM(DownloadError)
private:
bool running(NetworkType::Type nettype) const;
signals:
void p2poolStartFailure() const;
void p2poolStatus(bool isMining, int hashrate) const;
void p2poolDownloadFailure() const;
void p2poolDownloadFailure(int errorCode) const;
void p2poolDownloadSuccess() const;
private: