summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/categoriesdialog.cpp58
-rw-r--r--src/categoriesdialog.h12
-rw-r--r--src/categoriesdialog.ui29
-rw-r--r--src/filterlist.cpp7
-rw-r--r--src/filterlist.h4
-rw-r--r--src/mainwindow.cpp2
-rw-r--r--src/nexusinterface.cpp263
-rw-r--r--src/settingsdialog.cpp3
-rw-r--r--src/settingsdialoggeneral.cpp6
-rw-r--r--src/settingsdialoggeneral.h7
10 files changed, 197 insertions, 194 deletions
diff --git a/src/categoriesdialog.cpp b/src/categoriesdialog.cpp
index 03a7fc59..08397cb8 100644
--- a/src/categoriesdialog.cpp
+++ b/src/categoriesdialog.cpp
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "settings.h"
#include "ui_categoriesdialog.h"
#include "utility.h"
+#include "nexusinterface.h"
#include <QItemDelegate>
#include <QLineEdit>
#include <QMenu>
@@ -102,8 +103,8 @@ private:
QValidator* m_Validator;
};
-CategoriesDialog::CategoriesDialog(QWidget* parent)
- : TutorableDialog("Categories", parent), ui(new Ui::CategoriesDialog)
+CategoriesDialog::CategoriesDialog(PluginContainer* pluginContainer, QWidget* parent)
+ : TutorableDialog("Categories", parent), ui(new Ui::CategoriesDialog), m_PluginContainer(pluginContainer)
{
ui->setupUi(this);
fillTable();
@@ -172,6 +173,7 @@ void CategoriesDialog::fillTable()
{
CategoryFactory* categories = CategoryFactory::instance();
QTableWidget* table = ui->categoriesTable;
+ QListWidget* list = ui->nexusCategoryList;
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
@@ -180,23 +182,9 @@ void CategoriesDialog::fillTable()
table->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
table->verticalHeader()->setSectionsMovable(true);
table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
-#else
- table->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
- table->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);
- table->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
- table->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed);
- table->verticalHeader()->setMovable(true);
- table->verticalHeader()->setResizeMode(QHeaderView::Fixed);
-#endif
-
- table->setItemDelegateForColumn(
- 0, new ValidatingDelegate(this, new NewIDValidator(m_IDs)));
- table->setItemDelegateForColumn(
- 2, new ValidatingDelegate(this,
- new QRegularExpressionValidator(
- QRegularExpression("([0-9]+)?(,[0-9]+)*"), this)));
- table->setItemDelegateForColumn(
- 3, new ValidatingDelegate(this, new ExistingIDValidator(m_IDs)));
+ table->setItemDelegateForColumn(0, new ValidatingDelegate(this, new NewIDValidator(m_IDs)));
+ table->setItemDelegateForColumn(2, new ValidatingDelegate(this, new QRegExpValidator(QRegExp("([0-9]+)?(,[0-9]+)*"), this)));
+ table->setItemDelegateForColumn(3, new ValidatingDelegate(this, new ExistingIDValidator(m_IDs)));
int row = 0;
for (std::vector<CategoryFactory::Category>::const_iterator iter = categories->m_Categories.begin();
@@ -233,6 +221,14 @@ void CategoriesDialog::fillTable()
table->setItem(row, 3, parentIDItem.take());
}
+ for (auto nexusCat : categories->m_NexusMap)
+ {
+ QScopedPointer<QListWidgetItem> nexusItem(new QListWidgetItem());
+ nexusItem->setData(Qt::DisplayRole, nexusCat.first.m_Name);
+ nexusItem->setData(Qt::UserRole, nexusCat.first.m_ID);
+ list->addItem(nexusItem.take());
+ }
+
refreshIDs();
}
@@ -253,6 +249,30 @@ void CategoriesDialog::removeCategory_clicked()
ui->categoriesTable->removeRow(m_ContextRow);
}
+
+void CategoriesDialog::nexusRefresh_clicked()
+{
+ NexusInterface *nexus = NexusInterface::instance(m_PluginContainer);
+ nexus->requestGameInfo(Settings::instance().game().plugin()->gameShortName(), this, QVariant(), QString());
+}
+
+void CategoriesDialog::nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int)
+{
+ QVariantMap result = resultData.toMap();
+ QVariantList categories = result["categories"].toList().first().toList();
+ auto catFactory = CategoryFactory::instance();
+ QListWidget* list = ui->nexusCategoryList;
+ list->clear();
+ for (auto category : categories) {
+ auto catMap = category.toMap();
+ QScopedPointer<QListWidgetItem> nexusItem(new QListWidgetItem());
+ nexusItem->setData(Qt::DisplayRole, catMap["name"].toString());
+ nexusItem->setData(Qt::UserRole, catMap["category_id"].toInt());
+ list->addItem(nexusItem.take());
+ }
+}
+
+
void CategoriesDialog::on_categoriesTable_customContextMenuRequested(const QPoint& pos)
{
m_ContextRow = ui->categoriesTable->rowAt(pos.y());
diff --git a/src/categoriesdialog.h b/src/categoriesdialog.h
index c1c1c673..b6fe832f 100644
--- a/src/categoriesdialog.h
+++ b/src/categoriesdialog.h
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "tutorabledialog.h"
#include "categories.h"
+#include "plugincontainer.h"
#include <set>
namespace Ui
@@ -37,7 +38,7 @@ class CategoriesDialog : public MOBase::TutorableDialog
Q_OBJECT
public:
- explicit CategoriesDialog(QWidget* parent = 0);
+ explicit CategoriesDialog(PluginContainer* pluginContainer, QWidget* parent = 0);
~CategoriesDialog();
// also saves and restores geometry
@@ -50,11 +51,19 @@ public:
**/
void commitChanges();
+public slots:
+
+ void nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int);
+
+signals:
+ void refreshNexusCategories();
+
private slots:
void on_categoriesTable_customContextMenuRequested(const QPoint& pos);
void addCategory_clicked();
void removeCategory_clicked();
+ void nexusRefresh_clicked();
void cellChanged(int row, int column);
private:
@@ -63,6 +72,7 @@ private:
private:
Ui::CategoriesDialog* ui;
+ PluginContainer* m_PluginContainer;
int m_ContextRow;
int m_HighestID;
diff --git a/src/categoriesdialog.ui b/src/categoriesdialog.ui
index 03209d53..993de2ad 100644
--- a/src/categoriesdialog.ui
+++ b/src/categoriesdialog.ui
@@ -14,16 +14,6 @@
<string>Categories</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="1" column="2" colspan="4">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
<item row="0" column="3">
<widget class="QTableWidget" name="categoriesTable">
<property name="contextMenuPolicy">
@@ -123,6 +113,16 @@ p, li { white-space: pre-wrap; }
</column>
</widget>
</item>
+ <item row="4" column="3">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
<item row="0" column="5">
<widget class="QGroupBox" name="groupBox">
<property name="layoutDirection">
@@ -133,7 +133,7 @@ p, li { white-space: pre-wrap; }
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QListWidget" name="listWidget">
+ <widget class="QListWidget" name="nexusCategoryList">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -151,6 +151,13 @@ p, li { white-space: pre-wrap; }
</layout>
</widget>
</item>
+ <item row="4" column="5">
+ <widget class="QPushButton" name="nexusRefresh">
+ <property name="text">
+ <string>Refresh Nexus Categories</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<resources/>
diff --git a/src/filterlist.cpp b/src/filterlist.cpp
index 54853227..8ac4040c 100644
--- a/src/filterlist.cpp
+++ b/src/filterlist.cpp
@@ -2,6 +2,7 @@
#include "categories.h"
#include "categoriesdialog.h"
#include "organizercore.h"
+#include "plugincontainer.h"
#include "settings.h"
#include "ui_mainwindow.h"
#include <utility.h>
@@ -188,8 +189,8 @@ private:
};
-FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFactory* factory)
- : ui(ui), m_Organizer(organizer), m_factory(factory)
+FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, PluginContainer* pluginContainer, CategoryFactory* factory)
+ : ui(ui), m_Organizer(organizer), m_pluginContainer(pluginContainer, m_factory(factory)
{
auto* eventFilter = new CriteriaItemFilter(ui->filters, [&](auto* item, int dir) {
return cycleItem(item, dir);
@@ -425,7 +426,7 @@ void FilterList::checkCriteria()
void FilterList::editCategories()
{
- CategoriesDialog dialog(qApp->activeWindow());
+ CategoriesDialog dialog(m_pluginContainer, qApp->activeWindow());
if (dialog.exec() == QDialog::Accepted) {
dialog.commitChanges();
diff --git a/src/filterlist.h b/src/filterlist.h
index 7bcbdc0f..823a63c2 100644
--- a/src/filterlist.h
+++ b/src/filterlist.h
@@ -9,6 +9,7 @@ namespace Ui
class MainWindow;
};
class CategoryFactory;
+class PluginContainer;
class Settings;
class OrganizerCore;
@@ -17,7 +18,7 @@ class FilterList : public QObject
Q_OBJECT;
public:
- FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFactory* factory);
+ FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, PluginContainer* pluginContainer, CategoryFactory* factory);
void restoreState(const Settings& s);
void saveState(Settings& s) const;
@@ -37,6 +38,7 @@ private:
Ui::MainWindow* ui;
OrganizerCore* m_Organizer;
CategoryFactory* m_factory;
+ PluginContainer* m_pluginContainer;
bool onClick(QMouseEvent* e);
void onItemActivated(QTreeWidgetItem* item);
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index e9106caa..2b653059 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -293,7 +293,7 @@ MainWindow::MainWindow(Settings& settings, OrganizerCore& organizerCore,
languageChange(settings.interface().language());
m_CategoryFactory->loadCategories();
- m_Filters.reset(new FilterList(ui, &m_OrganizerCore, m_CategoryFactory));
+ m_Filters.reset(new FilterList(ui, &m_OrganizerCore, &m_PluginContainer, m_CategoryFactory));
connect(
m_Filters.get(), &FilterList::criteriaChanged,
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index 00ecdae3..cece6745 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -868,101 +868,72 @@ void NexusInterface::nextRequest()
if (!info.m_Reroute) {
bool hasParams = false;
switch (info.m_Type) {
- case NXMRequestInfo::TYPE_DESCRIPTION:
- case NXMRequestInfo::TYPE_MODINFO: {
- url = QString("%1/games/%2/mods/%3")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(info.m_ModID);
- } break;
- case NXMRequestInfo::TYPE_CHECKUPDATES: {
- QString period;
- switch (info.m_UpdatePeriod) {
- case UpdatePeriod::DAY:
- period = "1d";
- break;
- case UpdatePeriod::WEEK:
- period = "1w";
- break;
- case UpdatePeriod::MONTH:
- period = "1m";
- break;
- }
- url = QString("%1/games/%2/mods/updated?period=%3")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(period);
- } break;
- case NXMRequestInfo::TYPE_FILES:
- case NXMRequestInfo::TYPE_GETUPDATES: {
- url = QString("%1/games/%2/mods/%3/files")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(info.m_ModID);
- } break;
- case NXMRequestInfo::TYPE_FILEINFO: {
- url = QString("%1/games/%2/mods/%3/files/%4")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(info.m_ModID)
- .arg(info.m_FileID);
- } break;
- case NXMRequestInfo::TYPE_DOWNLOADURL: {
- ModRepositoryFileInfo* fileInfo = qobject_cast<ModRepositoryFileInfo*>(
- qvariant_cast<QObject*>(info.m_UserData));
- if (m_User.type() == APIUserAccountTypes::Premium) {
- url = QString("%1/games/%2/mods/%3/files/%4/download_link")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(info.m_ModID)
- .arg(info.m_FileID);
- } else if (!fileInfo->nexusKey.isEmpty() && fileInfo->nexusExpires &&
- fileInfo->nexusDownloadUser == m_User.id().toInt()) {
- url = QString("%1/games/%2/mods/%3/files/%4/download_link?key=%5&expires=%6")
+ case NXMRequestInfo::TYPE_DESCRIPTION:
+ case NXMRequestInfo::TYPE_MODINFO: {
+ url = QString("%1/games/%2/mods/%3")
.arg(info.m_URL)
.arg(info.m_GameName)
- .arg(info.m_ModID)
- .arg(info.m_FileID)
- .arg(fileInfo->nexusKey)
- .arg(fileInfo->nexusExpires);
- } else {
- log::warn("{}", tr("Aborting download: Either you clicked on a premium-only "
- "link and your account is not premium, "
- "or the download link was generated by a different account "
- "than the one stored in Mod Organizer."));
- return;
- }
- } break;
- case NXMRequestInfo::TYPE_ENDORSEMENTS: {
- url = QString("%1/user/endorsements").arg(info.m_URL);
- } break;
- case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
- QString endorse = info.m_Endorse ? "endorse" : "abstain";
- url = QString("%1/games/%2/mods/%3/%4")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(info.m_ModID)
- .arg(endorse);
- postObject.insert("Version", info.m_ModVersion);
- postData.setObject(postObject);
- } break;
- case NXMRequestInfo::TYPE_TOGGLETRACKING: {
- url = QStringLiteral("%1/user/tracked_mods?domain_name=%2")
- .arg(info.m_URL)
- .arg(info.m_GameName);
- postObject.insert("mod_id", info.m_ModID);
- postData.setObject(postObject);
- requestIsDelete = !info.m_Track;
- } break;
- case NXMRequestInfo::TYPE_TRACKEDMODS: {
- url = QStringLiteral("%1/user/tracked_mods").arg(info.m_URL);
- } break;
- case NXMRequestInfo::TYPE_FILEINFO_MD5: {
- url = QStringLiteral("%1/games/%2/mods/md5_search/%3")
- .arg(info.m_URL)
- .arg(info.m_GameName)
- .arg(QString(info.m_Hash.toHex()));
- }
+ .arg(info.m_ModID);
+ } break;
+ case NXMRequestInfo::TYPE_CHECKUPDATES: {
+ QString period;
+ switch (info.m_UpdatePeriod) {
+ case UpdatePeriod::DAY:
+ period = "1d";
+ break;
+ case UpdatePeriod::WEEK:
+ period = "1w";
+ break;
+ case UpdatePeriod::MONTH:
+ period = "1m";
+ break;
+ }
+ url = QString("%1/games/%2/mods/updated?period=%3").arg(info.m_URL).arg(info.m_GameName).arg(period);
+ } break;
+ case NXMRequestInfo::TYPE_FILES:
+ case NXMRequestInfo::TYPE_GETUPDATES: {
+ url = QString("%1/games/%2/mods/%3/files").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID);
+ } break;
+ case NXMRequestInfo::TYPE_FILEINFO: {
+ url = QString("%1/games/%2/mods/%3/files/%4").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID);
+ } break;
+ case NXMRequestInfo::TYPE_DOWNLOADURL: {
+ ModRepositoryFileInfo *fileInfo = qobject_cast<ModRepositoryFileInfo*>(qvariant_cast<QObject*>(info.m_UserData));
+ if (m_User.type() == APIUserAccountTypes::Premium) {
+ url = QString("%1/games/%2/mods/%3/files/%4/download_link").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID);
+ } else if (!fileInfo->nexusKey.isEmpty() && fileInfo->nexusExpires && fileInfo->nexusDownloadUser == m_User.id().toInt()) {
+ url = QString("%1/games/%2/mods/%3/files/%4/download_link?key=%5&expires=%6")
+ .arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID).arg(fileInfo->nexusKey).arg(fileInfo->nexusExpires);
+ } else {
+ log::warn("{}", tr("Aborting download: Either you clicked on a premium-only link and your account is not premium, "
+ "or the download link was generated by a different account than the one stored in Mod Organizer."));
+ return;
+ }
+ } break;
+ case NXMRequestInfo::TYPE_ENDORSEMENTS: {
+ url = QString("%1/user/endorsements").arg(info.m_URL);
+ } break;
+ case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
+ QString endorse = info.m_Endorse ? "endorse" : "abstain";
+ url = QString("%1/games/%2/mods/%3/%4").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(endorse);
+ postObject.insert("Version", info.m_ModVersion);
+ postData.setObject(postObject);
+ } break;
+ case NXMRequestInfo::TYPE_TOGGLETRACKING: {
+ url = QStringLiteral("%1/user/tracked_mods?domain_name=%2").arg(info.m_URL).arg(info.m_GameName);
+ postObject.insert("mod_id", info.m_ModID);
+ postData.setObject(postObject);
+ requestIsDelete = !info.m_Track;
+ } break;
+ case NXMRequestInfo::TYPE_TRACKEDMODS: {
+ url = QStringLiteral("%1/user/tracked_mods").arg(info.m_URL);
+ } break;
+ case NXMRequestInfo::TYPE_FILEINFO_MD5: {
+ url = QStringLiteral("%1/games/%2/mods/md5_search/%3").arg(info.m_URL).arg(info.m_GameName).arg(QString(info.m_Hash.toHex()));
+ } break;
+ case NXMRequestInfo::TYPE_GAMEINFO: {
+ url = QStringLiteral("%1/games/%2").arg(info.m_URL).arg(info.m_GameName);
+ } break;
}
} else {
url = info.m_URL;
@@ -1074,65 +1045,53 @@ void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter)
if (!responseDoc.isNull()) {
QVariant result = responseDoc.toVariant();
switch (iter->m_Type) {
- case NXMRequestInfo::TYPE_DESCRIPTION: {
- emit nxmDescriptionAvailable(iter->m_GameName, iter->m_ModID,
- iter->m_UserData, result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_MODINFO: {
- emit nxmModInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_CHECKUPDATES: {
- emit nxmUpdateInfoAvailable(iter->m_GameName, iter->m_UserData, result,
- iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_FILES: {
- emit nxmFilesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_GETUPDATES: {
- emit nxmUpdatesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_FILEINFO: {
- emit nxmFileInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID,
- iter->m_UserData, result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_DOWNLOADURL: {
- emit nxmDownloadURLsAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID,
- iter->m_UserData, result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_ENDORSEMENTS: {
- emit nxmEndorsementsAvailable(iter->m_UserData, result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
- emit nxmEndorsementToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_TOGGLETRACKING: {
- auto results = result.toMap();
- auto message = results["message"].toString();
- if (message.contains(
- QRegularExpression("User [0-9]+ is already Tracking Mod: [0-9]+")) ||
- message.contains(
- QRegularExpression("User [0-9]+ is now Tracking Mod: [0-9]+"))) {
- emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- true, iter->m_ID);
- } else if (message.contains(QRegularExpression(
- "User [0-9]+ is no longer tracking [0-9]+")) ||
- message.contains(QRegularExpression(
- "Users is not tracking mod. Unable to untrack."))) {
- emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
- false, iter->m_ID);
- }
- } break;
- case NXMRequestInfo::TYPE_TRACKEDMODS: {
- emit nxmTrackedModsAvailable(iter->m_UserData, result, iter->m_ID);
- } break;
- case NXMRequestInfo::TYPE_FILEINFO_MD5: {
- emit nxmFileInfoFromMd5Available(iter->m_GameName, iter->m_UserData, result,
- iter->m_ID);
- } break;
+ case NXMRequestInfo::TYPE_DESCRIPTION: {
+ emit nxmDescriptionAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_MODINFO: {
+ emit nxmModInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_CHECKUPDATES: {
+ emit nxmUpdateInfoAvailable(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_FILES: {
+ emit nxmFilesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_GETUPDATES: {
+ emit nxmUpdatesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_FILEINFO: {
+ emit nxmFileInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_DOWNLOADURL: {
+ emit nxmDownloadURLsAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_ENDORSEMENTS: {
+ emit nxmEndorsementsAvailable(iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
+ emit nxmEndorsementToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_TOGGLETRACKING: {
+ auto results = result.toMap();
+ auto message = results["message"].toString();
+ if (message.contains(QRegularExpression("User [0-9]+ is already Tracking Mod: [0-9]+")) ||
+ message.contains(QRegularExpression("User [0-9]+ is now Tracking Mod: [0-9]+"))) {
+ emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, true, iter->m_ID);
+ } else if (message.contains(QRegularExpression("User [0-9]+ is no longer tracking [0-9]+")) ||
+ message.contains(QRegularExpression("Users is not tracking mod. Unable to untrack."))) {
+ emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, false, iter->m_ID);
+ }
+ } break;
+ case NXMRequestInfo::TYPE_TRACKEDMODS: {
+ emit nxmTrackedModsAvailable(iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_FILEINFO_MD5: {
+ emit nxmFileInfoFromMd5Available(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
+ } break;
+ case NXMRequestInfo::TYPE_GAMEINFO: {
+ emit nxmGameInfoAvailable(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
+ } break;
}
m_User.limits(parseLimits(reply));
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 425a1cb8..6ad6fdea 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -37,8 +37,7 @@ SettingsDialog::SettingsDialog(PluginContainer* pluginContainer, Settings& setti
{
ui->setupUi(this);
- m_tabs.push_back(
- std::unique_ptr<SettingsTab>(new GeneralSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new GeneralSettingsTab(settings, m_pluginContainer, *this)));
m_tabs.push_back(std::unique_ptr<SettingsTab>(new ThemeSettingsTab(settings, *this)));
m_tabs.push_back(
std::unique_ptr<SettingsTab>(new ModListSettingsTab(settings, *this)));
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
index 7acaa190..95580723 100644
--- a/src/settingsdialoggeneral.cpp
+++ b/src/settingsdialoggeneral.cpp
@@ -8,8 +8,8 @@
using namespace MOBase;
-GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
- : SettingsTab(s, d)
+GeneralSettingsTab::GeneralSettingsTab(Settings& s, PluginContainer* pluginContainer, SettingsDialog& d)
+ : SettingsTab(s, d), m_PluginContainer(pluginContainer)
{
// language
addLanguages();
@@ -159,7 +159,7 @@ void GeneralSettingsTab::resetDialogs()
void GeneralSettingsTab::onEditCategories()
{
- CategoriesDialog catDialog(&dialog());
+ CategoriesDialog dialog(m_PluginContainer, &dialog());
if (catDialog.exec() == QDialog::Accepted) {
catDialog.commitChanges();
diff --git a/src/settingsdialoggeneral.h b/src/settingsdialoggeneral.h
index 61938190..ffbeb50c 100644
--- a/src/settingsdialoggeneral.h
+++ b/src/settingsdialoggeneral.h
@@ -3,11 +3,12 @@
#include "settings.h"
#include "settingsdialog.h"
+#include "plugincontainer.h"
class GeneralSettingsTab : public SettingsTab
{
public:
- GeneralSettingsTab(Settings& settings, SettingsDialog& dialog);
+ GeneralSettingsTab(Settings& settings, PluginContainer *pluginContainer, SettingsDialog& dialog);
void update();
@@ -19,6 +20,10 @@ private:
void onEditCategories();
void onResetDialogs();
+
+private:
+ PluginContainer* m_PluginContainer;
+
};
#endif // SETTINGSDIALOGGENERAL_H