Skip to content

Commit

Permalink
Added functionality for handling errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
ugnelis committed May 22, 2018
1 parent b22f041 commit 554667c
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Expand Up @@ -39,6 +39,7 @@ set(SOURCE_FILES
apis/api.h
apis/googleapi.cpp
apis/googleapi.h
exceptions/invalidargumentexception.h
utils/language.cpp
utils/language.h
utils/requestmanager.cpp
Expand Down
14 changes: 12 additions & 2 deletions src/apis/googleapi.cpp
Expand Up @@ -38,7 +38,7 @@ QString GoogleAPI::translate(const QString &input,

QNetworkAccessManager *manager = new QNetworkAccessManager();

RequestManager requestManager(nullptr, std::move(manager));
RequestManager requestManager(nullptr, manager);
requestManager.postRequest(request, postJsonDocument.toJson());

// Parse the replay.
Expand All @@ -47,6 +47,11 @@ QString GoogleAPI::translate(const QString &input,
QJsonDocument replyJsonDocument = QJsonDocument::fromJson(replyByteArray.data());
QJsonObject replyJsonObject = replyJsonDocument.object();

// If error.
if (replyJsonObject.contains("error")) {
throw InvalidArgumentException();
}

QJsonArray translationsJsonArray = replyJsonObject["data"]
.toObject()["translations"]
.toArray();
Expand Down Expand Up @@ -74,7 +79,7 @@ QStringList GoogleAPI::getSupportedLanguages() const {

QNetworkAccessManager *manager = new QNetworkAccessManager();

RequestManager requestManager(nullptr, std::move(manager));
RequestManager requestManager(nullptr, manager);
requestManager.getRequest(request);

// Parse the replay.
Expand All @@ -83,6 +88,11 @@ QStringList GoogleAPI::getSupportedLanguages() const {
QJsonDocument replyJsonDocument = QJsonDocument::fromJson(replyByteArray.data());
QJsonObject replyJsonObject = replyJsonDocument.object();

// If error.
if (replyJsonObject.contains("error")) {
throw InvalidArgumentException();
}

QJsonArray languagesJsonArray = replyJsonObject["data"]
.toObject()["languages"]
.toArray();
Expand Down
1 change: 1 addition & 0 deletions src/apis/googleapi.h
Expand Up @@ -7,6 +7,7 @@
#include <QJsonObject>
#include <QJsonArray>
#include "api.h"
#include "exceptions/invalidargumentexception.h"
#include "utils/requestmanager.h"

/**
Expand Down
16 changes: 16 additions & 0 deletions src/exceptions/invalidargumentexception.h
@@ -0,0 +1,16 @@
#ifndef INSTANT_TRANSLATOR_INVALIDARGUMENTEXCEPTION_H
#define INSTANT_TRANSLATOR_INVALIDARGUMENTEXCEPTION_H

#include <QException>

/**
* Invalid argument exception.
*/
class InvalidArgumentException : public QException {
public:
void raise() const { throw *this; }

InvalidArgumentException *clone() const { return new InvalidArgumentException(*this); }
};

#endif //INSTANT_TRANSLATOR_INVALIDARGUMENTEXCEPTION_H
25 changes: 23 additions & 2 deletions src/mainwindow.cpp
Expand Up @@ -125,22 +125,43 @@ QString MainWindow::runTranslation(API *api,
const QString &sourceLanguage,
const QString &targetLanguage) {
if (api == nullptr) {
showErrorBox("Text cannot be translated. API is not set.");
return QString();
}

QString outputString = api->translate(inputString, sourceLanguage, targetLanguage);
QString outputString;
try {
outputString = api->translate(inputString, sourceLanguage, targetLanguage);
} catch (const InvalidArgumentException &e) {
showErrorBox("Text cannot be translated. Invalid API key.");
}

return outputString;
}

QStringList MainWindow::runGetSupportedLanguages(API *api) {
if (api == nullptr) {
showErrorBox("Languages list cannot be received. API is not set.");
return QStringList();
}

QStringList supportedLanguages = api->getSupportedLanguages();
QStringList supportedLanguages;
try {
supportedLanguages = api->getSupportedLanguages();
} catch (const InvalidArgumentException &e) {
showErrorBox("Languages list cannot be received. Invalid API key.");
}

return supportedLanguages;
}

void MainWindow::showErrorBox(const QString &message) {
QMessageBox messageBox;
messageBox.setText(message);
messageBox.setIcon(QMessageBox::Warning);
messageBox.exec();
}

void MainWindow::on_exitAction_triggered() {
this->close();
}
Expand Down
7 changes: 7 additions & 0 deletions src/mainwindow.h
Expand Up @@ -7,6 +7,7 @@
#include <QFutureWatcher>
#include <QtConcurrent>
#include <QStringList>
#include <QMessageBox>
#include "apis/api.h"
#include "apis/googleapi.h"
#include "utils/language.h"
Expand Down Expand Up @@ -92,6 +93,12 @@ private slots:
*/
QStringList runGetSupportedLanguages(API *api);

/**
* Show error box.
* @param message Error message.
*/
void showErrorBox(const QString &message);

Ui::MainWindow *ui; // MainWindow user interface.
QClipboard *clipboard; // Clipboard information.
API *api; // Translation API.
Expand Down

0 comments on commit 554667c

Please sign in to comment.