mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-13 06:06:44 +00:00
feat(GODT-3112): replaced error message when bridge exists prematurely. Added a link to support form.
This commit is contained in:
@ -415,7 +415,11 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
catch (Exception const &e) {
|
catch (Exception const &e) {
|
||||||
sentry_uuid_s const uuid = reportSentryException("Exception occurred during main", e);
|
sentry_uuid_s const uuid = reportSentryException("Exception occurred during main", e);
|
||||||
QMessageBox::critical(nullptr, "Error", e.qwhat());
|
QString message = e.qwhat();
|
||||||
|
if (e.showSupportLink()) {
|
||||||
|
message += R"(<br/><br/>If the issue persists, please contact our <a href="https://proton.me/support/contact">customer support</a>.)";
|
||||||
|
}
|
||||||
|
QMessageBox::critical(nullptr, "Error", message);
|
||||||
QTextStream(stderr) << "reportID: " << QByteArray(uuid.bytes, 16).toHex() << " Captured exception :" << e.detailedWhat() << "\n";
|
QTextStream(stderr) << "reportID: " << QByteArray(uuid.bytes, 16).toHex() << " Captured exception :" << e.detailedWhat() << "\n";
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,14 +26,16 @@ namespace bridgepp {
|
|||||||
/// \param[in] what A description of the exception.
|
/// \param[in] what A description of the exception.
|
||||||
/// \param[in] details The optional details for the exception.
|
/// \param[in] details The optional details for the exception.
|
||||||
/// \param[in] function The name of the calling function.
|
/// \param[in] function The name of the calling function.
|
||||||
|
/// \param[in] showSupportLink Should a link to the support web form be included in GUI message.
|
||||||
//****************************************************************************************************************************************************
|
//****************************************************************************************************************************************************
|
||||||
Exception::Exception(QString qwhat, QString details, QString function, QByteArray attachment) noexcept
|
Exception::Exception(QString qwhat, QString details, QString function, QByteArray attachment, bool showSupportLink) noexcept
|
||||||
: std::exception()
|
: std::exception()
|
||||||
, qwhat_(std::move(qwhat))
|
, qwhat_(std::move(qwhat))
|
||||||
, what_(qwhat_.toLocal8Bit())
|
, what_(qwhat_.toLocal8Bit())
|
||||||
, details_(std::move(details))
|
, details_(std::move(details))
|
||||||
, function_(std::move(function))
|
, function_(std::move(function))
|
||||||
, attachment_(std::move(attachment)) {
|
, attachment_(std::move(attachment))
|
||||||
|
, showSupportLink_(showSupportLink) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -46,7 +48,8 @@ Exception::Exception(Exception const &ref) noexcept
|
|||||||
, what_(ref.what_)
|
, what_(ref.what_)
|
||||||
, details_(ref.details_)
|
, details_(ref.details_)
|
||||||
, function_(ref.function_)
|
, function_(ref.function_)
|
||||||
, attachment_(ref.attachment_) {
|
, attachment_(ref.attachment_)
|
||||||
|
, showSupportLink_(ref.showSupportLink_) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +62,8 @@ Exception::Exception(Exception &&ref) noexcept
|
|||||||
, what_(ref.what_)
|
, what_(ref.what_)
|
||||||
, details_(ref.details_)
|
, details_(ref.details_)
|
||||||
, function_(ref.function_)
|
, function_(ref.function_)
|
||||||
, attachment_(ref.attachment_) {
|
, attachment_(ref.attachment_)
|
||||||
|
, showSupportLink_(ref.showSupportLink_) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -118,4 +122,12 @@ QString Exception::detailedWhat() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//****************************************************************************************************************************************************
|
||||||
|
/// \return true iff A link to the support page should shown in the GUI message box.
|
||||||
|
//****************************************************************************************************************************************************
|
||||||
|
bool Exception::showSupportLink() const {
|
||||||
|
return showSupportLink_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace bridgepp
|
} // namespace bridgepp
|
||||||
|
|||||||
@ -33,7 +33,7 @@ namespace bridgepp {
|
|||||||
class Exception : public std::exception {
|
class Exception : public std::exception {
|
||||||
public: // member functions
|
public: // member functions
|
||||||
explicit Exception(QString qwhat = QString(), QString details = QString(), QString function = QString(),
|
explicit Exception(QString qwhat = QString(), QString details = QString(), QString function = QString(),
|
||||||
QByteArray attachment = QByteArray()) noexcept; ///< Constructor
|
QByteArray attachment = QByteArray(), bool showSupportLink = false) noexcept; ///< Constructor
|
||||||
Exception(Exception const &ref) noexcept; ///< copy constructor
|
Exception(Exception const &ref) noexcept; ///< copy constructor
|
||||||
Exception(Exception &&ref) noexcept; ///< copy constructor
|
Exception(Exception &&ref) noexcept; ///< copy constructor
|
||||||
Exception &operator=(Exception const &) = delete; ///< Disabled assignment operator
|
Exception &operator=(Exception const &) = delete; ///< Disabled assignment operator
|
||||||
@ -45,6 +45,7 @@ public: // member functions
|
|||||||
QString function() const noexcept; ///< Return the function that threw the exception.
|
QString function() const noexcept; ///< Return the function that threw the exception.
|
||||||
QByteArray attachment() const noexcept; ///< Return the attachment for the exception.
|
QByteArray attachment() const noexcept; ///< Return the attachment for the exception.
|
||||||
QString detailedWhat() const; ///< Return the detailed description of the message (i.e. including the function name and the details).
|
QString detailedWhat() const; ///< Return the detailed description of the message (i.e. including the function name and the details).
|
||||||
|
bool showSupportLink() const; ///< Return the value for the 'Show support link' option.
|
||||||
|
|
||||||
public: // static data members
|
public: // static data members
|
||||||
static qsizetype const attachmentMaxLength {25 * 1024}; ///< The maximum length text attachment sent in Sentry reports, in bytes.
|
static qsizetype const attachmentMaxLength {25 * 1024}; ///< The maximum length text attachment sent in Sentry reports, in bytes.
|
||||||
@ -55,6 +56,7 @@ private: // data members
|
|||||||
QString const details_; ///< The optional details for the exception.
|
QString const details_; ///< The optional details for the exception.
|
||||||
QString const function_; ///< The name of the function that created the exception.
|
QString const function_; ///< The name of the function that created the exception.
|
||||||
QByteArray const attachment_; ///< The attachment to add to the exception.
|
QByteArray const attachment_; ///< The attachment to add to the exception.
|
||||||
|
bool const showSupportLink_; ///< Should the GUI feedback include a link to support.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -72,8 +72,8 @@ GRPCConfig GRPCClient::waitAndRetrieveServiceConfig(QString const & sessionID, Q
|
|||||||
bool found = false;
|
bool found = false;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (serverProcess && serverProcess->getStatus().ended) {
|
if (serverProcess && serverProcess->getStatus().ended) {
|
||||||
throw Exception("Bridge application exited before providing a gRPC service configuration file.", QString(), __FUNCTION__,
|
throw Exception("Bridge failed to start.", "Bridge application exited before providing a gRPC service configuration file", __FUNCTION__,
|
||||||
tailOfLatestBridgeLog(sessionID));
|
tailOfLatestBridgeLog(sessionID), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user