diff options
| -rw-r--r-- | src/nexusinterface.cpp | 7 | ||||
| -rw-r--r-- | src/nexusinterface.h | 5 | ||||
| -rw-r--r-- | src/nxmaccessmanager.cpp | 9 | ||||
| -rw-r--r-- | src/nxmaccessmanager.h | 2 | ||||
| -rw-r--r-- | src/persistentcookiejar.cpp | 6 | ||||
| -rw-r--r-- | src/persistentcookiejar.h | 6 | ||||
| -rw-r--r-- | src/settingsdialog.cpp | 7 | ||||
| -rw-r--r-- | src/settingsdialog.h | 3 | ||||
| -rw-r--r-- | src/settingsdialog.ui | 31 |
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>
|
