cutelyst 4.0.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
renderview.cpp
1/*
2 * SPDX-FileCopyrightText: (C) 2014-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#include "application.h"
6#include "componentfactory.h"
7#include "context.h"
8#include "renderview_p.h"
9#include "response.h"
10#include "view.h"
11
12#include <QtCore/QLoggingCategory>
13
14Q_LOGGING_CATEGORY(CUTELYST_RENDERVIEW, "cutelyst.renderview", QtWarningMsg)
15
16using namespace Cutelyst;
17
50RenderView::RenderView(QObject *parent)
51 : Action(new RenderViewPrivate, parent)
52{
53 setObjectName(QString::fromLatin1(metaObject()->className()) + u"->execute");
54}
55
56bool RenderView::init(Cutelyst::Application *application, const QVariantHash &args)
57{
58 Q_D(RenderView);
59
60 const auto attributes = args.value(u"attributes"_qs).value<ParamsMultiMap>();
61 d->view = application->view(attributes.value(u"View"_qs));
62
63 return Action::init(application, args);
64}
65
67{
68 Q_D(const RenderView);
69
70 if (!Action::doExecute(c)) {
71 return false;
72 }
73
74 Response *res = c->res();
75 if (res->contentType().isEmpty()) {
76 res->setContentType("text/html; charset=utf-8"_qba);
77 }
78
79 if (c->req()->isHead()) {
80 return true;
81 }
82
83 if (res->hasBody()) {
84 return true;
85 }
86
87 quint16 status = res->status();
88 if (status == 204 || (status >= 300 && status < 400)) {
89 return true;
90 }
91
92 View *view = c->customView();
93 if (view) {
94 // Fist check if the user set a view
95 return c->forward(view);
96 } else if (d->view) {
97 // Then try to use the action View attribute
98 return c->forward(d->view);
99 }
100
101 qCCritical(CUTELYST_RENDERVIEW) << "Could not find a view to render.";
102 res->setStatus(500);
103 return false;
104}
105
106#include "moc_renderview.cpp"
This class represents a Cutelyst Action.
Definition: action.h:35
bool doExecute(Context *c) override
Definition: action.cpp:136
QString className() const noexcept
Definition: action.cpp:86
ParamsMultiMap attributes() const noexcept
Definition: action.cpp:68
The Cutelyst Application.
Definition: application.h:43
View * view(QStringView name={}) const
virtual bool init(Application *application, const QVariantHash &args)
Definition: component.cpp:57
The Cutelyst Context.
Definition: context.h:38
bool forward(Component *component)
Definition: context.cpp:386
Response * res() const noexcept
Definition: context.cpp:102
View * customView() const noexcept
Definition: context.cpp:162
Sensible default end action.
Definition: renderview.h:16
bool doExecute(Cutelyst::Context *c) override
Definition: renderview.cpp:66
RenderView(QObject *parent=nullptr)
Definition: renderview.cpp:50
bool init(Application *application, const QVariantHash &args) override
Definition: renderview.cpp:56
bool isHead() const noexcept
Definition: request.cpp:331
void setContentType(const QByteArray &type)
Definition: response.h:203
bool hasBody() const noexcept
Definition: response.cpp:78
void setStatus(quint16 status) noexcept
Definition: response.cpp:72
quint16 status() const noexcept
Definition: response.cpp:66
QByteArray contentType() const
Definition: response.cpp:173
Cutelyst View abstract view component
Definition: view.h:21
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:8
QMultiMap< QString, QString > ParamsMultiMap