From 8c0b309bdee2527fab66b00b34171ef18f5055bf Mon Sep 17 00:00:00 2001 From: Tannin Date: Fri, 25 Oct 2013 14:49:42 +0200 Subject: - Option to choose edition of the game. Currently only relevant for FO3 because FO3 GOTY is its own app - applications that aren't in the executables list can again be started from the command line - references to missing categories are now removed from mods - bugfix: integrated fomod installer didn't update description and picture on some constellations of Windows version and theme --- src/shared/oblivioninfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/shared/oblivioninfo.cpp') diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp index 7c6d5cbb..b3e65e59 100644 --- a/src/shared/oblivioninfo.cpp +++ b/src/shared/oblivioninfo.cpp @@ -243,7 +243,7 @@ std::wstring OblivionInfo::getOMODExt() } -std::wstring OblivionInfo::getSteamAPPId() +std::wstring OblivionInfo::getSteamAPPId(int) const { return L"22330"; } -- cgit v1.3.1 From 469cc2d945afebb1291a825339642b5e95f0e223 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 7 Dec 2013 12:48:18 +0100 Subject: - download manager now saves the file times on nexus, for potential later use in version check - nexus interface now supports 301 redirects - now using the new nexus url format - bugfix: "visit on nexus" used an outdated url scheme and thus caused unnecessary redirection --- src/downloadmanager.cpp | 26 ++++++++++++++++--- src/downloadmanager.h | 5 ++++ src/mainwindow.cpp | 2 +- src/nexusinterface.cpp | 59 ++++++++++++++++++++++++++------------------ src/nexusinterface.h | 7 +++--- src/shared/fallout3info.cpp | 4 +-- src/shared/fallout3info.h | 1 + src/shared/falloutnvinfo.cpp | 4 +-- src/shared/falloutnvinfo.h | 1 + src/shared/gameinfo.h | 1 + src/shared/oblivioninfo.cpp | 4 +-- src/shared/oblivioninfo.h | 1 + src/shared/skyriminfo.cpp | 4 +-- src/shared/skyriminfo.h | 1 + 14 files changed, 80 insertions(+), 40 deletions(-) (limited to 'src/shared/oblivioninfo.cpp') diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index 779b052c..48484d24 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -153,7 +153,8 @@ QString DownloadManager::DownloadInfo::currentURL() DownloadManager::DownloadManager(NexusInterface *nexusInterface, QObject *parent) - : IDownloadManager(parent), m_NexusInterface(nexusInterface), m_DirWatcher(), m_ShowHidden(false) + : IDownloadManager(parent), m_NexusInterface(nexusInterface), m_DirWatcher(), m_ShowHidden(false), + m_DateExpression("/Date\\((\\d+)\\)/") { connect(&m_DirWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChanged(QString))); } @@ -851,7 +852,6 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) setState(info, STATE_PAUSED); } else { if (bytesTotal > info->m_TotalSize) { - qDebug("file size %s: %lld", qPrintable(info->m_FileName), bytesTotal); info->m_TotalSize = bytesTotal; } int oldProgress = info->m_Progress; @@ -883,6 +883,7 @@ void DownloadManager::createMetaFile(DownloadInfo *info) metaFile.setValue("name", info->m_NexusInfo.m_Name); metaFile.setValue("modName", info->m_NexusInfo.m_ModName); metaFile.setValue("version", info->m_NexusInfo.m_Version); + metaFile.setValue("fileTime", info->m_NexusInfo.m_FileTime); metaFile.setValue("fileCategory", info->m_NexusInfo.m_FileCategory); metaFile.setValue("newestVersion", info->m_NexusInfo.m_NewestVersion); metaFile.setValue("category", info->m_NexusInfo.m_Category); @@ -914,11 +915,9 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r DownloadInfo *info = downloadInfoByID(userData.toInt()); if (info == NULL) return; - info->m_NexusInfo.m_Category = result["category_id"].toInt(); info->m_NexusInfo.m_ModName = result["name"].toString().trimmed(); info->m_NexusInfo.m_NewestVersion = result["version"].toString(); - if (info->m_FileID != 0) { setState(info, STATE_READY); } else { @@ -927,6 +926,17 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r } +QDateTime DownloadManager::matchDate(const QString &timeString) +{ + if (m_DateExpression.exactMatch(timeString)) { + return QDateTime::fromMSecsSinceEpoch(m_DateExpression.cap(1).toLongLong()); + } else { + qWarning("date not matched: %s", qPrintable(timeString)); + return QDateTime::currentDateTime(); + } +} + + void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultData, int requestID) { std::set::iterator idIter = m_RequestIDs.find(requestID); @@ -960,7 +970,11 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD (fileNameVariant == info->m_FileName) || (fileNameVariant == alternativeLocalName)) { info->m_NexusInfo.m_Name = fileInfo["name"].toString(); info->m_NexusInfo.m_Version = fileInfo["version"].toString(); + if (info->m_NexusInfo.m_Version.isEmpty()) { + info->m_NexusInfo.m_Version = info->m_NexusInfo.m_NewestVersion; + } info->m_NexusInfo.m_FileCategory = fileInfo["category_id"].toInt(); + info->m_NexusInfo.m_FileTime = matchDate(fileInfo["date"].toString()); info->m_FileID = fileInfo["id"].toInt(); found = true; break; @@ -1014,7 +1028,11 @@ void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant userD info.m_Name = result["name"].toString(); info.m_Version = result["version"].toString(); + if (info.m_Version.isEmpty()) { + info.m_Version = info.m_NewestVersion; + } info.m_FileName = result["uri"].toString(); + info.m_FileTime = matchDate(result["date"].toString()); if (userData.isValid()) { m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, qVariantFromValue(info), userData.toString())); diff --git a/src/downloadmanager.h b/src/downloadmanager.h index e82ea064..099e6084 100644 --- a/src/downloadmanager.h +++ b/src/downloadmanager.h @@ -46,6 +46,7 @@ struct NexusInfo { QString m_NewestVersion; QString m_FileName; QVariantList m_DownloadMap; + QDateTime m_FileTime; bool m_Set; }; Q_DECLARE_METATYPE(NexusInfo) @@ -437,6 +438,8 @@ private: DownloadInfo *downloadInfoByID(unsigned int id); + QDateTime matchDate(const QString &timeString); + private: static const int AUTOMATIC_RETRIES = 3; @@ -458,6 +461,8 @@ private: bool m_ShowHidden; + QRegExp m_DateExpression; + }; #endif // DOWNLOADMANAGER_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d5330017..cca10279 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3214,7 +3214,7 @@ void MainWindow::visitOnNexus_clicked() { int modID = m_ModList.data(m_ModList.index(m_ContextRow, 0), Qt::UserRole).toInt(); if (modID > 0) { - nexusLinkActivated(QString("%1/downloads/file.php?id=%2").arg(ToQString(GameInfo::instance().getNexusPage())).arg(modID)); + nexusLinkActivated(QString("%1/mods/%2").arg(ToQString(GameInfo::instance().getNexusPage())).arg(modID)); } else { MessageDialog::showMessage(tr("Nexus ID for this Mod is unknown"), this); } diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp index 6a4ae046..6b5cf19c 100644 --- a/src/nexusinterface.cpp +++ b/src/nexusinterface.cpp @@ -380,29 +380,33 @@ void NexusInterface::nextRequest() info.m_Timeout->setInterval(60000); QString url; - switch (info.m_Type) { - case NXMRequestInfo::TYPE_DESCRIPTION: { - url = QString("%1/Mods/%2/").arg(info.m_URL).arg(info.m_ModID); - } break; - case NXMRequestInfo::TYPE_FILES: { - url = QString("%1/Files/indexfrommod/%2/").arg(info.m_URL).arg(info.m_ModID); - } break; - case NXMRequestInfo::TYPE_FILEINFO: { - url = QString("%1/Files/%2/").arg(info.m_URL).arg(info.m_FileID); - } break; - case NXMRequestInfo::TYPE_DOWNLOADURL: { - url = QString("%1/Files/download/%2").arg(info.m_URL).arg(info.m_FileID); - } break; - case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: { - url = QString("%1/Mods/toggleendorsement/%2?lvote=%3").arg(info.m_URL).arg(info.m_ModID).arg(!info.m_Endorse); - } break; - case NXMRequestInfo::TYPE_GETUPDATES: { - QString modIDList = VectorJoin(info.m_ModIDList, ","); - modIDList = "[" + modIDList + "]"; - url = QString("%1/Mods/GetUpdates?ModList=%2").arg(info.m_URL).arg(modIDList); - } break; + if (!info.m_Reroute) { + switch (info.m_Type) { + case NXMRequestInfo::TYPE_DESCRIPTION: { + url = QString("%1/Mods/%2/").arg(info.m_URL).arg(info.m_ModID); + } break; + case NXMRequestInfo::TYPE_FILES: { + url = QString("%1/Files/indexfrommod/%2/").arg(info.m_URL).arg(info.m_ModID); + } break; + case NXMRequestInfo::TYPE_FILEINFO: { + url = QString("%1/Files/%2/").arg(info.m_URL).arg(info.m_FileID); + } break; + case NXMRequestInfo::TYPE_DOWNLOADURL: { + url = QString("%1/Files/download/%2").arg(info.m_URL).arg(info.m_FileID); + } break; + case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: { + url = QString("%1/Mods/toggleendorsement/%2?lvote=%3").arg(info.m_URL).arg(info.m_ModID).arg(!info.m_Endorse); + } break; + case NXMRequestInfo::TYPE_GETUPDATES: { + QString modIDList = VectorJoin(info.m_ModIDList, ","); + modIDList = "[" + modIDList + "]"; + url = QString("%1/Mods/GetUpdates?ModList=%2").arg(info.m_URL).arg(modIDList); + } break; + } + url.append(QString("?game_id=%1").arg(GameInfo::instance().getNexusGameID())); + } else { + url = info.m_URL; } - QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/xml"); request.setRawHeader("User-Agent", @@ -433,13 +437,21 @@ void NexusInterface::requestFinished(std::list::iterator iter) qWarning("request failed: %s", reply->errorString().toUtf8().constData()); emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, reply->errorString()); } else { + int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if (statusCode == 301) { + // redirect request, return request to queue + iter->m_URL = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toString(); + iter->m_Reroute = true; + m_RequestQueue.enqueue(*iter); + nextRequest(); + return; + } QByteArray data = reply->readAll(); if (data.isNull() || data.isEmpty() || (strcmp(data.constData(), "null") == 0)) { QString nexusError(reply->rawHeader("NexusErrorInfo")); if (nexusError.length() == 0) { nexusError = tr("empty response"); } - emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, nexusError); } else { bool ok; @@ -509,7 +521,6 @@ void NexusInterface::requestTimeout() qWarning("invalid sender type"); return; } - qWarning("request timeout"); for (std::list::iterator iter = m_ActiveRequest.begin(); iter != m_ActiveRequest.end(); ++iter) { if (iter->m_Timeout == timer) { // this abort causes a "request failed" which cleans up the rest diff --git a/src/nexusinterface.h b/src/nexusinterface.h index da5fe02a..e7a01b0f 100644 --- a/src/nexusinterface.h +++ b/src/nexusinterface.h @@ -270,18 +270,19 @@ private: QVariant m_UserData; QTimer *m_Timeout; QString m_URL; + bool m_Reroute; int m_ID; int m_Endorse; NXMRequestInfo(int modID, Type type, QVariant userData, const QString &url) : m_ModID(modID), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData), - m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} + m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} NXMRequestInfo(std::vector modIDList, Type type, QVariant userData, const QString &url) : m_ModID(-1), m_ModIDList(modIDList), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData), - m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} + m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} NXMRequestInfo(int modID, int fileID, Type type, QVariant userData, const QString &url) : m_ModID(modID), m_FileID(fileID), m_Reply(NULL), m_Type(type), m_UserData(userData), - m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} + m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} private: static QAtomicInt s_NextID; diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp index c673fa1b..864a67be 100644 --- a/src/shared/fallout3info.cpp +++ b/src/shared/fallout3info.cpp @@ -155,13 +155,13 @@ std::wstring Fallout3Info::getSEName() std::wstring Fallout3Info::getNexusPage() { - return L"http://fallout3.nexusmods.com"; + return L"http://www.nexusmods.com/fallout3"; } std::wstring Fallout3Info::getNexusInfoUrlStatic() { - return L"http://fallout3.nexusmods.com"; + return L"http://www.nexusmods.com/fallout3"; } diff --git a/src/shared/fallout3info.h b/src/shared/fallout3info.h index 0fa97d41..4bcb9d37 100644 --- a/src/shared/fallout3info.h +++ b/src/shared/fallout3info.h @@ -76,6 +76,7 @@ public: virtual std::wstring getNexusInfoUrl() { return Fallout3Info::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); virtual int getNexusModID() { return Fallout3Info::getNexusModIDStatic(); } + virtual int getNexusGameID() { return 120; } virtual void createProfile(const std::wstring &directory, bool useDefaults); virtual void repairProfile(const std::wstring &directory); diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp index 7d7f0098..8df9607d 100644 --- a/src/shared/falloutnvinfo.cpp +++ b/src/shared/falloutnvinfo.cpp @@ -209,13 +209,13 @@ std::wstring FalloutNVInfo::getSEName() std::wstring FalloutNVInfo::getNexusPage() { - return L"http://newvegas.nexusmods.com"; + return L"http://www.nexusmods.com/newvegas"; } std::wstring FalloutNVInfo::getNexusInfoUrlStatic() { - return L"http://newvegas.nexusmods.com"; + return L"http://www.nexusmods.com/newvegas"; } diff --git a/src/shared/falloutnvinfo.h b/src/shared/falloutnvinfo.h index 3960c951..e25d2e02 100644 --- a/src/shared/falloutnvinfo.h +++ b/src/shared/falloutnvinfo.h @@ -77,6 +77,7 @@ public: virtual std::wstring getNexusInfoUrl() { return FalloutNVInfo::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); virtual int getNexusModID() { return FalloutNVInfo::getNexusModIDStatic(); } + virtual int getNexusGameID() { return 130; } virtual void createProfile(const std::wstring &directory, bool useDefaults); virtual void repairProfile(const std::wstring &directory); diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h index 0221dd1b..d517fc1b 100644 --- a/src/shared/gameinfo.h +++ b/src/shared/gameinfo.h @@ -145,6 +145,7 @@ public: virtual std::wstring getNexusPage() = 0; virtual std::wstring getNexusInfoUrl() = 0; virtual int getNexusModID() = 0; + virtual int getNexusGameID() = 0; // clone relevant files to the specified directory virtual void createProfile(const std::wstring &directory, bool useDefaults) = 0; diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp index b3e65e59..1438de0a 100644 --- a/src/shared/oblivioninfo.cpp +++ b/src/shared/oblivioninfo.cpp @@ -191,13 +191,13 @@ std::wstring OblivionInfo::getSEName() std::wstring OblivionInfo::getNexusPage() { - return L"http://oblivion.nexusmods.com"; + return L"http://www.nexusmods.com/oblivion"; } std::wstring OblivionInfo::getNexusInfoUrlStatic() { - return L"http://oblivion.nexusmods.com"; + return L"http://www.nexusmods.com/oblivion"; } diff --git a/src/shared/oblivioninfo.h b/src/shared/oblivioninfo.h index 6a9f56ca..dfa53575 100644 --- a/src/shared/oblivioninfo.h +++ b/src/shared/oblivioninfo.h @@ -73,6 +73,7 @@ public: virtual std::wstring getNexusInfoUrl() { return OblivionInfo::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); virtual int getNexusModID() { return OblivionInfo::getNexusModIDStatic(); } + virtual int getNexusGameID() { return 101; } virtual void createProfile(const std::wstring &directory, bool useDefaults); virtual void repairProfile(const std::wstring &directory); diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp index 0a0dd98d..a8b9a433 100644 --- a/src/shared/skyriminfo.cpp +++ b/src/shared/skyriminfo.cpp @@ -183,13 +183,13 @@ std::wstring SkyrimInfo::getSEName() std::wstring SkyrimInfo::getNexusPage() { - return L"http://skyrim.nexusmods.com"; + return L"http://www.nexusmods.com/skyrim"; } std::wstring SkyrimInfo::getNexusInfoUrlStatic() { - return L"http://skyrim.nexusmods.com"; + return L"http://www.nexusmods.com/skyrim"; } diff --git a/src/shared/skyriminfo.h b/src/shared/skyriminfo.h index ae5ab81f..7da523a1 100644 --- a/src/shared/skyriminfo.h +++ b/src/shared/skyriminfo.h @@ -81,6 +81,7 @@ public: virtual std::wstring getNexusInfoUrl() { return SkyrimInfo::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); virtual int getNexusModID() { return SkyrimInfo::getNexusModIDStatic(); } + virtual int getNexusGameID() { return 110; } virtual void createProfile(const std::wstring &directory, bool useDefaults); virtual void repairProfile(const std::wstring &directory); -- cgit v1.3.1 From 340edcfbcab81ad7b2fac03cb724fb4d947d0d1d Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 7 Dec 2013 17:13:36 +0100 Subject: - returned to default branch - nexus interface will now use the nmm url - nmm importer no longer cancels on a missing non-essential flag --- src/shared/fallout3info.cpp | 4 ++-- src/shared/falloutnvinfo.cpp | 4 ++-- src/shared/oblivioninfo.cpp | 4 ++-- src/shared/skyriminfo.cpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/shared/oblivioninfo.cpp') diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp index 864a67be..cc90d6fa 100644 --- a/src/shared/fallout3info.cpp +++ b/src/shared/fallout3info.cpp @@ -155,13 +155,13 @@ std::wstring Fallout3Info::getSEName() std::wstring Fallout3Info::getNexusPage() { - return L"http://www.nexusmods.com/fallout3"; + return L"http://nmm.nexusmods.com/fallout3"; } std::wstring Fallout3Info::getNexusInfoUrlStatic() { - return L"http://www.nexusmods.com/fallout3"; + return L"http://nmm.nexusmods.com/fallout3"; } diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp index 8df9607d..abff9323 100644 --- a/src/shared/falloutnvinfo.cpp +++ b/src/shared/falloutnvinfo.cpp @@ -209,13 +209,13 @@ std::wstring FalloutNVInfo::getSEName() std::wstring FalloutNVInfo::getNexusPage() { - return L"http://www.nexusmods.com/newvegas"; + return L"http://nmm.nexusmods.com/newvegas"; } std::wstring FalloutNVInfo::getNexusInfoUrlStatic() { - return L"http://www.nexusmods.com/newvegas"; + return L"http://nmm.nexusmods.com/newvegas"; } diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp index 1438de0a..c84f8b88 100644 --- a/src/shared/oblivioninfo.cpp +++ b/src/shared/oblivioninfo.cpp @@ -191,13 +191,13 @@ std::wstring OblivionInfo::getSEName() std::wstring OblivionInfo::getNexusPage() { - return L"http://www.nexusmods.com/oblivion"; + return L"http://nmm.nexusmods.com/oblivion"; } std::wstring OblivionInfo::getNexusInfoUrlStatic() { - return L"http://www.nexusmods.com/oblivion"; + return L"http://nmm.nexusmods.com/oblivion"; } diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp index a8b9a433..38b2cf37 100644 --- a/src/shared/skyriminfo.cpp +++ b/src/shared/skyriminfo.cpp @@ -183,13 +183,13 @@ std::wstring SkyrimInfo::getSEName() std::wstring SkyrimInfo::getNexusPage() { - return L"http://www.nexusmods.com/skyrim"; + return L"http://nmm.nexusmods.com/skyrim"; } std::wstring SkyrimInfo::getNexusInfoUrlStatic() { - return L"http://www.nexusmods.com/skyrim"; + return L"http://nmm.nexusmods.com/skyrim"; } -- cgit v1.3.1 From 9ee90a35dc3ebdbc76b18cbeb72995345ee37052 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 8 Dec 2013 14:16:25 +0100 Subject: - MO now applies a minimum to the nmm-compatibility field. - bugfix: "visit on nexus" directed the browser to the servers meant for nmm - bugfix: url for "check all for updates" and "enorse/unendorse" were not constructed correctly --- src/mainwindow.cpp | 2 +- src/nexusinterface.cpp | 5 ++++- src/settings.cpp | 13 +++++++++---- src/shared/fallout3info.cpp | 8 ++++++-- src/shared/fallout3info.h | 2 +- src/shared/falloutnvinfo.cpp | 8 ++++++-- src/shared/falloutnvinfo.h | 2 +- src/shared/gameinfo.h | 2 +- src/shared/oblivioninfo.cpp | 8 ++++++-- src/shared/oblivioninfo.h | 2 +- src/shared/skyriminfo.cpp | 8 ++++++-- src/shared/skyriminfo.h | 2 +- src/version.rc | 4 ++-- 13 files changed, 45 insertions(+), 21 deletions(-) (limited to 'src/shared/oblivioninfo.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b435cda0..17f2de09 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3215,7 +3215,7 @@ void MainWindow::visitOnNexus_clicked() { int modID = m_ModList.data(m_ModList.index(m_ContextRow, 0), Qt::UserRole).toInt(); if (modID > 0) { - nexusLinkActivated(QString("%1/mods/%2").arg(ToQString(GameInfo::instance().getNexusPage())).arg(modID)); + nexusLinkActivated(QString("%1/mods/%2").arg(ToQString(GameInfo::instance().getNexusPage(false))).arg(modID)); } else { MessageDialog::showMessage(tr("Nexus ID for this Mod is unknown"), this); } diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp index 6b5cf19c..309915aa 100644 --- a/src/nexusinterface.cpp +++ b/src/nexusinterface.cpp @@ -381,6 +381,7 @@ void NexusInterface::nextRequest() QString url; if (!info.m_Reroute) { + bool hasParams = false; switch (info.m_Type) { case NXMRequestInfo::TYPE_DESCRIPTION: { url = QString("%1/Mods/%2/").arg(info.m_URL).arg(info.m_ModID); @@ -396,14 +397,16 @@ void NexusInterface::nextRequest() } break; case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: { url = QString("%1/Mods/toggleendorsement/%2?lvote=%3").arg(info.m_URL).arg(info.m_ModID).arg(!info.m_Endorse); + hasParams = true; } break; case NXMRequestInfo::TYPE_GETUPDATES: { QString modIDList = VectorJoin(info.m_ModIDList, ","); modIDList = "[" + modIDList + "]"; url = QString("%1/Mods/GetUpdates?ModList=%2").arg(info.m_URL).arg(modIDList); + hasParams = true; } break; } - url.append(QString("?game_id=%1").arg(GameInfo::instance().getNexusGameID())); + url.append(QString("%1game_id=%2").arg(hasParams ? '&' : '?').arg(GameInfo::instance().getNexusGameID())); } else { url = info.m_URL; } diff --git a/src/settings.cpp b/src/settings.cpp index 144049aa..8086672a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -214,7 +214,12 @@ QString Settings::getModDirectory() const QString Settings::getNMMVersion() const { - return m_Settings.value("Settings/nmm_version", "0.34.0").toString(); + static const QString MIN_NMM_VERSION = "0.46.0"; + QString result = m_Settings.value("Settings/nmm_version", MIN_NMM_VERSION).toString(); + if (VersionInfo(result) < VersionInfo(MIN_NMM_VERSION)) { + result = MIN_NMM_VERSION; + } + return result; } bool Settings::getNexusLogin(QString &username, QString &password) const @@ -583,9 +588,9 @@ void Settings::query(QWidget *parent) downloadDirEdit->setText(getDownloadDirectory()); modDirEdit->setText(getModDirectory()); cacheDirEdit->setText(getCacheDirectory()); - offlineBox->setChecked(m_Settings.value("Settings/offline_mode", false).toBool()); - proxyBox->setChecked(m_Settings.value("Settings/use_proxy", false).toBool()); - nmmVersionEdit->setText(m_Settings.value("Settings/nmm_version", "0.33.1").toString()); + offlineBox->setChecked(offlineMode()); + proxyBox->setChecked(useProxy()); + nmmVersionEdit->setText(getNMMVersion()); logLevelBox->setCurrentIndex(logLevel()); // display plugin settings diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp index cc90d6fa..1808d1d9 100644 --- a/src/shared/fallout3info.cpp +++ b/src/shared/fallout3info.cpp @@ -153,9 +153,13 @@ std::wstring Fallout3Info::getSEName() } -std::wstring Fallout3Info::getNexusPage() +std::wstring Fallout3Info::getNexusPage(bool nmmScheme) { - return L"http://nmm.nexusmods.com/fallout3"; + if (nmmScheme) { + return L"http://nmm.nexusmods.com/fallout3"; + } else { + return L"http://www.nexusmods.com/fallout3"; + } } diff --git a/src/shared/fallout3info.h b/src/shared/fallout3info.h index 4bcb9d37..9575103b 100644 --- a/src/shared/fallout3info.h +++ b/src/shared/fallout3info.h @@ -71,7 +71,7 @@ public: virtual std::wstring getSEName(); - virtual std::wstring getNexusPage(); + virtual std::wstring getNexusPage(bool nmmScheme = true); static std::wstring getNexusInfoUrlStatic(); virtual std::wstring getNexusInfoUrl() { return Fallout3Info::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp index abff9323..e7e747e2 100644 --- a/src/shared/falloutnvinfo.cpp +++ b/src/shared/falloutnvinfo.cpp @@ -207,9 +207,13 @@ std::wstring FalloutNVInfo::getSEName() } -std::wstring FalloutNVInfo::getNexusPage() +std::wstring FalloutNVInfo::getNexusPage(bool nmmScheme) { - return L"http://nmm.nexusmods.com/newvegas"; + if (nmmScheme) { + return L"http://nmm.nexusmods.com/newvegas"; + } else { + return L"http://www.nexusmods.com/newvegas"; + } } diff --git a/src/shared/falloutnvinfo.h b/src/shared/falloutnvinfo.h index e25d2e02..8767fdb0 100644 --- a/src/shared/falloutnvinfo.h +++ b/src/shared/falloutnvinfo.h @@ -72,7 +72,7 @@ public: virtual std::wstring getSEName(); - virtual std::wstring getNexusPage(); + virtual std::wstring getNexusPage(bool nmmScheme = true); static std::wstring getNexusInfoUrlStatic(); virtual std::wstring getNexusInfoUrl() { return FalloutNVInfo::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h index d517fc1b..10775e6c 100644 --- a/src/shared/gameinfo.h +++ b/src/shared/gameinfo.h @@ -142,7 +142,7 @@ public: virtual std::wstring getSEName() = 0; - virtual std::wstring getNexusPage() = 0; + virtual std::wstring getNexusPage(bool nmmScheme = true) = 0; virtual std::wstring getNexusInfoUrl() = 0; virtual int getNexusModID() = 0; virtual int getNexusGameID() = 0; diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp index c84f8b88..d8daa0f7 100644 --- a/src/shared/oblivioninfo.cpp +++ b/src/shared/oblivioninfo.cpp @@ -189,9 +189,13 @@ std::wstring OblivionInfo::getSEName() } -std::wstring OblivionInfo::getNexusPage() +std::wstring OblivionInfo::getNexusPage(bool nmmScheme) { - return L"http://nmm.nexusmods.com/oblivion"; + if (nmmScheme) { + return L"http://nmm.nexusmods.com/oblivion"; + } else { + return L"http://www.nexusmods.com/oblivion"; + } } diff --git a/src/shared/oblivioninfo.h b/src/shared/oblivioninfo.h index dfa53575..ba27aa40 100644 --- a/src/shared/oblivioninfo.h +++ b/src/shared/oblivioninfo.h @@ -68,7 +68,7 @@ public: virtual std::wstring getSEName(); - virtual std::wstring getNexusPage(); + virtual std::wstring getNexusPage(bool nmmScheme = true); static std::wstring getNexusInfoUrlStatic(); virtual std::wstring getNexusInfoUrl() { return OblivionInfo::getNexusInfoUrlStatic(); } static int getNexusModIDStatic(); diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp index 38b2cf37..1620bcc3 100644 --- a/src/shared/skyriminfo.cpp +++ b/src/shared/skyriminfo.cpp @@ -181,9 +181,13 @@ std::wstring SkyrimInfo::getSEName() } -std::wstring SkyrimInfo::getNexusPage() +std::wstring SkyrimInfo::getNexusPage(bool nmmScheme) { - return L"http://nmm.nexusmods.com/skyrim"; + if (nmmScheme) { + return L"http://nmm.nexusmods.com/skyrim"; + } else { + return L"http://www.nexusmods.com/skyrim"; + } } diff --git a/src/shared/skyriminfo.h b/src/shared/skyriminfo.h index 7da523a1..438beb41 100644 --- a/src/shared/skyriminfo.h +++ b/src/shared/skyriminfo.h @@ -75,7 +75,7 @@ public: virtual std::wstring getSEName(); - virtual std::wstring getNexusPage(); + virtual std::wstring getNexusPage(bool nmmScheme = true); static std::wstring getNexusInfoUrlStatic(); virtual std::wstring getNexusInfoUrl() { return SkyrimInfo::getNexusInfoUrlStatic(); } diff --git a/src/version.rc b/src/version.rc index b91dce85..811ee7ca 100644 --- a/src/version.rc +++ b/src/version.rc @@ -1,7 +1,7 @@ #include "Winver.h" -#define VER_FILEVERSION 1,0,10,0 -#define VER_FILEVERSION_STR "1,0,10,0\0" +#define VER_FILEVERSION 1,0,11,0 +#define VER_FILEVERSION_STR "1,0,11,0\0" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION -- cgit v1.3.1