summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2013-10-25 14:49:42 +0200
committerTannin <devnull@localhost>2013-10-25 14:49:42 +0200
commit8c0b309bdee2527fab66b00b34171ef18f5055bf (patch)
tree9e0d4000573046df8ae7e060b665365f71ed74a6 /src
parentbc7c42dbe8dd85a77a2eb8c1d094c77aa5cb7b1f (diff)
- 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
Diffstat (limited to 'src')
-rw-r--r--src/ModOrganizer.pro20
-rw-r--r--src/main.cpp21
-rw-r--r--src/mainwindow.cpp2
-rw-r--r--src/modinfo.cpp1
-rw-r--r--src/modlist.cpp14
-rw-r--r--src/settings.cpp2
-rw-r--r--src/shared/fallout3info.cpp11
-rw-r--r--src/shared/fallout3info.h3
-rw-r--r--src/shared/falloutnvinfo.cpp2
-rw-r--r--src/shared/falloutnvinfo.h2
-rw-r--r--src/shared/gameinfo.cpp6
-rw-r--r--src/shared/gameinfo.h3
-rw-r--r--src/shared/oblivioninfo.cpp2
-rw-r--r--src/shared/oblivioninfo.h2
-rw-r--r--src/shared/skyriminfo.cpp2
-rw-r--r--src/shared/skyriminfo.h2
-rw-r--r--src/version.rc4
17 files changed, 70 insertions, 29 deletions
diff --git a/src/ModOrganizer.pro b/src/ModOrganizer.pro
index c8bfe6df..f35958f8 100644
--- a/src/ModOrganizer.pro
+++ b/src/ModOrganizer.pro
@@ -3,21 +3,21 @@ CONFIG += ordered
SUBDIRS = bsatk \
- shared \
- uibase \
- organizer \
- hookdll \
- archive \
- helper \
+ shared \
+ uibase \
+ organizer \
+ hookdll \
+ archive \
+ helper \
plugins \
proxydll \
nxmhandler \
- BossDummy \
- pythonRunner \
- esptk
+ BossDummy \
+ pythonRunner \
+ esptk
hookdll.depends = shared
-organizer.depends = shared, uibase, plugins
+organizer.depends = shared uibase plugins
CONFIG(debug, debug|release) {
DESTDIR = outputd
diff --git a/src/main.cpp b/src/main.cpp
index 59a4e837..90cf9e0e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -400,6 +400,27 @@ int main(int argc, char *argv[])
settings.setValue("gamePath", gamePath.toUtf8().constData());
}
+ int edition = 0;
+ if (settings.contains("game_edition")) {
+ edition = settings.value("game_edition").toInt();
+ } else {
+ std::vector<std::wstring> editions = GameInfo::instance().getSteamVariants();
+ if (editions.size() < 2) {
+ edition = 0;
+ } else {
+ SelectionDialog selection(QObject::tr("Please select the game edition you have (MO can't start the game correctly if this is set incorrectly!)"), NULL);
+ int index = 0;
+ for (auto iter = editions.begin(); iter != editions.end(); ++iter) {
+ selection.addChoice(ToQString(*iter), "", index++);
+ }
+ if (selection.exec() == QDialog::Rejected) {
+ return -1;
+ } else {
+ settings.setValue("game_edition", selection.getChoiceData().toInt());
+ }
+ }
+ }
+
qDebug("managing game at %s", qPrintable(QDir::toNativeSeparators(gamePath)));
ExecutablesList executablesList;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 14bb3b59..cf8e355f 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2134,7 +2134,7 @@ HANDLE MainWindow::startApplication(const QString &executable, const QStringList
}
} catch (const std::runtime_error&) {
qWarning("\"%s\" not set up as executable", executable.toUtf8().constData());
- return INVALID_HANDLE_VALUE;
+ binary = QFileInfo(executable);
}
}
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 8d672675..faf8c95b 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -560,7 +560,6 @@ void ModInfoRegular::addNexusCategory(int categoryID)
m_Categories.insert(CategoryFactory::instance().resolveNexusID(categoryID));
}
-
void ModInfoRegular::setIsEndorsed(bool endorsed)
{
if (m_EndorsedState != ENDORSED_NEVER) {
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 18bbfd5a..0fdcf6fa 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -169,10 +169,16 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
int category = modInfo->getPrimaryCategory();
if (category != -1) {
CategoryFactory &categoryFactory = CategoryFactory::instance();
- try {
- return categoryFactory.getCategoryName(categoryFactory.getCategoryIndex(category));
- } catch (const std::exception &e) {
- qCritical("failed to retrieve category name: %s", e.what());
+ if (categoryFactory.categoryExists(category)) {
+ try {
+ return categoryFactory.getCategoryName(categoryFactory.getCategoryIndex(category));
+ } catch (const std::exception &e) {
+ qCritical("failed to retrieve category name: %s", e.what());
+ return QString();
+ }
+ } else {
+ qWarning("category %d doesn't exist (may have been removed)", category);
+ modInfo->setCategory(category, false);
return QString();
}
} else {
diff --git a/src/settings.cpp b/src/settings.cpp
index 4f301b0c..36a4f1f8 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -159,7 +159,7 @@ bool Settings::automaticLoginEnabled() const
QString Settings::getSteamAppID() const
{
- return m_Settings.value("Settings/app_id", ToQString(GameInfo::instance().getSteamAPPId())).toString();
+ return m_Settings.value("Settings/app_id", ToQString(GameInfo::instance().getSteamAPPId(m_Settings.value("game_edition", 0).toInt()))).toString();
}
QString Settings::getDownloadDirectory() const
diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp
index 79dd90c9..c673fa1b 100644
--- a/src/shared/fallout3info.cpp
+++ b/src/shared/fallout3info.cpp
@@ -133,10 +133,17 @@ std::wstring Fallout3Info::getOMODExt()
return L"fomod";
}
+std::vector<std::wstring> Fallout3Info::getSteamVariants() const
+{
+ return boost::assign::list_of(L"Regular")(L"Game Of The Year");
+}
-std::wstring Fallout3Info::getSteamAPPId()
+std::wstring Fallout3Info::getSteamAPPId(int variant) const
{
- return L"22300";
+ switch (variant) {
+ case 1: return L"22370";
+ default: return L"22300";
+ }
}
diff --git a/src/shared/fallout3info.h b/src/shared/fallout3info.h
index 95a76471..0fa97d41 100644
--- a/src/shared/fallout3info.h
+++ b/src/shared/fallout3info.h
@@ -66,7 +66,8 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::vector<std::wstring> getSteamVariants() const;
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp
index 6da454ee..7d7f0098 100644
--- a/src/shared/falloutnvinfo.cpp
+++ b/src/shared/falloutnvinfo.cpp
@@ -136,7 +136,7 @@ std::wstring FalloutNVInfo::getOMODExt()
}
-std::wstring FalloutNVInfo::getSteamAPPId()
+std::wstring FalloutNVInfo::getSteamAPPId(int) const
{
return L"22380";
}
diff --git a/src/shared/falloutnvinfo.h b/src/shared/falloutnvinfo.h
index 2f6cba7b..3960c951 100644
--- a/src/shared/falloutnvinfo.h
+++ b/src/shared/falloutnvinfo.h
@@ -68,7 +68,7 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
diff --git a/src/shared/gameinfo.cpp b/src/shared/gameinfo.cpp
index f74e52b4..00bb42fd 100644
--- a/src/shared/gameinfo.cpp
+++ b/src/shared/gameinfo.cpp
@@ -30,6 +30,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <shlobj.h>
#include <sstream>
#include <cassert>
+#include <boost/assign.hpp>
namespace MOShared {
@@ -184,6 +185,11 @@ bool GameInfo::requiresSteam() const
return FileExists(getGameDirectory().append(L"\\steam_api.dll"));
}
+std::vector<std::wstring> GameInfo::getSteamVariants() const
+{
+ return boost::assign::list_of(L"Regular");
+}
+
std::wstring GameInfo::getLocalAppFolder() const
{
diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h
index 14f52f05..0221dd1b 100644
--- a/src/shared/gameinfo.h
+++ b/src/shared/gameinfo.h
@@ -137,7 +137,8 @@ public:
virtual std::wstring getOMODExt() = 0;
- virtual std::wstring getSteamAPPId() = 0;
+ virtual std::vector<std::wstring> getSteamVariants() const;
+ virtual std::wstring getSteamAPPId(int variant = 0) const = 0;
virtual std::wstring getSEName() = 0;
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";
}
diff --git a/src/shared/oblivioninfo.h b/src/shared/oblivioninfo.h
index 13374aa3..6a9f56ca 100644
--- a/src/shared/oblivioninfo.h
+++ b/src/shared/oblivioninfo.h
@@ -64,7 +64,7 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp
index 71d791f5..0a0dd98d 100644
--- a/src/shared/skyriminfo.cpp
+++ b/src/shared/skyriminfo.cpp
@@ -169,7 +169,7 @@ std::wstring SkyrimInfo::getOMODExt()
}
-std::wstring SkyrimInfo::getSteamAPPId()
+std::wstring SkyrimInfo::getSteamAPPId(int) const
{
return L"72850";
}
diff --git a/src/shared/skyriminfo.h b/src/shared/skyriminfo.h
index c5d31ff0..ae5ab81f 100644
--- a/src/shared/skyriminfo.h
+++ b/src/shared/skyriminfo.h
@@ -71,7 +71,7 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
diff --git a/src/version.rc b/src/version.rc
index e71bc1b5..55de3798 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -1,7 +1,7 @@
#include "Winver.h"
-#define VER_FILEVERSION 1,0,5,0
-#define VER_FILEVERSION_STR "1,0,5,0\0"
+#define VER_FILEVERSION 1,0,7,0
+#define VER_FILEVERSION_STR "1,0,7,0\0"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION