summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp54
-rw-r--r--src/mainwindow.h3
2 files changed, 55 insertions, 2 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 0521a17c..3005ab8f 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -423,8 +423,6 @@ MainWindow::MainWindow(Settings& settings, OrganizerCore& organizerCore,
connect(CategoryFactory::instance(), SIGNAL(requestNexusCategories()), this, SLOT(requestNexusCategories()));
- connect(CategoryFactory::instance(), SIGNAL(requestNexusCategories()), this, SLOT(requestNexusCategories()));
-
connect(
NexusInterface::instance(&pluginContainer)->getAccessManager(),
SIGNAL(credentialsReceived(const APIUserAccount&)),
@@ -1287,6 +1285,28 @@ void MainWindow::showEvent(QShowEvent* event)
gameSupportTriggered();
}
+ QMessageBox newCatDialog;
+ newCatDialog.setWindowTitle("Import Categories");
+ newCatDialog.setText(tr("Please choose how to handle the default category setup.\n\n"
+ "If you've already connected to Nexus, you can automatically import Nexus categories for this game (if applicable). Otherwise, use the old Mod Organizer default category structure, or leave the categories blank."));
+ QPushButton importBtn(tr("&Import Nexus Categories"));
+ connect(&importBtn, &QPushButton::clicked, this, &MainWindow::importCategories);
+ QPushButton defaultBtn(tr("Use &Default Categories"));
+ QPushButton cancelBtn(tr("Do &Nothing"));
+ if (NexusInterface::instance().getAccessManager()->validated()) {
+ newCatDialog.addButton(&importBtn, QMessageBox::ButtonRole::AcceptRole);
+ }
+ newCatDialog.addButton(&defaultBtn, QMessageBox::ButtonRole::AcceptRole);
+ newCatDialog.addButton(&cancelBtn, QMessageBox::ButtonRole::RejectRole);
+ newCatDialog.exec();
+ disconnect(&importBtn, &QPushButton::clicked, this, &MainWindow::importCategories);
+ if (newCatDialog.clickedButton() == &cancelBtn) {
+ m_CategoryFactory->reset();
+ } else if (newCatDialog.clickedButton() == &defaultBtn) {
+ m_CategoryFactory->loadCategories();
+ }
+ m_CategoryFactory->saveCategories();
+
m_OrganizerCore.settings().setFirstStart(false);
}
@@ -2392,6 +2412,13 @@ void MainWindow::modInstalled(const QString& modName)
{m_OrganizerCore.modList()->index(index, 0)});
}
+void MainWindow::importCategories(bool)
+{
+ NexusInterface& nexus = NexusInterface::instance();
+ nexus.setPluginContainer(&m_OrganizerCore.pluginContainer());
+ nexus.requestGameInfo(Settings::instance().game().plugin()->gameShortName(), this, QVariant(), QString());
+}
+
void MainWindow::showMessage(const QString& message)
{
MessageDialog::showMessage(message, this);
@@ -4517,6 +4544,29 @@ void MainWindow::nxmDownloadURLs(QString, int, int, QVariant, QVariant resultDat
m_OrganizerCore.settings().network().updateServers(servers);
}
+void MainWindow::nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int)
+{
+ QVariantMap result = resultData.toMap();
+ QVariantList categories = result["categories"].toList();
+ CategoryFactory* catFactory = CategoryFactory::instance();
+ catFactory->reset();
+ for (auto category : categories) {
+ auto catMap = category.toMap();
+ std::vector<CategoryFactory::NexusCategory> nexusCat;
+ nexusCat.push_back(
+ CategoryFactory::NexusCategory(
+ catMap["name"].toString(),
+ catMap["category_id"].toInt()
+ )
+ );
+ catFactory->addCategory(
+ catMap["name"].toString(),
+ nexusCat,
+ 0
+ );
+ }
+}
+
void MainWindow::nxmRequestFailed(QString gameName, int modID, int, QVariant, int,
int errorCode, const QString& errorString)
{
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 50ff893f..dd3ff823 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -368,6 +368,8 @@ private slots:
void modInstalled(const QString& modName);
+ void importCategories(bool);
+
// update info
void nxmUpdateInfoAvailable(QString gameName, QVariant userData, QVariant resultData,
int requestID);
@@ -381,6 +383,7 @@ private slots:
void nxmTrackedModsAvailable(QVariant userData, QVariant resultData, int);
void nxmDownloadURLs(QString, int modID, int fileID, QVariant userData,
QVariant resultData, int requestID);
+ void nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int);
void nxmRequestFailed(QString gameName, int modID, int fileID, QVariant userData,
int requestID, int errorCode, const QString& errorString);