Skip to content

Commit 024028a

Browse files
Add author and uploader columns to modlist and the ability to visit the uploader's profile
1 parent 95b9ab2 commit 024028a

21 files changed

+349
-35
lines changed

src/downloadlistview.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,18 @@ void DownloadListView::onCustomContextMenu(const QPoint& point)
231231
menu.addAction(tr("Install"), [=] {
232232
issueInstall(row);
233233
});
234-
if (m_Manager->isInfoIncomplete(row))
234+
if (m_Manager->isInfoIncomplete(row)) {
235235
menu.addAction(tr("Query Info"), [=] {
236236
issueQueryInfoMd5(row);
237237
});
238-
else
238+
} else {
239239
menu.addAction(tr("Visit on Nexus"), [=] {
240240
issueVisitOnNexus(row);
241241
});
242+
menu.addAction(tr("Visit the uploader's profile"), [=] {
243+
issueVisitUploaderProfile(row);
244+
});
245+
}
242246
menu.addAction(tr("Open File"), [=] {
243247
issueOpenFile(row);
244248
});
@@ -408,6 +412,11 @@ void DownloadListView::issueVisitOnNexus(int index)
408412
emit visitOnNexus(index);
409413
}
410414

415+
void DownloadListView::issueVisitUploaderProfile(int index)
416+
{
417+
emit visitUploaderProfile(index);
418+
}
419+
411420
void DownloadListView::issueOpenFile(int index)
412421
{
413422
emit openFile(index);

src/downloadlistview.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class DownloadListView : public QTreeView
8787
void pauseDownload(int index);
8888
void resumeDownload(int index);
8989
void visitOnNexus(int index);
90+
void visitUploaderProfile(int index);
9091
void openFile(int index);
9192
void openMetaFile(int index);
9293
void openInDownloadsFolder(int index);
@@ -105,6 +106,7 @@ private slots:
105106
void issueRestoreToView(int index);
106107
void issueRestoreToViewAll();
107108
void issueVisitOnNexus(int index);
109+
void issueVisitUploaderProfile(int index);
108110
void issueOpenFile(int index);
109111
void issueOpenMetaFile(int index);
110112
void issueOpenInDownloadsFolder(int index);

src/downloadmanager.cpp

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ DownloadManager::DownloadInfo::createFromMeta(const QString& filePath, bool show
148148
info->m_FileInfo->fileCategory = metaFile.value("fileCategory", 0).toInt();
149149
info->m_FileInfo->repository = metaFile.value("repository", "Nexus").toString();
150150
info->m_FileInfo->userData = metaFile.value("userData").toMap();
151+
info->m_FileInfo->author = metaFile.value("author", "").toString();
152+
info->m_FileInfo->uploader = metaFile.value("uploader", "").toString();
153+
info->m_FileInfo->uploaderUrl = metaFile.value("uploaderUrl", "").toString();
151154
info->m_Reply = nullptr;
152155

153156
return info;
@@ -1217,6 +1220,27 @@ void DownloadManager::visitOnNexus(int index)
12171220
}
12181221
}
12191222

