2016-03-23 02:08:16 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* gta5sync GRAND THEFT AUTO V SYNC
|
2017-02-11 04:21:55 +01:00
|
|
|
* Copyright (C) 2016-2017 Syping
|
2016-03-23 02:08:16 +01:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2016-03-31 23:41:53 +02:00
|
|
|
#include "StringParser.h"
|
2016-03-23 01:09:27 +01:00
|
|
|
#include "SavegameData.h"
|
2016-03-31 21:33:16 +02:00
|
|
|
#include <QTextCodec>
|
|
|
|
#include <QDebug>
|
2016-03-23 02:08:16 +01:00
|
|
|
#include <QFile>
|
|
|
|
|
2016-04-06 04:22:30 +02:00
|
|
|
SavegameData::SavegameData(const QString &fileName, QObject *parent) : QObject(parent), savegameFileName(fileName)
|
2016-03-23 02:08:16 +01:00
|
|
|
{
|
|
|
|
// PARSE INT INIT - DO NOT CHANGE THIS VALUES
|
|
|
|
savegameHeaderLength = 260;
|
2016-04-06 04:52:45 +02:00
|
|
|
verificationValue = QByteArray::fromHex("00000001");
|
2016-03-23 02:08:16 +01:00
|
|
|
|
|
|
|
// INIT SAVEGAME
|
|
|
|
savegameStr = "";
|
|
|
|
savegameOk = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SavegameData::readingSavegame()
|
|
|
|
{
|
|
|
|
// Start opening file
|
|
|
|
// lastStep is like currentStep
|
|
|
|
|
|
|
|
QFile *saveFile = new QFile(savegameFileName);
|
|
|
|
if (!saveFile->open(QFile::ReadOnly))
|
|
|
|
{
|
2016-04-06 04:22:30 +02:00
|
|
|
lastStep = "1;/1,OpenFile," + StringParser::convertDrawStringForLog(savegameFileName);
|
2016-03-28 15:24:09 +02:00
|
|
|
saveFile->deleteLater();
|
|
|
|
delete saveFile;
|
2016-03-23 02:08:16 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Reading Savegame Header
|
|
|
|
if (!saveFile->isReadable())
|
|
|
|
{
|
2016-04-06 04:22:30 +02:00
|
|
|
lastStep = "2;/3,ReadingFile," + StringParser::convertDrawStringForLog(savegameFileName) + ",1,NOHEADER";
|
2016-03-28 15:24:09 +02:00
|
|
|
saveFile->close();
|
|
|
|
saveFile->deleteLater();
|
|
|
|
delete saveFile;
|
2016-03-23 02:08:16 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
QByteArray savegameHeaderLine = saveFile->read(savegameHeaderLength);
|
2016-04-06 04:52:45 +02:00
|
|
|
if (savegameHeaderLine.left(4) == verificationValue)
|
2016-03-23 02:08:16 +01:00
|
|
|
{
|
|
|
|
savegameStr = getSavegameDataString(savegameHeaderLine);
|
|
|
|
if (savegameStr.length() >= 1)
|
|
|
|
{
|
|
|
|
savegameOk = true;
|
|
|
|
}
|
|
|
|
}
|
2016-03-28 15:24:09 +02:00
|
|
|
saveFile->close();
|
|
|
|
saveFile->deleteLater();
|
|
|
|
delete saveFile;
|
2016-03-23 02:08:16 +01:00
|
|
|
return savegameOk;
|
|
|
|
}
|
|
|
|
|
2016-04-06 04:22:30 +02:00
|
|
|
QString SavegameData::getSavegameDataString(const QByteArray &savegameHeader)
|
2016-03-23 02:08:16 +01:00
|
|
|
{
|
2016-03-31 21:33:16 +02:00
|
|
|
QByteArray savegameBytes = savegameHeader.left(savegameHeaderLength);
|
|
|
|
QList<QByteArray> savegameBytesList = savegameBytes.split(char(0x01));
|
|
|
|
savegameBytes = savegameBytesList.at(1);
|
|
|
|
savegameBytesList.clear();
|
2016-03-31 23:41:53 +02:00
|
|
|
return StringParser::parseTitleString(savegameBytes, savegameBytes.length());
|
2016-03-23 02:08:16 +01:00
|
|
|
}
|
2016-03-23 01:09:27 +01:00
|
|
|
|
2016-04-06 04:22:30 +02:00
|
|
|
bool SavegameData::readingSavegameFromFile(const QString &fileName)
|
2016-03-23 01:09:27 +01:00
|
|
|
{
|
2016-03-23 02:08:16 +01:00
|
|
|
if (fileName != "")
|
|
|
|
{
|
|
|
|
savegameFileName = fileName;
|
|
|
|
return readingSavegame();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SavegameData::isSavegameOk()
|
|
|
|
{
|
|
|
|
return savegameOk;
|
|
|
|
}
|
|
|
|
|
2016-04-03 10:17:01 +02:00
|
|
|
QString SavegameData::getSavegameFileName()
|
|
|
|
{
|
|
|
|
return savegameFileName;
|
|
|
|
}
|
|
|
|
|
2016-03-23 02:08:16 +01:00
|
|
|
QString SavegameData::getSavegameStr()
|
|
|
|
{
|
|
|
|
return savegameStr;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString SavegameData::getLastStep()
|
|
|
|
{
|
|
|
|
return lastStep;
|
2016-03-23 01:09:27 +01:00
|
|
|
}
|
2016-04-13 00:32:14 +02:00
|
|
|
|
|
|
|
void SavegameData::setSavegameFileName(QString savegameFileName_)
|
|
|
|
{
|
|
|
|
savegameFileName = savegameFileName_;
|
|
|
|
}
|