mirror of
https://github.com/monero-project/monero-gui.git
synced 2025-01-03 09:29:38 +00:00
Merge pull request #4147
3331078
p2pool: fix crash without network connection (selsta)6ac8e7a
p2pool: add more detailed failure message (selsta)
This commit is contained in:
commit
866a7b3a78
3 changed files with 34 additions and 7 deletions
|
@ -641,10 +641,25 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function p2poolDownloadFailed() {
|
function p2poolDownloadFailed(errorCode) {
|
||||||
statusMessage.visible = false
|
statusMessage.visible = false
|
||||||
errorPopup.title = qsTr("P2Pool Installation Failed") + translationManager.emptyString;
|
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.icon = StandardIcon.Critical
|
||||||
errorPopup.open()
|
errorPopup.open()
|
||||||
update()
|
update()
|
||||||
|
|
|
@ -68,7 +68,10 @@ void P2PoolManager::download() {
|
||||||
std::chrono::milliseconds timeout = std::chrono::seconds(10);
|
std::chrono::milliseconds timeout = std::chrono::seconds(10);
|
||||||
http_client.set_server(url.host().toStdString(), "443", {});
|
http_client.set_server(url.host().toStdString(), "443", {});
|
||||||
bool success = http_client.invoke_get(url.path().toStdString(), timeout, {}, std::addressof(response), {{"User-Agent", userAgent}});
|
bool success = http_client.invoke_get(url.path().toStdString(), timeout, {}, std::addressof(response), {{"User-Agent", userAgent}});
|
||||||
if (response->m_response_code == 302) {
|
if (success && response->m_response_code == 404) {
|
||||||
|
emit p2poolDownloadFailure(BinaryNotAvailable);
|
||||||
|
return;
|
||||||
|
} else if (success && response->m_response_code == 302) {
|
||||||
epee::net_utils::http::fields_list fields = response->m_header_info.m_etc_fields;
|
epee::net_utils::http::fields_list fields = response->m_header_info.m_etc_fields;
|
||||||
for (std::pair<std::string, std::string> i : fields) {
|
for (std::pair<std::string, std::string> i : fields) {
|
||||||
if (i.first == "Location") {
|
if (i.first == "Location") {
|
||||||
|
@ -82,7 +85,7 @@ void P2PoolManager::download() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!success) {
|
if (!success) {
|
||||||
emit p2poolDownloadFailure();
|
emit p2poolDownloadFailure(ConnectionIssue);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::string stringData = response->m_body;
|
std::string stringData = response->m_body;
|
||||||
|
@ -90,7 +93,7 @@ void P2PoolManager::download() {
|
||||||
QByteArray hashData = QCryptographicHash::hash(data, QCryptographicHash::Sha256);
|
QByteArray hashData = QCryptographicHash::hash(data, QCryptographicHash::Sha256);
|
||||||
QString hash = hashData.toHex();
|
QString hash = hashData.toHex();
|
||||||
if (hash != validHash) {
|
if (hash != validHash) {
|
||||||
emit p2poolDownloadFailure();
|
emit p2poolDownloadFailure(HashVerificationFailed);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
file.open(QIODevice::WriteOnly);
|
file.open(QIODevice::WriteOnly);
|
||||||
|
@ -102,7 +105,7 @@ void P2PoolManager::download() {
|
||||||
emit p2poolDownloadSuccess();
|
emit p2poolDownloadSuccess();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
emit p2poolDownloadFailure();
|
emit p2poolDownloadFailure(InstallationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,13 +51,22 @@ public:
|
||||||
Q_INVOKABLE bool isInstalled();
|
Q_INVOKABLE bool isInstalled();
|
||||||
Q_INVOKABLE void getStatus();
|
Q_INVOKABLE void getStatus();
|
||||||
Q_INVOKABLE void download();
|
Q_INVOKABLE void download();
|
||||||
|
|
||||||
|
enum DownloadError {
|
||||||
|
BinaryNotAvailable,
|
||||||
|
ConnectionIssue,
|
||||||
|
HashVerificationFailed,
|
||||||
|
InstallationFailed,
|
||||||
|
};
|
||||||
|
Q_ENUM(DownloadError)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool running(NetworkType::Type nettype) const;
|
bool running(NetworkType::Type nettype) const;
|
||||||
signals:
|
signals:
|
||||||
void p2poolStartFailure() const;
|
void p2poolStartFailure() const;
|
||||||
void p2poolStatus(bool isMining, int hashrate) const;
|
void p2poolStatus(bool isMining, int hashrate) const;
|
||||||
void p2poolDownloadFailure() const;
|
void p2poolDownloadFailure(int errorCode) const;
|
||||||
void p2poolDownloadSuccess() const;
|
void p2poolDownloadSuccess() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue