Changed exceptions to std bases
This commit is contained in:
@@ -19,36 +19,197 @@
|
||||
#ifndef EXCEPTIONS_H
|
||||
#define EXCEPTIONS_H
|
||||
#include <QString>
|
||||
#include <exception>
|
||||
#include <string>
|
||||
#include <filesystem>
|
||||
#include "komplex_global.h"
|
||||
|
||||
struct KOMPLEX_EXPORT Exception : std::exception
|
||||
struct KOMPLEX_EXPORT network_exception : std::ios_base::failure
|
||||
{
|
||||
explicit Exception(const QString &message, quint16 errorCode = 0)
|
||||
: std::exception(), message(message), errorCode(errorCode){}
|
||||
network_exception(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
const QString message;
|
||||
const quint16 errorCode;
|
||||
network_exception(const std::string &message, const std::error_code &code) :
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
network_exception(const QString &message, const QString &details, const std::error_code &code) :
|
||||
details(details.toStdString()),
|
||||
std::ios_base::failure(message.toStdString(), code) { }
|
||||
|
||||
network_exception(const QString &message, const int code = errno) :
|
||||
std::ios_base::failure
|
||||
(
|
||||
message.toStdString(),
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
const std::string details;
|
||||
};
|
||||
|
||||
struct KOMPLEX_EXPORT NetworkException : Exception
|
||||
struct KOMPLEX_EXPORT file_exception : std::filesystem::filesystem_error
|
||||
{
|
||||
NetworkException(const QString &message, qsizetype errorCode = 0) : Exception(message, errorCode) {}
|
||||
file_exception(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
std::filesystem::filesystem_error(message, code) { }
|
||||
|
||||
file_exception(const std::string &message, const std::error_code &code) :
|
||||
std::filesystem::filesystem_error(message, code) { }
|
||||
|
||||
file_exception(const std::string &message, const int code = errno) :
|
||||
std::filesystem::filesystem_error
|
||||
(
|
||||
message,
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
file_exception(const std::string &message, const std::string &details, const int code = errno) :
|
||||
details(details),
|
||||
std::filesystem::filesystem_error
|
||||
(
|
||||
message,
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
const std::string details;
|
||||
};
|
||||
struct KOMPLEX_EXPORT FileException : Exception
|
||||
|
||||
struct KOMPLEX_EXPORT sql_exception : std::ios_base::failure
|
||||
{
|
||||
FileException(const QString &message, qsizetype errorCode = 0) : Exception(message, errorCode) {}
|
||||
sql_exception(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
sql_exception(const std::string &message, const std::error_code &code) :
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
sql_exception(const std::string &message, const int code = errno) :
|
||||
std::ios_base::failure
|
||||
(
|
||||
message,
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
const std::string details;
|
||||
};
|
||||
struct KOMPLEX_EXPORT SqlException : Exception
|
||||
|
||||
struct KOMPLEX_EXPORT wallet_exception : std::ios_base::failure
|
||||
{
|
||||
SqlException(const QString &message, qsizetype errorCode = 0) : Exception(message, errorCode) {}
|
||||
wallet_exception(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
wallet_exception(const std::string &message, const std::error_code &code) :
|
||||
std::ios_base::failure(message, code) { }
|
||||
|
||||
wallet_exception(const std::string &message, const std::string &details, const int code = errno) :
|
||||
details(details),
|
||||
std::ios_base::failure
|
||||
(
|
||||
message,
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
wallet_exception(const std::string &message, const int code = errno) :
|
||||
std::ios_base::failure
|
||||
(
|
||||
message,
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
) { }
|
||||
|
||||
const std::string details;
|
||||
};
|
||||
struct KOMPLEX_EXPORT WalletException : Exception
|
||||
|
||||
struct KOMPLEX_EXPORT process_exception : std::runtime_error
|
||||
{
|
||||
WalletException(const QString &message, qsizetype errorCode = 0) : Exception(message, errorCode) {}
|
||||
process_exception(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
code(code),
|
||||
std::runtime_error(message) { }
|
||||
|
||||
process_exception(const std::string &message, const std::error_code &code) :
|
||||
code(code),
|
||||
std::runtime_error(message) { }
|
||||
|
||||
process_exception(const std::string &message, const int code = errno) :
|
||||
code
|
||||
(
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
),
|
||||
std::runtime_error
|
||||
(
|
||||
message
|
||||
) { }
|
||||
|
||||
process_exception(const std::string &message, const std::string &details, const int code = errno) :
|
||||
details(details),
|
||||
code
|
||||
(
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
),
|
||||
std::runtime_error (message) { }
|
||||
|
||||
const std::string details;
|
||||
const std::error_code code;
|
||||
};
|
||||
struct KOMPLEX_EXPORT ShaderCompilerException : Exception
|
||||
|
||||
namespace shader
|
||||
{
|
||||
ShaderCompilerException(const QString &message, qsizetype errorCode = 0) : Exception(message, errorCode) {}
|
||||
};
|
||||
struct KOMPLEX_EXPORT logic_error : std::logic_error
|
||||
{
|
||||
logic_error(const std::string &message, const std::string &details, const std::error_code &code) :
|
||||
details(details),
|
||||
code(code),
|
||||
std::logic_error(message) { }
|
||||
|
||||
logic_error(const std::string &message, const std::error_code &code) :
|
||||
code(code),
|
||||
std::logic_error(message) { }
|
||||
|
||||
logic_error(const std::string &message, const std::string &details = {}, const int code = errno) :
|
||||
code
|
||||
(
|
||||
std::error_code
|
||||
(
|
||||
code,
|
||||
std::system_category()
|
||||
)
|
||||
),
|
||||
std::logic_error(message) { }
|
||||
|
||||
const std::string details;
|
||||
const std::error_code code;
|
||||
};
|
||||
}
|
||||
#endif // EXCEPTIONS_H
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "qwallet.h"
|
||||
#include "../3rdparty/qtkeychain/qtkeychain/keychain.h"
|
||||
#include "common/exceptions.h"
|
||||
|
||||
auto QWallet::read(const QString &service, const QString &key) const -> QFuture<QByteArray>
|
||||
{
|
||||
@@ -29,7 +30,11 @@ auto QWallet::read(const QString &service, const QString &key) const -> QFuture<
|
||||
else
|
||||
{
|
||||
m_errorString = qPrintable(j->errorString());
|
||||
throw std::exception();
|
||||
throw wallet_exception
|
||||
(
|
||||
QStringLiteral("Wallet read error").toStdString(),
|
||||
errorString().toStdString()
|
||||
);
|
||||
}
|
||||
|
||||
loop.quit();
|
||||
@@ -65,11 +70,15 @@ auto QWallet::write(const QString &service, const QString &key, const QByteArray
|
||||
this,
|
||||
[this, key, &loop, &success](QKeychain::Job *job)
|
||||
{
|
||||
auto j = static_cast<QKeychain::ReadPasswordJob*>(job);
|
||||
auto j = static_cast<QKeychain::WritePasswordJob*>(job);
|
||||
if (j->error() != QKeychain::NoError)
|
||||
{
|
||||
setErrorString(qPrintable(j->errorString()));
|
||||
throw std::exception();
|
||||
throw wallet_exception
|
||||
(
|
||||
QStringLiteral("Wallet write error").toStdString(),
|
||||
errorString().toStdString()
|
||||
);
|
||||
}
|
||||
|
||||
loop.quit();
|
||||
@@ -102,7 +111,7 @@ auto QWallet::remove(const QString &service, const QString &key) -> QFuture<void
|
||||
this,
|
||||
[this, key, &loop, &value](QKeychain::Job *job)
|
||||
{
|
||||
auto j = static_cast<QKeychain::ReadPasswordJob*>(job);
|
||||
auto j = static_cast<QKeychain::DeletePasswordJob*>(job);
|
||||
if (j->error() != QKeychain::NoError)
|
||||
{
|
||||
m_errorString = qPrintable(j->errorString());
|
||||
|
||||
@@ -130,7 +130,7 @@ auto DownloadManager::downloadImage(const QString &author, const QString &author
|
||||
|
||||
if(!packDirectory.mkpath(packUri.toLocalFile()))
|
||||
{
|
||||
throw FileException(QStringLiteral("Could not create directory"));
|
||||
throw file_exception(QStringLiteral("Could not create directory").toStdString());
|
||||
}
|
||||
|
||||
packDirectory.mkdir(QStringLiteral("images"));
|
||||
@@ -148,7 +148,7 @@ auto DownloadManager::downloadImage(const QString &author, const QString &author
|
||||
if(!packFile.open(QFile::ReadWrite))
|
||||
{
|
||||
setError(QStringLiteral("File Error"), packFile.errorString());
|
||||
throw FileException(packFile.errorString());
|
||||
throw file_exception(packFile.errorString().toStdString());
|
||||
}
|
||||
|
||||
QByteArray data = metadata.json().toJson(QJsonDocument::Indented);
|
||||
@@ -156,7 +156,7 @@ auto DownloadManager::downloadImage(const QString &author, const QString &author
|
||||
if(packFile.write(data) != data.length())
|
||||
{
|
||||
setError(QStringLiteral("File Error"), packFile.errorString());
|
||||
throw FileException(packFile.errorString());
|
||||
throw file_exception(packFile.errorString().toStdString());
|
||||
}
|
||||
|
||||
packFile.close();
|
||||
@@ -239,6 +239,8 @@ auto DownloadManager::downloadVideo(const QString &author, const QString &author
|
||||
(
|
||||
[this, author, id](QUrl result) -> QUrl
|
||||
{
|
||||
setState(Installing);
|
||||
|
||||
ShaderPack metadata;
|
||||
metadata.setAuthor(author);
|
||||
metadata.setType(ShaderPack::Video);
|
||||
@@ -282,7 +284,7 @@ auto DownloadManager::downloadVideo(const QString &author, const QString &author
|
||||
if(!packFile.open(QFile::ReadWrite))
|
||||
{
|
||||
setError(QStringLiteral("File Error"), packFile.errorString());
|
||||
throw FileException(packFile.errorString());
|
||||
throw file_exception(packFile.errorString().toStdString());
|
||||
}
|
||||
|
||||
QByteArray data = metadata.json().toJson(QJsonDocument::Compact);
|
||||
@@ -290,7 +292,7 @@ auto DownloadManager::downloadVideo(const QString &author, const QString &author
|
||||
if(packFile.write(data) != data.length())
|
||||
{
|
||||
setError(QStringLiteral("File Error"), packFile.errorString());
|
||||
throw FileException(packFile.errorString());
|
||||
throw file_exception(packFile.errorString().toStdString());
|
||||
}
|
||||
|
||||
packFile.close();
|
||||
@@ -369,6 +371,7 @@ auto DownloadManager::downloadPack(const QString &id) -> void
|
||||
QNetworkRequest request(downloadUrl);
|
||||
request.setRawHeader(QByteArray("uuid"), id.toUtf8());
|
||||
QString tempFile(QString("%1.tar.gz").arg(id));
|
||||
setState(Downloading);
|
||||
|
||||
QFuture<QUrl> downloadUri = download(request, id, Post, tempFile);
|
||||
|
||||
@@ -377,7 +380,8 @@ auto DownloadManager::downloadPack(const QString &id) -> void
|
||||
(
|
||||
[this](QUrl result) -> QUrl
|
||||
{
|
||||
return m_compiler->process(result).result();
|
||||
setState(Compiling);
|
||||
return m_compiler->build(result);
|
||||
}
|
||||
)
|
||||
.then
|
||||
@@ -414,11 +418,11 @@ auto DownloadManager::downloadPack(const QString &id) -> void
|
||||
)
|
||||
.onFailed
|
||||
(
|
||||
[this, tempFile] (const std::logic_error &e)
|
||||
[this, tempFile] (const shader::logic_error &e)
|
||||
{
|
||||
QFile::remove(QStringLiteral("/tmp/") + tempFile);
|
||||
reset();
|
||||
setError(QStringLiteral("Logic Exception %1"), e.what());
|
||||
setError(e.what(), QString::fromStdString(e.details));
|
||||
}
|
||||
)
|
||||
.onFailed
|
||||
@@ -427,7 +431,7 @@ auto DownloadManager::downloadPack(const QString &id) -> void
|
||||
{
|
||||
QFile::remove(QStringLiteral("/tmp/") + tempFile);
|
||||
reset();
|
||||
setError(QStringLiteral("Logic Exception %1"), e.what());
|
||||
setError(QStringLiteral("Exception %1"), e.what());
|
||||
}
|
||||
)
|
||||
.onFailed
|
||||
@@ -554,13 +558,13 @@ auto DownloadManager::install(const QUrl &uri) noexcept(false) -> QUrl
|
||||
if(!m_moveProcess.waitForStarted(3000))
|
||||
{
|
||||
qWarning() << QStringLiteral("Could not start copy process: %1").arg(m_moveProcess.readAllStandardError());
|
||||
throw FileException(QStringLiteral("Could not start install process"));
|
||||
throw file_exception(QStringLiteral("Could not start install process").toStdString());
|
||||
}
|
||||
|
||||
if(!m_moveProcess.waitForFinished())
|
||||
{
|
||||
qWarning() << QStringLiteral("Copy process took longer than expected (>30s)");
|
||||
throw FileException(QStringLiteral("Install process took longer than expected (>30s)"));
|
||||
throw file_exception(QStringLiteral("Install process took longer than expected (>30s)").toStdString());
|
||||
}
|
||||
|
||||
return installLocation;
|
||||
@@ -594,7 +598,7 @@ auto DownloadManager::download(const QNetworkRequest &request, const QString &id
|
||||
|
||||
if(manager == nullptr)
|
||||
{
|
||||
throw NetworkException
|
||||
throw network_exception
|
||||
{
|
||||
QStringLiteral("Network Manager reference has already been deleted")
|
||||
};
|
||||
@@ -604,7 +608,7 @@ auto DownloadManager::download(const QNetworkRequest &request, const QString &id
|
||||
|
||||
if(downloadFile.exists() && !downloadFile.remove())
|
||||
{
|
||||
throw FileException(downloadFile.errorString());
|
||||
throw file_exception(downloadFile.errorString().toStdString());
|
||||
}
|
||||
|
||||
QNetworkReply *reply = nullptr;
|
||||
@@ -629,7 +633,7 @@ auto DownloadManager::download(const QNetworkRequest &request, const QString &id
|
||||
{
|
||||
loop.quit();
|
||||
|
||||
throw NetworkException
|
||||
throw network_exception
|
||||
(
|
||||
QStringLiteral("Network Error %1").arg
|
||||
(
|
||||
@@ -664,7 +668,7 @@ auto DownloadManager::download(const QNetworkRequest &request, const QString &id
|
||||
|
||||
if(!downloadFile.open(QFile::ReadWrite | QFile::Append))
|
||||
{
|
||||
throw FileException(QStringLiteral("Could not open temp file location"));
|
||||
throw file_exception(QStringLiteral("Could not open temp file location").toStdString());
|
||||
}
|
||||
|
||||
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
|
||||
|
||||
Reference in New Issue
Block a user