mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
WIP: Refactor cat dialog and implement nex cat updates
This commit is contained in:
+39
-19
@@ -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());
|
||||
|
||||
+11
-1
@@ -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;
|
||||
|
||||
+18
-11
@@ -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/>
|
||||
|
||||
+4
-3
@@ -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();
|
||||
|
||||
+3
-1
@@ -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);
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+111
-152
@@ -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")
|
||||
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);
|
||||
} 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()));
|
||||
}
|
||||
.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));
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user