summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Rimpo <jeremy.rimpo@servermonkey.com>2023-09-19 02:37:24 -0500
committerJeremy Rimpo <jeremy.rimpo@servermonkey.com>2023-09-21 17:35:08 -0500
commitc50ad588432a27612fe5be39b1520e2962d5eef7 (patch)
tree676dd52d7022d9167eccc267ae9811367d8de666 /src
parentf6bb73deb21228acf0e7f74500f50421143aa739 (diff)
Add nexus category ID to mod info
- We will check the mod info first then fall back to the download file - Add category field in the info dialog nexus tab
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp2
-rw-r--r--src/modinfo.h10
-rw-r--r--src/modinfobackup.h2
-rw-r--r--src/modinfodialog.ui25
-rw-r--r--src/modinfodialognexus.cpp16
-rw-r--r--src/modinfodialognexus.h1
-rw-r--r--src/modinfoforeign.h2
-rw-r--r--src/modinfooverwrite.h2
-rw-r--r--src/modinforegular.cpp23
-rw-r--r--src/modinforegular.h11
-rw-r--r--src/modinfoseparator.h2
-rw-r--r--src/modlistviewactions.cpp44
-rw-r--r--src/organizer_en.ts233
-rw-r--r--src/version.rc53
14 files changed, 255 insertions, 171 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 18a288c6..ac4e093d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -4476,6 +4476,8 @@ void MainWindow::nxmModInfoAvailable(QString gameName, int modID, QVariant userD
mod->setNexusDescription(result["description"].toString());
+ mod->setNexusCategory(result["category_id"].toInt());
+
if ((mod->endorsedState() != EndorsedState::ENDORSED_NEVER) &&
(result.contains("endorsement"))) {
QVariantMap endorsement = result["endorsement"].toMap();
diff --git a/src/modinfo.h b/src/modinfo.h
index 9895d44c..0736aa20 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -887,6 +887,16 @@ public: // Nexus stuff
* @brief Set the last time the mod was updated on Nexus.
*/
virtual void setNexusLastModified(QDateTime time) = 0;
+
+ /**
+ * @return the assigned nexus category ID
+ */
+ virtual int getNexusCategory() const = 0;
+
+ /**
+ * @brief Assigns the given Nexus category ID
+ */
+ virtual void setNexusCategory(int category) = 0;
public: // Conflicts
// retrieve the list of mods (as mod index) that are overwritten by this one.
diff --git a/src/modinfobackup.h b/src/modinfobackup.h
index 01abf184..0c3c29d7 100644
--- a/src/modinfobackup.h
+++ b/src/modinfobackup.h
@@ -38,6 +38,8 @@ public:
virtual QDateTime getNexusLastModified() const override { return QDateTime(); }
virtual void setNexusLastModified(QDateTime) override {}
virtual QString getNexusDescription() const override { return QString(); }
+ virtual void setNexusCategory(int) override {}
+ virtual int getNexusCategory() const override { return 0; }
virtual bool isBackup() const override { return true; }
virtual void addInstalledFile(int, int) override {}
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui
index 269aebe3..53655aa5 100644
--- a/src/modinfodialog.ui
+++ b/src/modinfodialog.ui
@@ -966,7 +966,7 @@ text-align: left;</string>
<number>0</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="0,0,0,0,0,0,1">
+ <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="0,0,0,0,0,0,0,0,1">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
@@ -1027,6 +1027,29 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
+ <widget class="QLabel" name="categoryLabel">
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="category">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp
index 56636145..485f138a 100644
--- a/src/modinfodialognexus.cpp
+++ b/src/modinfodialognexus.cpp
@@ -32,6 +32,9 @@ NexusTab::NexusTab(ModInfoDialogTabContext cx)
connect(ui->version, &QLineEdit::editingFinished, [&] {
onVersionChanged();
});
+ connect(ui->category, &QLineEdit::editingFinished, [&] {
+ onCategoryChanged();
+ });
connect(ui->refresh, &QPushButton::clicked, [&] {
onRefreshBrowser();
@@ -75,6 +78,7 @@ void NexusTab::clear()
ui->modID->clear();
ui->sourceGame->clear();
ui->version->clear();
+ ui->category->clear();
ui->browser->setPage(new NexusTabWebpage(ui->browser));
ui->hasCustomURL->setChecked(false);
ui->customURL->clear();
@@ -108,6 +112,8 @@ void NexusTab::update()
ui->sourceGame->setCurrentIndex(ui->sourceGame->findData(gameName));
+ ui->category->setText(QString("%1").arg(mod().getNexusCategory()));
+
auto* page = new NexusTabWebpage(ui->browser);
ui->browser->setPage(page);
@@ -360,6 +366,16 @@ void NexusTab::onVersionChanged()
updateVersionColor();
}
+void NexusTab::onCategoryChanged()
+{
+ if (m_loading) {
+ return;
+ }
+
+ int category = ui->category->text().toInt();
+ mod().setNexusCategory(category);
+}
+
void NexusTab::onRefreshBrowser()
{
const auto modID = mod().nexusId();
diff --git a/src/modinfodialognexus.h b/src/modinfodialognexus.h
index e9a8720f..e752018a 100644
--- a/src/modinfodialognexus.h
+++ b/src/modinfodialognexus.h
@@ -57,6 +57,7 @@ private:
void onModIDChanged();
void onSourceGameChanged();
void onVersionChanged();
+ void onCategoryChanged();
void onRefreshBrowser();
void onVisitNexus();
diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h
index 2c956fb7..dc66e1b0 100644
--- a/src/modinfoforeign.h
+++ b/src/modinfoforeign.h
@@ -60,6 +60,8 @@ public:
virtual void setNexusFileStatus(int) override {}
virtual QDateTime getLastNexusUpdate() const override { return QDateTime(); }
virtual void setLastNexusUpdate(QDateTime) override {}
+ virtual int getNexusCategory() const override { return 0; }
+ virtual void setNexusCategory(int) override {}
virtual QDateTime getLastNexusQuery() const override { return QDateTime(); }
virtual void setLastNexusQuery(QDateTime) override {}
virtual QDateTime getNexusLastModified() const override { return QDateTime(); }
diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h
index 02154902..45b5bbdd 100644
--- a/src/modinfooverwrite.h
+++ b/src/modinfooverwrite.h
@@ -68,6 +68,8 @@ public:
virtual QDateTime getNexusLastModified() const override { return QDateTime(); }
virtual void setNexusLastModified(QDateTime) override {}
virtual QString getNexusDescription() const override { return QString(); }
+ virtual void setNexusCategory(int) override {}
+ virtual int getNexusCategory() const override { return 0; }
virtual QStringList archives(bool checkOnDisk = false) override;
virtual void addInstalledFile(int, int) override {}
virtual std::set<std::pair<int, int>> installedFiles() const override { return {}; }
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 9cb89307..e238075a 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -97,6 +97,7 @@ void ModInfoRegular::readMeta()
m_InstallationFile = metaFile.value("installationFile", "").toString();
m_NexusDescription = metaFile.value("nexusDescription", "").toString();
m_NexusFileStatus = metaFile.value("nexusFileStatus", "1").toInt();
+ m_NexusCategory = metaFile.value("nexusCategory", 0).toInt();
m_Repository = metaFile.value("repository", "Nexus").toString();
m_Converted = metaFile.value("converted", false).toBool();
m_Validated = metaFile.value("validated", false).toBool();
@@ -171,10 +172,11 @@ void ModInfoRegular::readMeta()
m_NexusLastModified = QDateTime::fromString(
metaFile.value("nexusLastModified", QDateTime::currentDateTimeUtc()).toString(),
Qt::ISODate);
- m_Color = metaFile.value("color", QColor()).value<QColor>();
- m_TrackedState = metaFile.value("tracked", false).toBool()
- ? TrackedState::TRACKED_TRUE
- : TrackedState::TRACKED_FALSE;
+ m_NexusCategory = metaFile.value("nexusCategory", 0).toInt();
+ m_Color = metaFile.value("color", QColor()).value<QColor>();
+ m_TrackedState = metaFile.value("tracked", false).toBool()
+ ? TrackedState::TRACKED_TRUE
+ : TrackedState::TRACKED_FALSE;
if (metaFile.contains("endorsed")) {
if (metaFile.value("endorsed").canConvert<int>()) {
using ut = std::underlying_type_t<EndorsedState>;
@@ -266,6 +268,7 @@ void ModInfoRegular::saveMeta()
metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate));
metaFile.setValue("lastNexusUpdate", m_LastNexusUpdate.toString(Qt::ISODate));
metaFile.setValue("nexusLastModified", m_NexusLastModified.toString(Qt::ISODate));
+ metaFile.setValue("nexusCategory", m_NexusCategory);
metaFile.setValue("converted", m_Converted);
metaFile.setValue("validated", m_Validated);
metaFile.setValue("color", m_Color);
@@ -833,6 +836,18 @@ void ModInfoRegular::setNexusLastModified(QDateTime time)
emit modDetailsUpdated(true);
}
+int ModInfoRegular::getNexusCategory() const
+{
+ return m_NexusCategory;
+}
+
+void ModInfoRegular::setNexusCategory(int category)
+{
+ m_NexusCategory = category;
+ m_MetaInfoChanged = true;
+ saveMeta();
+}
+
void ModInfoRegular::setCustomURL(QString const& url)
{
m_CustomURL = url;
diff --git a/src/modinforegular.h b/src/modinforegular.h
index 6c85d66c..a408d966 100644
--- a/src/modinforegular.h
+++ b/src/modinforegular.h
@@ -379,6 +379,16 @@ public:
*/
virtual void setNexusLastModified(QDateTime time) override;
+ /**
+ * @return the assigned nexus category ID
+ */
+ virtual int getNexusCategory() const override;
+
+ /**
+ * @brief Assigns the given Nexus category ID
+ */
+ virtual void setNexusCategory(int category) override;
+
virtual QStringList archives(bool checkOnDisk = false) override;
virtual void setColor(QColor color) override;
@@ -457,6 +467,7 @@ private:
QDateTime m_LastNexusQuery;
QDateTime m_LastNexusUpdate;
QDateTime m_NexusLastModified;
+ int m_NexusCategory;
QColor m_Color;
diff --git a/src/modinfoseparator.h b/src/modinfoseparator.h
index c34dd92b..67bc3d56 100644
--- a/src/modinfoseparator.h
+++ b/src/modinfoseparator.h
@@ -45,6 +45,8 @@ public:
virtual void setLastNexusQuery(QDateTime) override {}
virtual QDateTime getNexusLastModified() const override { return QDateTime(); }
virtual void setNexusLastModified(QDateTime) override {}
+ virtual int getNexusCategory() const override { return 0; }
+ virtual void setNexusCategory(int) override {}
virtual QDateTime creationTime() const override { return QDateTime(); }
virtual QString getNexusDescription() const override { return QString(); }
virtual void addInstalledFile(int /*modId*/, int /*fileId*/) override {}
diff --git a/src/modlistviewactions.cpp b/src/modlistviewactions.cpp
index aa962c1e..a86c9067 100644
--- a/src/modlistviewactions.cpp
+++ b/src/modlistviewactions.cpp
@@ -265,18 +265,20 @@ void ModListViewActions::assignCategories() const
for (auto mod : m_core.modList()->allMods()) {
ModInfo::Ptr modInfo = ModInfo::getByName(mod);
QString file = modInfo->installationFile();
- auto download = m_core.downloadManager()->getDownloadIndex(file);
- if (download >= 0) {
- int nexusCategory = m_core.downloadManager()->getCategoryID(download);
- int newCategory = CategoryFactory::instance()->resolveNexusID(nexusCategory);
- if (newCategory != 0) {
- for (auto category : modInfo->categories()) {
- modInfo->removeCategory(category);
- }
+ int nexusCategory = modInfo->getNexusCategory();
+ if (!nexusCategory) {
+ auto download = m_core.downloadManager()->getDownloadIndex(file);
+ if (download >= 0) {
+ int nexusCategory = m_core.downloadManager()->getCategoryID(download);
+ }
+ }
+ int newCategory = CategoryFactory::instance()->resolveNexusID(nexusCategory);
+ if (newCategory != 0) {
+ for (auto category : modInfo->categories()) {
+ modInfo->removeCategory(category);
}
- modInfo->setCategory(CategoryFactory::instance()->getCategoryID(newCategory),
- true);
}
+ modInfo->setCategory(CategoryFactory::instance()->getCategoryID(newCategory), true);
}
}
@@ -1108,16 +1110,20 @@ void ModListViewActions::remapCategory(const QModelIndexList& indices) const
for (auto& idx : indices) {
ModInfo::Ptr modInfo = ModInfo::getByIndex(idx.data(ModList::IndexRole).toInt());
- int downloadIndex =
- m_core.downloadManager()->getDownloadIndex(modInfo->installationFile());
- if (downloadIndex >= 0) {
- auto downloadInfo = m_core.downloadManager()->getFileInfo(downloadIndex);
- unsigned int categoryIndex =
- CategoryFactory::instance()->resolveNexusID(downloadInfo->categoryID);
- if (categoryIndex != 0)
- modInfo->setPrimaryCategory(
- CategoryFactory::instance()->getCategoryID(categoryIndex));
+ int categoryID = modInfo->getNexusCategory();
+ if (!categoryID) {
+ int downloadIndex =
+ m_core.downloadManager()->getDownloadIndex(modInfo->installationFile());
+ if (downloadIndex >= 0) {
+ auto downloadInfo = m_core.downloadManager()->getFileInfo(downloadIndex);
+ categoryID = downloadInfo->categoryID;
+ }
}
+ unsigned int categoryIndex =
+ CategoryFactory::instance()->resolveNexusID(categoryID);
+ if (categoryIndex != 0)
+ modInfo->setPrimaryCategory(
+ CategoryFactory::instance()->getCategoryID(categoryIndex));
}
}
diff --git a/src/organizer_en.ts b/src/organizer_en.ts
index 71be4187..228b275a 100644
--- a/src/organizer_en.ts
+++ b/src/organizer_en.ts
@@ -4048,115 +4048,115 @@ You will have to visit the mod page on the %1 Nexus site to change your mind.</s
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3359"/>
+ <location filename="mainwindow.cpp" line="3361"/>
<source>Thank you!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3360"/>
+ <location filename="mainwindow.cpp" line="3362"/>
<source>Thank you for your endorsement!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3474"/>
+ <location filename="mainwindow.cpp" line="3476"/>
<source>Mod ID %1 no longer seems to be available on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3492"/>
+ <location filename="mainwindow.cpp" line="3494"/>
<source>Error %1: Request to Nexus failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3509"/>
- <location filename="mainwindow.cpp" line="3582"/>
+ <location filename="mainwindow.cpp" line="3511"/>
+ <location filename="mainwindow.cpp" line="3584"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3522"/>
+ <location filename="mainwindow.cpp" line="3524"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3523"/>
+ <location filename="mainwindow.cpp" line="3525"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3557"/>
+ <location filename="mainwindow.cpp" line="3559"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3596"/>
+ <location filename="mainwindow.cpp" line="3598"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3606"/>
+ <location filename="mainwindow.cpp" line="3608"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3675"/>
+ <location filename="mainwindow.cpp" line="3677"/>
<source>Remove &apos;%1&apos; from the toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3731"/>
+ <location filename="mainwindow.cpp" line="3733"/>
<source>Backup of load order created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3742"/>
+ <location filename="mainwindow.cpp" line="3744"/>
<source>Choose backup to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3759"/>
+ <location filename="mainwindow.cpp" line="3761"/>
<source>No Backups</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3760"/>
+ <location filename="mainwindow.cpp" line="3762"/>
<source>There are no backups to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3784"/>
- <location filename="mainwindow.cpp" line="3808"/>
+ <location filename="mainwindow.cpp" line="3786"/>
+ <location filename="mainwindow.cpp" line="3810"/>
<source>Restore failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3785"/>
- <location filename="mainwindow.cpp" line="3809"/>
+ <location filename="mainwindow.cpp" line="3787"/>
+ <location filename="mainwindow.cpp" line="3811"/>
<source>Failed to restore the backup. Errorcode: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3797"/>
+ <location filename="mainwindow.cpp" line="3799"/>
<source>Backup of mod list created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3877"/>
+ <location filename="mainwindow.cpp" line="3879"/>
<source>A file with the same name has already been downloaded. What would you like to do?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3879"/>
+ <location filename="mainwindow.cpp" line="3881"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3880"/>
+ <location filename="mainwindow.cpp" line="3882"/>
<source>Rename new file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3881"/>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>Ignore file</source>
<translation type="unfinished"></translation>
</message>
@@ -4480,88 +4480,93 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1068"/>
- <location filename="modinfodialog.ui" line="1074"/>
+ <location filename="modinfodialog.ui" line="1032"/>
+ <source>Category</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="1091"/>
+ <location filename="modinfodialog.ui" line="1097"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1071"/>
+ <location filename="modinfodialog.ui" line="1094"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1085"/>
- <location filename="modinfodialog.ui" line="1210"/>
+ <location filename="modinfodialog.ui" line="1108"/>
+ <location filename="modinfodialog.ui" line="1233"/>
<source>Open in Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1096"/>
+ <location filename="modinfodialog.ui" line="1119"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1107"/>
+ <location filename="modinfodialog.ui" line="1130"/>
<source>Track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1174"/>
+ <location filename="modinfodialog.ui" line="1197"/>
<source>about:blank</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1200"/>
+ <location filename="modinfodialog.ui" line="1223"/>
<source>Use Custom URL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1221"/>
+ <location filename="modinfodialog.ui" line="1244"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1229"/>
- <location filename="modinfodialog.ui" line="1232"/>
- <location filename="modinfodialog.ui" line="1235"/>
+ <location filename="modinfodialog.ui" line="1252"/>
+ <location filename="modinfodialog.ui" line="1255"/>
+ <location filename="modinfodialog.ui" line="1258"/>
<source>Enter comments about the mod here. These are displayed in the notes column of the mod list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1242"/>
+ <location filename="modinfodialog.ui" line="1265"/>
<source>Set Color</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1249"/>
+ <location filename="modinfodialog.ui" line="1272"/>
<source>Reset Color</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1258"/>
- <location filename="modinfodialog.ui" line="1261"/>
- <location filename="modinfodialog.ui" line="1267"/>
+ <location filename="modinfodialog.ui" line="1281"/>
+ <location filename="modinfodialog.ui" line="1284"/>
+ <location filename="modinfodialog.ui" line="1290"/>
<source>Enter notes about the mod here. These can be viewed in the mod list by hovering over the notes column or the flags column.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1275"/>
+ <location filename="modinfodialog.ui" line="1298"/>
<source>Filetree</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1289"/>
+ <location filename="modinfodialog.ui" line="1312"/>
<source>Open Mod in Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1314"/>
+ <location filename="modinfodialog.ui" line="1337"/>
<source>A directory view of this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1317"/>
+ <location filename="modinfodialog.ui" line="1340"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -4571,17 +4576,17 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1353"/>
+ <location filename="modinfodialog.ui" line="1376"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1363"/>
+ <location filename="modinfodialog.ui" line="1386"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="1386"/>
+ <location filename="modinfodialog.ui" line="1409"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
@@ -4620,12 +4625,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinforegular.cpp" line="727"/>
+ <location filename="modinforegular.cpp" line="730"/>
<source>%1 contains no esp/esm/esl and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinforegular.cpp" line="733"/>
+ <location filename="modinforegular.cpp" line="736"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -5324,7 +5329,7 @@ Please enter the name:</source>
</message>
<message>
<location filename="modlistviewactions.cpp" line="120"/>
- <location filename="modlistviewactions.cpp" line="1300"/>
+ <location filename="modlistviewactions.cpp" line="1306"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
@@ -5336,7 +5341,7 @@ Please enter a name:</source>
</message>
<message>
<location filename="modlistviewactions.cpp" line="131"/>
- <location filename="modlistviewactions.cpp" line="1311"/>
+ <location filename="modlistviewactions.cpp" line="1317"/>
<source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
@@ -5368,258 +5373,258 @@ Please enter a name:</source>
</message>
<message>
<location filename="modlistviewactions.cpp" line="217"/>
- <location filename="modlistviewactions.cpp" line="773"/>
- <location filename="modlistviewactions.cpp" line="1022"/>
+ <location filename="modlistviewactions.cpp" line="775"/>
+ <location filename="modlistviewactions.cpp" line="1024"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="modlistviewactions.cpp" line="240"/>
- <location filename="modlistviewactions.cpp" line="300"/>
+ <location filename="modlistviewactions.cpp" line="302"/>
<source>You are not currently authenticated with Nexus. Please do so under Settings -&gt; Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="319"/>
+ <location filename="modlistviewactions.cpp" line="321"/>
<source>Export to csv</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="323"/>
+ <location filename="modlistviewactions.cpp" line="325"/>
<source>CSV (Comma Separated Values) is a format that can be imported in programs like Excel to create a spreadsheet.
You can also use online editors and converters instead.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="328"/>
+ <location filename="modlistviewactions.cpp" line="330"/>
<source>Select what mods you want export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="329"/>
+ <location filename="modlistviewactions.cpp" line="331"/>
<source>All installed mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="331"/>
+ <location filename="modlistviewactions.cpp" line="333"/>
<source>Only active (checked) mods from your current profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="333"/>
+ <location filename="modlistviewactions.cpp" line="335"/>
<source>All currently visible mods in the mod list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="350"/>
+ <location filename="modlistviewactions.cpp" line="352"/>
<source>Choose what Columns to export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="353"/>
+ <location filename="modlistviewactions.cpp" line="355"/>
<source>Mod_Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="355"/>
+ <location filename="modlistviewactions.cpp" line="357"/>
<source>Mod_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="357"/>
+ <location filename="modlistviewactions.cpp" line="359"/>
<source>Notes_column</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="358"/>
+ <location filename="modlistviewactions.cpp" line="360"/>
<source>Mod_Status</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="360"/>
+ <location filename="modlistviewactions.cpp" line="362"/>
<source>Primary_Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="361"/>
+ <location filename="modlistviewactions.cpp" line="363"/>
<source>Nexus_ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="362"/>
+ <location filename="modlistviewactions.cpp" line="364"/>
<source>Mod_Nexus_URL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="363"/>
+ <location filename="modlistviewactions.cpp" line="365"/>
<source>Mod_Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="364"/>
+ <location filename="modlistviewactions.cpp" line="366"/>
<source>Install_Date</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="365"/>
+ <location filename="modlistviewactions.cpp" line="367"/>
<source>Download_File_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="492"/>
+ <location filename="modlistviewactions.cpp" line="494"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="546"/>
+ <location filename="modlistviewactions.cpp" line="548"/>
<source>Failed to display overwrite dialog: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="607"/>
+ <location filename="modlistviewactions.cpp" line="609"/>
<source>Set Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="608"/>
+ <location filename="modlistviewactions.cpp" line="610"/>
<source>Set the priority of the selected mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="738"/>
+ <location filename="modlistviewactions.cpp" line="740"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="774"/>
+ <location filename="modlistviewactions.cpp" line="776"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="791"/>
+ <location filename="modlistviewactions.cpp" line="793"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="819"/>
+ <location filename="modlistviewactions.cpp" line="821"/>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="820"/>
+ <location filename="modlistviewactions.cpp" line="822"/>
<source>The versioning scheme decides which version is considered newer than another.
This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="846"/>
+ <location filename="modlistviewactions.cpp" line="848"/>
<source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="847"/>
+ <location filename="modlistviewactions.cpp" line="849"/>
<source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="868"/>
+ <location filename="modlistviewactions.cpp" line="870"/>
<source>Opening Nexus Links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="869"/>
+ <location filename="modlistviewactions.cpp" line="871"/>
<source>You are trying to open %1 links to Nexus Mods. Are you sure you want to do this?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="892"/>
- <location filename="modlistviewactions.cpp" line="914"/>
+ <location filename="modlistviewactions.cpp" line="894"/>
+ <location filename="modlistviewactions.cpp" line="916"/>
<source>Opening Web Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="893"/>
- <location filename="modlistviewactions.cpp" line="915"/>
+ <location filename="modlistviewactions.cpp" line="895"/>
+ <location filename="modlistviewactions.cpp" line="917"/>
<source>You are trying to open %1 Web Pages. Are you sure you want to do this?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="965"/>
- <location filename="modlistviewactions.cpp" line="970"/>
- <location filename="modlistviewactions.cpp" line="981"/>
+ <location filename="modlistviewactions.cpp" line="967"/>
+ <location filename="modlistviewactions.cpp" line="972"/>
+ <location filename="modlistviewactions.cpp" line="983"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="966"/>
+ <location filename="modlistviewactions.cpp" line="968"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="971"/>
+ <location filename="modlistviewactions.cpp" line="973"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="981"/>
+ <location filename="modlistviewactions.cpp" line="983"/>
<source>Failed to create backup.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1023"/>
+ <location filename="modlistviewactions.cpp" line="1025"/>
<source>Restore all hidden files in the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1056"/>
- <location filename="modlistviewactions.cpp" line="1370"/>
+ <location filename="modlistviewactions.cpp" line="1058"/>
+ <location filename="modlistviewactions.cpp" line="1376"/>
<source>Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1057"/>
+ <location filename="modlistviewactions.cpp" line="1059"/>
<source>About to restore all hidden files in:
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1090"/>
+ <location filename="modlistviewactions.cpp" line="1092"/>
<source>Endorsing multiple mods will take a while. Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1252"/>
+ <location filename="modlistviewactions.cpp" line="1258"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1253"/>
+ <location filename="modlistviewactions.cpp" line="1259"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1257"/>
+ <location filename="modlistviewactions.cpp" line="1263"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1263"/>
+ <location filename="modlistviewactions.cpp" line="1269"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1282"/>
+ <location filename="modlistviewactions.cpp" line="1288"/>
<source>Move successful.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1301"/>
+ <location filename="modlistviewactions.cpp" line="1307"/>
<source>This will move all files from overwrite into a new, regular mod.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlistviewactions.cpp" line="1371"/>
+ <location filename="modlistviewactions.cpp" line="1377"/>
<source>About to recursively delete:
</source>
<translation type="unfinished"></translation>
@@ -5760,27 +5765,27 @@ Please enter a name:</source>
<context>
<name>NexusTab</name>
<message>
- <location filename="modinfodialognexus.cpp" line="150"/>
+ <location filename="modinfodialognexus.cpp" line="156"/>
<source>Current Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialognexus.cpp" line="153"/>
+ <location filename="modinfodialognexus.cpp" line="159"/>
<source>No update available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialognexus.cpp" line="185"/>
+ <location filename="modinfodialognexus.cpp" line="191"/>
<source>Tracked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialognexus.cpp" line="188"/>
+ <location filename="modinfodialognexus.cpp" line="194"/>
<source>Untracked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialognexus.cpp" line="301"/>
+ <location filename="modinfodialognexus.cpp" line="307"/>
<source>
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;p&gt;This mod does not have a valid Nexus ID. You can add a custom web
diff --git a/src/version.rc b/src/version.rc
index 0db83d44..aa92aee1 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -1,37 +1,24 @@
#include "Winver.h"
-// If VS_FF_PRERELEASE is not set, MO labels the build as a release and uses VER_FILEVERSION to determine version number.
-// Otherwise, if letters are used in VER_FILEVERSION_STR, uses the full MOBase::VersionInfo parser
-// Otherwise, uses the numbers from VER_FILEVERSION and sets the release type as pre-alpha
-#define VER_FILEVERSION 2,5,0
-#define VER_FILEVERSION_STR "2.5.0-beta7\0"
+// If VS_FF_PRERELEASE is not set, MO labels the build as a release and uses
+// VER_FILEVERSION to determine version number. Otherwise, if letters are used in
+// VER_FILEVERSION_STR, uses the full MOBase::VersionInfo parser Otherwise, uses the
+// numbers from VER_FILEVERSION and sets the release type as pre-alpha
+#define VER_FILEVERSION 2, 5, 0
+#define VER_FILEVERSION_STR "2.5.0-beta9\0"
-VS_VERSION_INFO VERSIONINFO
-FILEVERSION VER_FILEVERSION
-PRODUCTVERSION VER_FILEVERSION
-FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-FILEFLAGS VS_FF_PRERELEASE
-FILEOS VOS__WINDOWS32
-FILETYPE VFT_APP
-FILESUBTYPE (0)
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904B0"
- BEGIN
- VALUE "FileVersion", VER_FILEVERSION_STR
- VALUE "CompanyName", "Mod Organizer 2 Team\0"
- VALUE "FileDescription", "Mod Organizer 2 GUI\0"
- VALUE "OriginalFilename", "ModOrganizer.exe\0"
- VALUE "InternalName", "ModOrganizer2\0"
- VALUE "LegalCopyright", "Copyright 2011-2016 Sebastian Herbord\r\nCopyright 2016-2023 Mod Organizer 2 contributors\0"
- VALUE "ProductName", "Mod Organizer 2\0"
- VALUE "ProductVersion", VER_FILEVERSION_STR
- END
- END
+VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_FILEVERSION
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS VS_FF_PRERELEASE FILEOS VOS__WINDOWS32
+ FILETYPE VFT_APP FILESUBTYPE(0) BEGIN BLOCK
+ "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileVersion",
+ VER_FILEVERSION_STR VALUE "CompanyName",
+ "Mod Organizer 2 Team\0" VALUE "FileDescription",
+ "Mod Organizer 2 GUI\0" VALUE "OriginalFilename",
+ "ModOrganizer.exe\0" VALUE "InternalName", "ModOrganizer2\0" VALUE "LegalCopyright",
+ "Copyright 2011-2016 Sebastian Herbord\r\nCopyright 2016-2023 Mod Organizer 2 "
+ "contributors\0" VALUE "ProductName",
+ "Mod Organizer 2\0" VALUE "ProductVersion",
+ VER_FILEVERSION_STR END END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0409, 1200
- END
-END
+ BLOCK "VarFileInfo" BEGIN VALUE "Translation",
+ 0x0409, 1200 END END