cutelyst 4.3.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
view.cpp
1/*
2 * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#include "view.h"
6
7#include "common.h"
8#include "view_p.h"
9
10#include <Cutelyst/Context>
11#include <Cutelyst/Response>
12
13#include <QtCore/QLoggingCategory>
14#include <QtCore/QVariant>
15
16using namespace Cutelyst;
17
18View::View(QObject *parent, const QString &name)
19 : Component(new ViewPrivate, parent)
20{
22}
23
24View::View(ViewPrivate *d, QObject *parent, const QString &name)
25 : Component(d, parent)
26{
28}
29
30Component::Modifiers View::modifiers() const
31{
32 return Component::OnlyExecute;
33}
34
35bool View::doExecute(Context *c)
36{
37 Q_D(const View);
38 Response *response = c->response();
39 if (response->hasBody()) {
40 // Ignore if we already have a body
41 return true;
42 }
43
44 const QByteArray output = render(c);
45 if (Q_UNLIKELY(c->error())) {
46 const auto errors = c->errors();
47 for (const QString &error : errors) {
48 qCCritical(CUTELYST_VIEW) << error;
49 }
50 }
51 const QByteArray acceptEncoding = c->req()->header("Accept-Encoding");
52 if (d->minimalSizeToDeflate >= 0 && output.count() > d->minimalSizeToDeflate &&
53 acceptEncoding.toLower().contains("deflate")) {
54 QByteArray compressedData = qCompress(output); // Use zlib's default compression
55 compressedData.remove(0, 6); // Remove qCompress and zlib headers
56 compressedData.chop(4); // Remove zlib tailer
57 response->headers().setContentEncoding("deflate");
58 response->setBody(compressedData);
59 } else {
60 response->setBody(output);
61 }
62 return !c->error();
63}
64
66{
67 Q_D(View);
68 d->minimalSizeToDeflate = minSize;
69}
70#include "moc_view.cpp"
The Cutelyst Component base class.
Definition component.h:30
QString name() const noexcept
Definition component.cpp:33
void setName(const QString &name)
Definition component.cpp:39
The Cutelyst Context.
Definition context.h:42
QStringList errors() const noexcept
Definition context.cpp:67
Request * req
Definition context.h:66
bool error() const noexcept
Definition context.cpp:50
Response * response() const noexcept
Definition context.cpp:97
void setContentEncoding(const QByteArray &encoding)
Definition headers.cpp:62
QByteArray header(QByteArrayView key) const noexcept
Definition request.h:611
A Cutelyst response.
Definition response.h:29
bool hasBody() const noexcept
Definition response.cpp:78
void setBody(QIODevice *body)
Definition response.cpp:103
Headers & headers() noexcept
Abstract View component for Cutelyst.
Definition view.h:25
virtual QByteArray render(Context *c) const =0
View(QObject *parent, const QString &name)
Definition view.cpp:18
void setMinimalSizeToDeflate(qint32 minSize=-1)
Definition view.cpp:65
Modifiers modifiers() const override
Definition view.cpp:30
The Cutelyst namespace holds all public Cutelyst API.
qsizetype count() const const
void chop(qsizetype n)
bool contains(QByteArrayView bv) const const
QByteArray & remove(qsizetype pos, qsizetype len)
QByteArray toLower() const const