1223+
void DownloadManager::visitUploaderProfile(int index)
1224+
{
1225+
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
1226+
reportError(tr("VisitUploaderProfile: invalid download index %1").arg(index));
1227+
return;
1228+
}
1229+
DownloadInfo* info = m_ActiveDownloads[index];
1230+
1231+
if (info->m_State < DownloadManager::STATE_READY) {
1232+
// UI shouldn't allow this
1233+
return;
1234+
}
1235+
1236+
const auto& uploaderUrl = info->m_FileInfo->uploaderUrl;
1237+
if (!uploaderUrl.isEmpty()) {
1238+
shell::Open(QUrl(uploaderUrl));
1239+
} else {
1240+
emit showMessage(tr("Uploader for this Mod is unknown"));
1241+
}
1242+
}
1243+
12201244
void DownloadManager::openFile(int index)
12211245
{
12221246
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
@@ -1724,6 +1748,9 @@ void DownloadManager::createMetaFile(DownloadInfo* info)
17241748
metaFile.setValue("category", info->m_FileInfo->categoryID);
17251749
metaFile.setValue("repository", info->m_FileInfo->repository);
17261750
metaFile.setValue("userData", info->m_FileInfo->userData);
1751+
metaFile.setValue("author", info->m_FileInfo->author);
1752+
metaFile.setValue("uploader", info->m_FileInfo->uploader);
1753+
metaFile.setValue("uploaderUrl", info->m_FileInfo->uploaderUrl);
17271754
metaFile.setValue("installed", info->m_State == DownloadManager::STATE_INSTALLED);
17281755
metaFile.setValue("uninstalled", info->m_State == DownloadManager::STATE_UNINSTALLED);
17291756
metaFile.setValue("paused", (info->m_State == DownloadManager::STATE_PAUSED) ||
@@ -1753,7 +1780,10 @@ void DownloadManager::nxmDescriptionAvailable(QString, int, QVariant userData,
17531780
DownloadInfo* info = downloadInfoByID(userData.toInt());
17541781
if (info == nullptr)
17551782
return;
1756-
info->m_FileInfo->categoryID = result["category_id"].toInt();
1783+
info->m_FileInfo->categoryID = result["category_id"].toInt();
1784+
info->m_FileInfo->author = result["author"].toString();
1785+
info->m_FileInfo->uploader = result["uploaded_by"].toString();
1786+
info->m_FileInfo->uploaderUrl = result["uploaded_users_profile_url"].toString();
17571787
QTextDocument doc;
17581788
doc.setHtml(result["name"].toString().trimmed());
17591789
info->m_FileInfo->modName = doc.toPlainText();
@@ -1813,7 +1843,10 @@ void DownloadManager::nxmFilesAvailable(QString, int, QVariant userData,
18131843
info->m_FileInfo->fileName = fileInfo["file_name"].toString();
18141844
info->m_FileInfo->description =
18151845
BBCode::convertToHTML(fileInfo["description"].toString());
1816-
found = true;
1846+
info->m_FileInfo->author = fileInfo["author"].toString();
1847+
info->m_FileInfo->uploader = fileInfo["uploader"].toString();
1848+
info->m_FileInfo->uploaderUrl = fileInfo["uploader_url"].toString();
1849+
found = true;
18171850
break;
18181851
}
18191852
}
@@ -2116,9 +2149,12 @@ void DownloadManager::nxmFileInfoFromMd5Available(QString gameName, QVariant use
21162149
info->m_FileInfo->version.parse(fileDetails["mod_version"].toString());
21172150
info->m_FileInfo->fileCategory = fileDetails["category_id"].toInt();
21182151

2119-
info->m_FileInfo->modID = modDetails["mod_id"].toInt();
2120-
info->m_FileInfo->modName = modDetails["name"].toString();
2121-
info->m_FileInfo->categoryID = modDetails["category_id"].toInt();
2152+
info->m_FileInfo->modID = modDetails["mod_id"].toInt();
2153+
info->m_FileInfo->modName = modDetails["name"].toString();
2154+
info->m_FileInfo->categoryID = modDetails["category_id"].toInt();
2155+
info->m_FileInfo->author = modDetails["author"].toString();
2156+
info->m_FileInfo->uploader = modDetails["uploaded_by"].toString();
2157+
info->m_FileInfo->uploaderUrl = modDetails["uploaded_users_profile_url"].toString();
21222158

21232159
QString gameShortName = gameName;
21242160
QStringList games(m_ManagedGame->validShortNames());

src/downloadmanager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,8 @@ public slots:
503503

504504
void visitOnNexus(int index);
505505

506+
void visitUploaderProfile(int index);
507+
506508
void openFile(int index);
507509

508510
void openMetaFile(int index);

src/downloadstab.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ DownloadsTab::DownloadsTab(OrganizerCore& core, Ui::MainWindow* mwui)
3737
SLOT(queryInfoMd5(int)));
3838
connect(ui.list, SIGNAL(visitOnNexus(int)), m_core.downloadManager(),
3939
SLOT(visitOnNexus(int)));
40+
connect(ui.list, SIGNAL(visitUploaderProfile(int)), m_core.downloadManager(),
41+
SLOT(visitUploaderProfile(int)));
4042
connect(ui.list, SIGNAL(openFile(int)), m_core.downloadManager(),
4143
SLOT(openFile(int)));
4244
connect(ui.list, SIGNAL(openMetaFile(int)), m_core.downloadManager(),

src/mainwindow.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3357,6 +3357,12 @@ void MainWindow::nxmModInfoAvailable(QString gameName, int modID, QVariant userD
33573357

33583358
mod->setNexusCategory(result["category_id"].toInt());
33593359

3360+
mod->setAuthor(result["author"].toString());
3361+
3362+
mod->setUploader(result["uploaded_by"].toString());
3363+
3364+
mod->setUploaderUrl(result["uploaded_users_profile_url"].toString());
3365+
33603366
if ((mod->endorsedState() != EndorsedState::ENDORSED_NEVER) &&
33613367
(result.contains("endorsement"))) {
33623368
QVariantMap endorsement = result["endorsement"].toMap();

src/modinfo.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,21 @@ class ModInfo : public QObject, public MOBase::IModInterface
351351
*/
352352
virtual QStringList categories() const override;
353353

354+
/**
355+
* @return the author of the mod.
356+
*/
357+
virtual QString author() const = 0;
358+
359+
/**
360+
* @return the name of the uploader of this mod.
361+
*/
362+
virtual QString uploader() const = 0;
363+
364+
/**
365+
* @return the URL of the uploader of this mod's profile.
366+
*/
367+
virtual QString uploaderUrl() const = 0;
368+
354369
/**
355370
* @return the tracked state of this mod.
356371
*/
@@ -486,6 +501,21 @@ class ModInfo : public QObject, public MOBase::IModInterface
486501
*/
487502
virtual bool setName(const QString& name) = 0;
488503

504+
/**
505+
* @brief Set the author of the mod.
506+
*/
507+
virtual void setAuthor(const QString& author) = 0;
508+
509+
/**
510+
* @brief Set the name of the uploader of this mod.
511+
*/
512+
virtual void setUploader(const QString& uploader) = 0;
513+
514+
/**
515+
* @brief Set the URL of the uploader of this mod's profile.
516+
*/
517+
virtual void setUploaderUrl(const QString& uploaderUrl) = 0;
518+
489519
public: // Methods after this do not come from IModInterface:
490520
/**
491521
* @return true if this mod is empty, false otherwise.

src/modinfobackup.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ class ModInfoBackup : public ModInfoRegular
4040
virtual QString getNexusDescription() const override { return QString(); }
4141
virtual void setNexusCategory(int) override {}
4242
virtual int getNexusCategory() const override { return 0; }
43+
virtual QString author() const override { return QString(); }
44+
virtual void setAuthor(const QString&) override {}
45+
virtual QString uploader() const override { return QString(); }
46+
virtual void setUploader(const QString&) override {}
47+
virtual QString uploaderUrl() const override { return QString(); }
48+
virtual void setUploaderUrl(const QString&) override {}
4349
virtual bool isBackup() const override { return true; }
4450

4551
virtual void addInstalledFile(int, int) override {}

src/modinfoforeign.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ class ModInfoForeign : public ModInfoWithConflictInfo
6767
virtual QDateTime getNexusLastModified() const override { return QDateTime(); }
6868
virtual void setNexusLastModified(QDateTime) override {}
6969
virtual QString getNexusDescription() const override { return QString(); }
70+
virtual QString author() const override { return QString(); }
71+
virtual void setAuthor(const QString&) override {}
72+
virtual QString uploader() const override { return QString(); }
73+
virtual void setUploader(const QString&) override {}
74+
virtual QString uploaderUrl() const override { return QString(); }
75+
virtual void setUploaderUrl(const QString&) override {}
7076
virtual QStringList archives(bool = false) override { return m_Archives; }
7177
virtual QStringList stealFiles() const override
7278
{

src/modinfooverwrite.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class ModInfoOverwrite : public ModInfoWithConflictInfo
7070
virtual QString getNexusDescription() const override { return QString(); }
7171
virtual void setNexusCategory(int) override {}
7272
virtual int getNexusCategory() const override { return 0; }
73+
virtual QString author() const override { return QString(); }
74+
virtual void setAuthor(const QString&) override {}
75+
virtual QString uploader() const override { return QString(); }
76+
virtual void setUploader(const QString&) override {}
77+
virtual QString uploaderUrl() const override { return QString(); }
78+
virtual void setUploaderUrl(const QString&) override {}
7379
virtual QStringList archives(bool checkOnDisk = false) override;
7480
virtual void addInstalledFile(int, int) override {}
7581
virtual std::set<std::pair<int, int>> installedFiles() const override { return {}; }

0 commit comments

Comments
 (0)