Skip to content

Commit

Permalink
Support sending custom status codes via WebAPI
Browse files Browse the repository at this point in the history
Signed-off-by: Thomas Piccirello <thomas@piccirello.com>
  • Loading branch information
Piccirello committed Nov 21, 2024
1 parent 7f901a8 commit 9183b57
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/webui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ add_library(qbt_webui STATIC
# headers
api/apicontroller.h
api/apierror.h
api/apistatus.h
api/appcontroller.h
api/authcontroller.h
api/isessionmanager.h
Expand Down
6 changes: 6 additions & 0 deletions src/webui/api/apicontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ void APIResult::clear()
data.clear();
mimeType.clear();
filename.clear();
status = APIStatus::Ok;
}

APIController::APIController(IApplication *app, QObject *parent)
Expand Down Expand Up @@ -105,3 +106,8 @@ void APIController::setResult(const QByteArray &result, const QString &mimeType,
m_result.mimeType = mimeType;
m_result.filename = filename;
}

void APIController::setStatus(const APIStatus status)
{
m_result.status = status;
}
4 changes: 4 additions & 0 deletions src/webui/api/apicontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <QVariant>

#include "base/applicationcomponent.h"
#include "apistatus.h"

using DataMap = QHash<QString, QByteArray>;
using StringMap = QHash<QString, QString>;
Expand All @@ -43,6 +44,7 @@ struct APIResult
QVariant data;
QString mimeType;
QString filename;
APIStatus status = APIStatus::Ok;

void clear();
};
Expand All @@ -67,6 +69,8 @@ class APIController : public ApplicationComponent<QObject>
void setResult(const QJsonObject &result);
void setResult(const QByteArray &result, const QString &mimeType = {}, const QString &filename = {});

void setStatus(APIStatus status);

private:
StringMap m_params;
DataMap m_data;
Expand Down
35 changes: 35 additions & 0 deletions src/webui/api/apistatus.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2024 Thomas Piccirello <thomas@piccirello.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/

#pragma once

enum class APIStatus
{
Ok,
Async
};
11 changes: 11 additions & 0 deletions src/webui/webapplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,17 @@ void WebApplication::doProcessRequest()
print(result.data.toString(), Http::CONTENT_TYPE_TXT);
break;
}

switch (result.status)
{
case APIStatus::Async:
status(202);
break;
case APIStatus::Ok:
default:
status(200);
break;
}
}
catch (const APIError &error)
{
Expand Down

0 comments on commit 9183b57

Please sign in to comment.