From 0b6842abd2877886dcb0ca4154e93d9bae1ef80c Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sat, 10 Sep 2022 18:43:04 +0200 Subject: QXmppError: Add fromIoDevice() --- src/base/QXmppError.cpp | 14 ++++++++++++++ src/base/QXmppError.h | 4 ++++ 2 files changed, 18 insertions(+) (limited to 'src/base') diff --git a/src/base/QXmppError.cpp b/src/base/QXmppError.cpp index 80578c0d..eab4c749 100644 --- a/src/base/QXmppError.cpp +++ b/src/base/QXmppError.cpp @@ -31,6 +31,20 @@ /// should tell you which types are used. /// +/// +/// Constructs a QXmppError from an QIODevice +/// +/// It tries to cast the IO device to different known IO devices to get a useful more specific +/// error, i.e. it returns a QXmppError with QFileDevice::FileError for QFileDevices. +/// +QXmppError QXmppError::fromIoDevice(const QIODevice &device) +{ + if (const auto *file = dynamic_cast(&device)) { + return QXmppError { file->errorString(), file->error() }; + } + return QXmppError { device.errorString(), std::any() }; +} + /// /// Returns whether the error is a QNetworkReply::NetworkError. /// diff --git a/src/base/QXmppError.h b/src/base/QXmppError.h index a646b6e5..677ce415 100644 --- a/src/base/QXmppError.h +++ b/src/base/QXmppError.h @@ -10,11 +10,15 @@ #include #include +class QIODevice; + struct QXMPP_EXPORT QXmppError { QString description; std::any error; + static QXmppError fromIoDevice(const QIODevice &device); + bool isFileError() const; bool isNetworkError() const; bool isStanzaError() const; -- cgit v1.2.3