summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nexusinterface.cpp7
-rw-r--r--src/nexusinterface.h5
-rw-r--r--src/nxmaccessmanager.cpp9
-rw-r--r--src/nxmaccessmanager.h2
-rw-r--r--src/persistentcookiejar.cpp6
-rw-r--r--src/persistentcookiejar.h6
-rw-r--r--src/settingsdialog.cpp7
-rw-r--r--src/settingsdialog.h3
-rw-r--r--src/settingsdialog.ui31
9 files changed, 76 insertions, 0 deletions
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index f5baa6ab..2c690aa4 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -27,6 +27,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <util.h>
#include <QApplication>
+#include <QNetworkCookieJar>
#include <regex>
@@ -409,6 +410,12 @@ void NexusInterface::cleanup()
m_DiskCache = nullptr;
}
+void NexusInterface::clearCache()
+{
+ m_DiskCache->clear();
+ m_AccessManager->clearCookies();
+}
+
void NexusInterface::nextRequest()
{
if ((m_ActiveRequest.size() >= MAX_ACTIVE_DOWNLOADS)
diff --git a/src/nexusinterface.h b/src/nexusinterface.h
index c9a81134..9e7f3642 100644
--- a/src/nexusinterface.h
+++ b/src/nexusinterface.h
@@ -143,6 +143,11 @@ public:
void cleanup();
/**
+ * @brief clear webcache and cookies associated with this access manager
+ */
+ void clearCache();
+
+ /**
* @brief request description for a mod
*
* @param modID id of the mod caller is interested in (assumed to be for the current game)
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index a7dd6eef..a0b9c01f 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -110,6 +110,15 @@ void NXMAccessManager::showCookies() const
}
}
+void NXMAccessManager::clearCookies()
+{
+ PersistentCookieJar *jar = qobject_cast<PersistentCookieJar*>(cookieJar());
+ if (jar != nullptr) {
+ jar->clear();
+ } else {
+ qWarning("failed to clear cookies, invalid cookie jar");
+ }
+}
void NXMAccessManager::startLoginCheck()
{
diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h
index 82bd2bd5..c58c4cc3 100644
--- a/src/nxmaccessmanager.h
+++ b/src/nxmaccessmanager.h
@@ -52,6 +52,8 @@ public:
void showCookies() const;
+ void clearCookies();
+
QString userAgent(const QString &subModule = QString()) const;
void startLoginCheck();
diff --git a/src/persistentcookiejar.cpp b/src/persistentcookiejar.cpp
index 44537491..a6eb78fa 100644
--- a/src/persistentcookiejar.cpp
+++ b/src/persistentcookiejar.cpp
@@ -15,6 +15,12 @@ PersistentCookieJar::~PersistentCookieJar() {
save();
}
+void PersistentCookieJar::clear() {
+ for (const QNetworkCookie &cookie : allCookies()) {
+ deleteCookie(cookie);
+ }
+}
+
void PersistentCookieJar::save() {
QTemporaryFile file;
if (!file.open()) {
diff --git a/src/persistentcookiejar.h b/src/persistentcookiejar.h
index 812b785c..0ff747ee 100644
--- a/src/persistentcookiejar.h
+++ b/src/persistentcookiejar.h
@@ -5,9 +5,15 @@
class PersistentCookieJar : public QNetworkCookieJar {
+
+ Q_OBJECT
+
public:
PersistentCookieJar(const QString &fileName, QObject *parent = 0);
virtual ~PersistentCookieJar();
+
+ void clear();
+
private:
void save();
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index e528f478..c66cc243 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -26,6 +26,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "iplugingame.h"
#include "settings.h"
#include "instancemanager.h"
+#include "nexusinterface.h"
#include <QDirIterator>
#include <QFileDialog>
@@ -227,3 +228,9 @@ void SettingsDialog::on_changeInstanceButton_clicked()
qApp->exit(INT_MAX);
}
}
+
+void SettingsDialog::on_clearCacheButton_clicked()
+{
+ QDir(Settings::instance().getCacheDirectory()).removeRecursively();
+ NexusInterface::instance()->clearCache();
+}
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index d266488d..1ae21015 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -53,6 +53,9 @@ signals:
void resetDialogs();
private slots:
+ void on_clearCacheButton_clicked();
+
+private slots:
void on_browseBaseDirBtn_clicked();
private slots:
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index 808d8296..2a4b5589 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -461,6 +461,37 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <widget class="QPushButton" name="clearCacheButton">
+ <property name="toolTip">
+ <string>Remove cache and cookies. Forces a new login.</string>
+ </property>
+ <property name="text">
+ <string>Clear Cache</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/edit_clear</normaloff>:/MO/gui/edit_clear</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>