5 #include "sessionstorefile.h" 7 #include <Cutelyst/Context> 8 #include <Cutelyst/Application> 13 #include <QDataStream> 14 #include <QLoggingCategory> 15 #include <QCoreApplication> 19 Q_LOGGING_CATEGORY(C_SESSION_FILE,
"cutelyst.plugin.sessionfile", QtWarningMsg)
21 #define SESSION_STORE_FILE_SAVE QStringLiteral("_c_session_store_file_save") 22 #define SESSION_STORE_FILE_DATA QStringLiteral("_c_session_store_file_data") 24 static QVariantHash loadSessionData(
Context *c,
const QString &sid);
31 SessionStoreFile::~SessionStoreFile()
37 const QVariantHash data = loadSessionData(c, sid);
39 return data.value(key, defaultValue);
44 QVariantHash data = loadSessionData(c, sid);
46 data.insert(key, value);
47 c->
setStash(SESSION_STORE_FILE_DATA, data);
48 c->
setStash(SESSION_STORE_FILE_SAVE,
true);
55 QVariantHash data = loadSessionData(c, sid);
58 c->
setStash(SESSION_STORE_FILE_DATA, data);
59 c->
setStash(SESSION_STORE_FILE_SAVE,
true);
86 const QVariant sessionVariant = c->
stash(SESSION_STORE_FILE_DATA);
87 if (!sessionVariant.
isNull()) {
88 data = sessionVariant.
toHash();
92 const QString root = rootPath();
95 if (!file->open(QIODevice::ReadWrite)) {
97 qCWarning(C_SESSION_FILE) <<
"Failed to create path for session object" << root;
101 if (!file->open(QIODevice::ReadWrite)) {
108 if (!c->stash(SESSION_STORE_FILE_SAVE).toBool()) {
112 const QVariantHash data = c->
stash(SESSION_STORE_FILE_DATA).toHash();
114 if (data.isEmpty()) {
127 if (file->pos() < file->size()) {
128 file->resize(file->pos());
145 c->setStash(SESSION_STORE_FILE_DATA, data);
150 #include "moc_sessionstorefile.cpp" QHash< QString, QVariant > toHash() const const
void setStash(const QString &key, const QVariant &value)
SessionStoreFile(QObject *parent=nullptr)
bool isNull() const const
void stash(const QVariantHash &unite)
The Cutelyst namespace holds all public Cutelyst API.
Application * app() const noexcept
virtual QVariant getSessionData(Context *c, const QString &sid, const QString &key, const QVariant &defaultValue) final
void afterDispatch(Cutelyst::Context *c)
virtual bool storeSessionData(Context *c, const QString &sid, const QString &key, const QVariant &value) final
virtual bool deleteExpiredSessions(Context *c, quint64 expires) final
virtual bool deleteSessionData(Context *c, const QString &sid, const QString &key) final
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool mkpath(const QString &dirPath) const const
QString applicationName()