cutelyst 3.9.1
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
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 QString acceptEncoding = c->req()->header(QStringLiteral("ACCEPT_ENCODING"));
52 if (d->minimalSizeToDeflate >= 0 && output.count() > d->minimalSizeToDeflate &&
53 acceptEncoding.contains(QLatin1String("deflate"), Qt::CaseInsensitive)) {
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(QStringLiteral("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"
Component(QObject *parent=nullptr)
Definition component.cpp:11
QString name() const
Definition component.cpp:33
void setName(const QString &name)
Definition component.cpp:39
The Cutelyst Context.
Definition context.h:39
QStringList errors() const noexcept
Returns a list of errors that were defined.
Definition context.cpp:66
bool error() const noexcept
Returns true if an error was set.
Definition context.cpp:49
Response * response() const noexcept
Definition context.cpp:96
void setContentEncoding(const QString &encoding)
Definition headers.cpp:53
QString header(const QString &key) const
Definition request.h:581
Headers & headers() noexcept
Definition response.cpp:339
bool hasBody() const noexcept
Definition response.cpp:76
void setBody(QIODevice *body)
Definition response.cpp:100
Cutelyst View abstract view component
Definition view.h:22
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
virtual Modifiers modifiers() const override
Definition view.cpp:30
The Cutelyst namespace holds all public Cutelyst API.
Definition Mainpage.dox:8
void chop(int n)
int count(char ch) const const
QByteArray & remove(int pos, int len)
QObject(QObject *parent)
QObject * parent() const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
CaseInsensitive