diff options
| author | Tannin <devnull@localhost> | 2013-09-15 15:20:00 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2013-09-15 15:20:00 +0200 |
| commit | 98e5e57a845541acddf519a81957261f58008cb9 (patch) | |
| tree | ce3c8f9c5b7c4b48e46b5d825f49a752ad62d10d /src/persistentcookiejar.cpp | |
| parent | dce78b62b839c17f41a0fcd2890ffc0005be7a3b (diff) | |
- 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
Diffstat (limited to 'src/persistentcookiejar.cpp')
| -rw-r--r-- | src/persistentcookiejar.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
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 <QTemporaryFile>
+
+
+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<QNetworkCookie> cookies = allCookies();
+ data << static_cast<quint32>(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<QNetworkCookie> 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);
+}
|
