Skip to content

Commit

Permalink
Parse GameData parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
oblivioncth committed Nov 10, 2023
1 parent 3dc1dc9 commit a06afed
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 6 deletions.
26 changes: 23 additions & 3 deletions lib/include/fp/fp-items.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,25 @@ class FP_FP_EXPORT Game::Builder
Game build();
};

class FP_FP_EXPORT GameDataParameters
{
//-Instance Variables-----------------------------------------------------------------------------------------------
private:
bool mExtract;
QString mErrorStr;

//-Constructor-------------------------------------------------------------------------------------------------
public:
GameDataParameters(const QString& rawParameters);

//-Instance Functions------------------------------------------------------------------------------------------
public:
bool isExtract() const;

bool hasError() const;
QString errorString() const;
};

class FP_FP_EXPORT GameData
{
//-Inner Classes----------------------------------------------------------------------------------------------------
Expand All @@ -137,7 +156,7 @@ class FP_FP_EXPORT GameData
bool mPresentOnDisk;
QString mPath;
quint32 mSize;
QString mParameters;
QString mRawParameters;
QString mAppPath;
QString mLaunchCommand;

Expand All @@ -158,7 +177,8 @@ class FP_FP_EXPORT GameData
bool presentOnDisk() const;
QString path() const;
quint32 size() const;
QString parameters() const;
QString rawParameters() const;
GameDataParameters parameters() const;
QString appPath() const;
QString launchCommand() const;
};
Expand All @@ -184,7 +204,7 @@ class FP_FP_EXPORT GameData::Builder
Builder& wPresentOnDisk(QStringView rawBroken);
Builder& wPath(const QString& path);
Builder& wSize(QStringView rawSize);
Builder& wParameters(const QString& parameters);
Builder& wRawParameters(const QString& parameters);
Builder& wAppPath(const QString& appPath);
Builder& wLaunchCommand(const QString& launchCommand);

Expand Down
2 changes: 1 addition & 1 deletion lib/src/fp-db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -844,7 +844,7 @@ DbError Db::getGameData(GameData& data, const QUuid& gameId)
fpGdb.wPresentOnDisk(searchResult.result.value(Fp::Db::Table_Game_Data::COL_PRES_ON_DISK).toString());
fpGdb.wPath(searchResult.result.value(Fp::Db::Table_Game_Data::COL_PATH).toString());
fpGdb.wSize(searchResult.result.value(Fp::Db::Table_Game_Data::COL_SIZE).toString());
fpGdb.wParameters(searchResult.result.value(Fp::Db::Table_Game_Data::COL_PARAM).toString());
fpGdb.wRawParameters(searchResult.result.value(Fp::Db::Table_Game_Data::COL_PARAM).toString());
fpGdb.wAppPath(searchResult.result.value(Fp::Db::Table_Game_Data::COL_APP_PATH).toString());
fpGdb.wLaunchCommand(searchResult.result.value(Fp::Db::Table_Game_Data::COL_LAUNCH_COMMAND).toString());

Expand Down
50 changes: 48 additions & 2 deletions lib/src/fp-items.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
// Unit Include
#include "fp/fp-items.h"

// Qt Includes
#include <QCommandLineParser>
#include <QProcess>

// Qx Includes
#include <qx/core/qx-string.h>

Expand Down Expand Up @@ -95,6 +99,47 @@ Game::Builder& Game::Builder::wPlatformName(const QString& platformName) { mGame

Game Game::Builder::build() { return mGameBlueprint; }

//===============================================================================================================
// GameDataParameters
//===============================================================================================================

//-Constructor------------------------------------------------------------------------------------------------
//Public:
GameDataParameters::GameDataParameters(const QString& rawParameters)
{
static const QString OPT_EXTRACT = u"extract"_s;

QCommandLineParser parser;
parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
Q_ASSERT(parser.addOptions({
QCommandLineOption(OPT_EXTRACT)
}));

// Determine params
QStringList param{u"GDP"_s}; // Need to add dummy "executable name" for QCommandLineParser, it's ignored
param.append(QProcess::splitCommand(rawParameters));

// Parse
if(!parser.parse(param))
mErrorStr = parser.errorText();
QStringList posArgs = parser.positionalArguments();
if(!posArgs.isEmpty())
{
if(!mErrorStr.isEmpty())
mErrorStr += ' ';
mErrorStr += u"Unexpected positional arguments: {"_s + posArgs.join(',') + u"}."_s;
}

// Set values
mExtract = parser.isSet(OPT_EXTRACT);
}

//-Instance Functions------------------------------------------------------------------------------------------------
//Public:
bool GameDataParameters::isExtract() const { return mExtract; }
bool GameDataParameters::hasError() const { return !mErrorStr.isNull(); }
QString GameDataParameters::errorString() const { return mErrorStr; }

//===============================================================================================================
// GameData
//===============================================================================================================
Expand All @@ -118,7 +163,8 @@ quint32 GameData::crc32() const { return mCrc32; }
bool GameData::presentOnDisk() const { return mPresentOnDisk; }
QString GameData::path() const { return mPath; }
quint32 GameData::size() const { return mSize; }
QString GameData::parameters() const { return mParameters; }
QString GameData::rawParameters() const { return mRawParameters; }
GameDataParameters GameData::parameters() const { return GameDataParameters(mRawParameters); }
QString GameData::appPath() const { return mAppPath; }
QString GameData::launchCommand() const { return mLaunchCommand; }

Expand All @@ -141,7 +187,7 @@ GameData::Builder& GameData::Builder::wCrc32(QStringView rawCrc32) { mGameDataBl
GameData::Builder& GameData::Builder::wPresentOnDisk(QStringView rawBroken) { mGameDataBlueprint.mPresentOnDisk = rawBroken.toInt() != 0; return *this; }
GameData::Builder& GameData::Builder::wPath(const QString& path) { mGameDataBlueprint.mPath = path; return *this; }
GameData::Builder& GameData::Builder::wSize(QStringView rawSize) { mGameDataBlueprint.mSize = rawSize.toInt(); return *this; }
GameData::Builder& GameData::Builder::wParameters(const QString& parameters) { mGameDataBlueprint.mParameters = parameters; return *this; }
GameData::Builder& GameData::Builder::wRawParameters(const QString& parameters) { mGameDataBlueprint.mRawParameters = parameters; return *this; }
GameData::Builder& GameData::Builder::wAppPath(const QString& appPath) { mGameDataBlueprint.mAppPath = appPath; return *this; }
GameData::Builder& GameData::Builder::wLaunchCommand(const QString& launchCommand) { mGameDataBlueprint.mLaunchCommand = launchCommand; return *this; }

Expand Down

0 comments on commit a06afed

Please sign in to comment.