From 98e5e57a845541acddf519a81957261f58008cb9 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 15 Sep 2013 15:20:00 +0200 Subject: - added support for mod page plugins - re-introduced the integrated browser - added a plugin to download from the tes alliance page - the download list now contains the file description - nexus interface now stores cookies persistently to reduce number of required log-ins --- src/persistentcookiejar.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/persistentcookiejar.cpp (limited to 'src/persistentcookiejar.cpp') diff --git a/src/persistentcookiejar.cpp b/src/persistentcookiejar.cpp new file mode 100644 index 00000000..7b9694a2 --- /dev/null +++ b/src/persistentcookiejar.cpp @@ -0,0 +1,64 @@ +#include "persistentcookiejar.h" +#include + + +PersistentCookieJar::PersistentCookieJar(const QString &fileName, QObject *parent) +: QNetworkCookieJar(parent), m_FileName(fileName) +{ + restore(); +} + +PersistentCookieJar::~PersistentCookieJar() { + qDebug("save %s", qPrintable(m_FileName)); + save(); +} + +void PersistentCookieJar::save() { + QTemporaryFile file; + if (!file.open()) { + qCritical("failed to save cookies: couldn't create temporary file"); + return; + } + QDataStream data(&file); + + QList cookies = allCookies(); + data << static_cast(cookies.size()); + + foreach (const QNetworkCookie &cookie, allCookies()) { + data << cookie.toRawForm(); + } + + { + QFile oldCookies(m_FileName); + if (oldCookies.exists()) { + if (!oldCookies.remove()) { + qCritical("failed to save cookies: failed to remove %s", qPrintable(m_FileName)); + return; + } + } // if it doesn't exists that's fine + } + + if (!file.copy(m_FileName)) { + qCritical("failed to save cookies: failed to write %s", qPrintable(m_FileName)); + } +} + +void PersistentCookieJar::restore() { + QFile file(m_FileName); + if (!file.open(QIODevice::ReadOnly)) { + // not necessarily a problem, the file may just not exist (yet) + return; + } + + QList allCookies; + + QDataStream data(&file); + quint32 count; + data >> count; + for (quint32 i = 0; i < count; ++i) { + QByteArray cookieRaw; + data >> cookieRaw; + allCookies.append(QNetworkCookie::parseCookies(cookieRaw)); + } + setAllCookies(allCookies); +} -- cgit v1.3.1