cutelyst  3.9.1
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 
14 Q_LOGGING_CATEGORY(CUTELYST_RENDERVIEW, "cutelyst.renderview", QtWarningMsg)
15 
16 using namespace Cutelyst;
17 
51  : Action(new RenderViewPrivate, parent)
52 {
54 }
55 
56 bool RenderView::init(Cutelyst::Application *application, const QVariantHash &args)
57 {
58  Q_D(RenderView);
59 
60  const auto attributes = args.value(QLatin1String("attributes")).value<ParamsMultiMap>();
61  qDebug() << "render view" << attributes;
62  d->view = application->view(attributes.value(QLatin1String("View")));
63 
64  return Action::init(application, args);
65 }
66 
68 {
69  Q_D(const RenderView);
70 
71  if (!Action::doExecute(c)) {
72  return false;
73  }
74 
75  Response *res = c->res();
76  if (res->contentType().isEmpty()) {
77  res->setContentType(QStringLiteral("text/html; charset=utf-8"));
78  }
79 
80  if (c->req()->isHead()) {
81  return true;
82  }
83 
84  if (res->hasBody()) {
85  return true;
86  }
87 
88  quint16 status = res->status();
89  if (status == 204 || (status >= 300 && status < 400)) {
90  return true;
91  }
92 
93  View *view = c->customView();
94  if (view) {
95  // Fist check if the user set a view
96  return c->forward(view);
97  } else if (d->view) {
98  // Then try to use the action View attribute
99  return c->forward(d->view);
100  }
101 
102  qCCritical(CUTELYST_RENDERVIEW) << "Could not find a view to render.";
103  res->setStatus(500);
104  return false;
105 }
106 
107 #include "moc_renderview.cpp"
ParamsMultiMap attributes() const noexcept
Definition: action.cpp:68
void setContentType(const QString &type)
Definition: response.h:220
virtual bool doExecute(Context *c) override
Definition: action.cpp:136
Response * res() const noexcept
Definition: context.cpp:102
View * view(const QString &name) const
virtual const QMetaObject * metaObject() const const
Sensible default end action.
Definition: renderview.h:15
This class represents a Cutelyst Action.
Definition: action.h:34
The Cutelyst Context.
Definition: context.h:38
bool hasBody() const noexcept
Definition: response.cpp:76
bool forward(Component *component)
Definition: context.cpp:399
bool isEmpty() const const
void setObjectName(QAnyStringView name)
virtual bool init(Application *application, const QVariantHash &args)
Definition: component.cpp:57
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
quint16 status() const noexcept
Definition: response.cpp:64
virtual bool doExecute(Cutelyst::Context *c) override
Definition: renderview.cpp:67
QString contentType() const
Definition: response.cpp:192
QString fromLatin1(QByteArrayView str)
Cutelyst View abstract view component
Definition: view.h:21
The Cutelyst Application.
Definition: application.h:42
virtual bool init(Application *application, const QVariantHash &args) override
Definition: renderview.cpp:56
bool isHead() const noexcept
Definition: request.cpp:334
void setStatus(quint16 status) noexcept
Definition: response.cpp:70
View * customView() const noexcept
Definition: context.cpp:162
RenderView(QObject *parent=nullptr)
Definition: renderview.cpp:50
T value(const Key &key, const T &defaultValue) const const
QString className() const
Definition: action.cpp:86