diff --git a/CMakeLists.txt b/CMakeLists.txt
index 63160ad..1c2f7ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,7 +172,6 @@ set(GTA5VIEW_TRANSLATIONS
list(APPEND GTA5VIEW_RESOURCES
res/global.qrc
- res/template.qrc
)
set_property(SOURCE res/global.qrc PROPERTY AUTORCC_OPTIONS "-threshold;0;-compress;9")
diff --git a/res/template.g5e b/res/template.g5e
deleted file mode 100644
index c74ba7f..0000000
Binary files a/res/template.g5e and /dev/null differ
diff --git a/res/template.qrc b/res/template.qrc
deleted file mode 100644
index 06dcf5a..0000000
--- a/res/template.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- template.g5e
-
-
diff --git a/src/ProfileInterface.cpp b/src/ProfileInterface.cpp
index 2c5c352..31d57da 100644
--- a/src/ProfileInterface.cpp
+++ b/src/ProfileInterface.cpp
@@ -725,174 +725,169 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
}
}
else if (isSupportedImageFile(selectedFileName)) {
- SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e");
- if (picture->readingPicture(false)) {
- if (!notMultiple) {
- QFile snapmaticFile(selectedFile);
- if (!snapmaticFile.open(QFile::ReadOnly)) {
- delete picture;
- return false;
+ SnapmaticPicture *picture = new SnapmaticPicture();
+ picture->initialise(RagePhoto::PhotoFormat::GTA5); // TODO: check which game we want create for
+ if (!notMultiple) {
+ QFile snapmaticFile(selectedFile);
+ if (!snapmaticFile.open(QFile::ReadOnly)) {
+ delete picture;
+ return false;
+ }
+ QImage snapmaticImage;
+ QImageReader snapmaticImageReader;
+ snapmaticImageReader.setDecideFormatFromContent(true);
+ snapmaticImageReader.setDevice(&snapmaticFile);
+ if (!snapmaticImageReader.read(&snapmaticImage)) {
+ delete picture;
+ return false;
+ }
+ QString customImageTitle;
+ QPixmap snapmaticPixmap(960, 536);
+ snapmaticPixmap.fill(Qt::black);
+ QPainter snapmaticPainter(&snapmaticPixmap);
+ if (snapmaticImage.height() == snapmaticImage.width()) {
+ // Avatar mode
+ int diffWidth = 0;
+ int diffHeight = 0;
+ snapmaticImage = snapmaticImage.scaled(470, 470, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ if (snapmaticImage.width() > snapmaticImage.height()) {
+ diffHeight = 470 - snapmaticImage.height();
+ diffHeight = diffHeight / 2;
}
- QImage snapmaticImage;
- QImageReader snapmaticImageReader;
- snapmaticImageReader.setDecideFormatFromContent(true);
- snapmaticImageReader.setDevice(&snapmaticFile);
- if (!snapmaticImageReader.read(&snapmaticImage)) {
- delete picture;
- return false;
+ else if (snapmaticImage.width() < snapmaticImage.height()) {
+ diffWidth = 470 - snapmaticImage.width();
+ diffWidth = diffWidth / 2;
}
- QString customImageTitle;
- QPixmap snapmaticPixmap(960, 536);
- snapmaticPixmap.fill(Qt::black);
- QPainter snapmaticPainter(&snapmaticPixmap);
- if (snapmaticImage.height() == snapmaticImage.width()) {
- // Avatar mode
- int diffWidth = 0;
- int diffHeight = 0;
- snapmaticImage = snapmaticImage.scaled(470, 470, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- if (snapmaticImage.width() > snapmaticImage.height()) {
- diffHeight = 470 - snapmaticImage.height();
- diffHeight = diffHeight / 2;
- }
- else if (snapmaticImage.width() < snapmaticImage.height()) {
- diffWidth = 470 - snapmaticImage.width();
- diffWidth = diffWidth / 2;
- }
- snapmaticPainter.drawImage(145 + diffWidth, 66 + diffHeight, snapmaticImage);
- customImageTitle = ImportDialog::tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!");
- }
- else {
- // Picture mode
- int diffWidth = 0;
- int diffHeight = 0;
- snapmaticImage = snapmaticImage.scaled(960, 536, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- if (snapmaticImage.width() != 960) {
- diffWidth = 960 - snapmaticImage.width();
- diffWidth = diffWidth / 2;
- }
- else if (snapmaticImage.height() != 536) {
- diffHeight = 536 - snapmaticImage.height();
- diffHeight = diffHeight / 2;
- }
- snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage);
- customImageTitle = ImportDialog::tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!");
- }
- snapmaticPainter.end();
- if (!picture->setImage(snapmaticPixmap.toImage())) {
- delete picture;
- return false;
- }
- SnapmaticProperties spJson = picture->getSnapmaticProperties();
- spJson.uid = getRandomUid();
- bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- int cEnough = 0;
- while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
- spJson.uid = getRandomUid();
- fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- cEnough++;
- }
- spJson.createdDateTime = importDateTime;
- qint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
- spJson.createdTimestamp = timestamp;
- picture->setSnapmaticProperties(spJson);
- const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
- picture->setPicFileName(picFileName);
- picture->setPictureTitle(customImageTitle);
- picture->updateStrings();
- bool success = importSnapmaticPicture(picture, notMultiple);
- if (!success)
- delete picture;
- return success;
+ snapmaticPainter.drawImage(145 + diffWidth, 66 + diffHeight, snapmaticImage);
+ customImageTitle = ImportDialog::tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!");
}
else {
- bool success = false;
- QFile snapmaticFile(selectedFile);
- if (!snapmaticFile.open(QFile::ReadOnly)) {
- QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\""));
- delete picture;
- return false;
+ // Picture mode
+ int diffWidth = 0;
+ int diffHeight = 0;
+ snapmaticImage = snapmaticImage.scaled(960, 536, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ if (snapmaticImage.width() != 960) {
+ diffWidth = 960 - snapmaticImage.width();
+ diffWidth = diffWidth / 2;
}
- QImage *snapmaticImage = new QImage();
- QImageReader snapmaticImageReader;
- snapmaticImageReader.setDecideFormatFromContent(true);
- snapmaticImageReader.setDevice(&snapmaticFile);
- if (!snapmaticImageReader.read(snapmaticImage)) {
- QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
- delete snapmaticImage;
- delete picture;
- return false;
+ else if (snapmaticImage.height() != 536) {
+ diffHeight = 536 - snapmaticImage.height();
+ diffHeight = diffHeight / 2;
}
- ImportDialog *importDialog = new ImportDialog(profileName, this);
- importDialog->setImage(snapmaticImage);
- importDialog->setModal(true);
- importDialog->show();
- importDialog->exec();
- if (importDialog->isImportAgreed()) {
- if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer())) {
- SnapmaticProperties spJson = picture->getSnapmaticProperties();
- spJson.uid = getRandomUid();
- bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- int cEnough = 0;
- while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
- spJson.uid = getRandomUid();
- fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- cEnough++;
- }
- spJson.createdDateTime = importDateTime;
- qint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
- spJson.createdTimestamp = timestamp;
- picture->setSnapmaticProperties(spJson);
- const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
- picture->setPicFileName(picFileName);
- picture->setPictureTitle(importDialog->getImageTitle());
- picture->updateStrings();
- success = importSnapmaticPicture(picture, notMultiple);
-#ifdef GTA5SYNC_TELEMETRY
- if (success) {
- QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
- telemetrySettings.beginGroup("Telemetry");
- bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool();
- telemetrySettings.endGroup();
- if (pushUsageData && Telemetry->canPush()) {
- QJsonDocument jsonDocument;
- QJsonObject jsonObject;
- jsonObject["Type"] = "ImportSuccess";
- jsonObject["ExtraFlag"] = "Dialog";
- jsonObject["ImportSize"] = QString::number(picture->getPictureSize());
-#if QT_VERSION >= 0x060000
- jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
-#else
- jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t());
-#endif
- jsonObject["ImportType"] = "Image";
- jsonDocument.setObject(jsonObject);
- Telemetry->push(TelemetryCategory::PersonalData, jsonDocument);
- }
- }
-#endif
- }
- }
- else {
- delete picture;
- success = true;
- }
- delete importDialog;
- if (!success)
- delete picture;
- return success;
+ snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage);
+ customImageTitle = ImportDialog::tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!");
}
+ snapmaticPainter.end();
+ if (!picture->setImage(snapmaticPixmap.toImage())) {
+ delete picture;
+ return false;
+ }
+ SnapmaticProperties spJson = picture->getSnapmaticProperties();
+ spJson.uid = getRandomUid();
+ bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ int cEnough = 0;
+ while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
+ spJson.uid = getRandomUid();
+ fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ cEnough++;
+ }
+ spJson.createdDateTime = importDateTime;
+ qint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
+ spJson.createdTimestamp = timestamp;
+ picture->setSnapmaticProperties(spJson);
+ const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
+ picture->setPicFileName(picFileName);
+ picture->setPictureTitle(customImageTitle);
+ picture->updateStrings();
+ bool success = importSnapmaticPicture(picture, notMultiple);
+ if (!success)
+ delete picture;
+ return success;
}
else {
- delete picture;
- return false;
+ bool success = false;
+ QFile snapmaticFile(selectedFile);
+ if (!snapmaticFile.open(QFile::ReadOnly)) {
+ QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be open").arg("\""+selectedFileName+"\""));
+ delete picture;
+ return false;
+ }
+ QImage *snapmaticImage = new QImage();
+ QImageReader snapmaticImageReader;
+ snapmaticImageReader.setDecideFormatFromContent(true);
+ snapmaticImageReader.setDevice(&snapmaticFile);
+ if (!snapmaticImageReader.read(snapmaticImage)) {
+ QMessageBox::warning(this, tr("Import..."), tr("Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
+ delete snapmaticImage;
+ delete picture;
+ return false;
+ }
+ ImportDialog *importDialog = new ImportDialog(profileName, this);
+ importDialog->setImage(snapmaticImage);
+ importDialog->setModal(true);
+ importDialog->show();
+ importDialog->exec();
+ if (importDialog->isImportAgreed()) {
+ if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer())) {
+ SnapmaticProperties spJson = picture->getSnapmaticProperties();
+ spJson.uid = getRandomUid();
+ bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ int cEnough = 0;
+ while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
+ spJson.uid = getRandomUid();
+ fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ cEnough++;
+ }
+ spJson.createdDateTime = importDateTime;
+ qint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
+ spJson.createdTimestamp = timestamp;
+ picture->setSnapmaticProperties(spJson);
+ const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
+ picture->setPicFileName(picFileName);
+ picture->setPictureTitle(importDialog->getImageTitle());
+ picture->updateStrings();
+ success = importSnapmaticPicture(picture, notMultiple);
+#ifdef GTA5SYNC_TELEMETRY
+ if (success) {
+ QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
+ telemetrySettings.beginGroup("Telemetry");
+ bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool();
+ telemetrySettings.endGroup();
+ if (pushUsageData && Telemetry->canPush()) {
+ QJsonDocument jsonDocument;
+ QJsonObject jsonObject;
+ jsonObject["Type"] = "ImportSuccess";
+ jsonObject["ExtraFlag"] = "Dialog";
+ jsonObject["ImportSize"] = QString::number(picture->getPictureSize());
+#if QT_VERSION >= 0x060000
+ jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
+#else
+ jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t());
+#endif
+ jsonObject["ImportType"] = "Image";
+ jsonDocument.setObject(jsonObject);
+ Telemetry->push(TelemetryCategory::PersonalData, jsonDocument);
+ }
+ }
+#endif
+ }
+ }
+ else {
+ delete picture;
+ success = true;
+ }
+ delete importDialog;
+ if (!success)
+ delete picture;
+ return success;
}
}
else {
@@ -1050,60 +1045,55 @@ bool ProfileInterface::importRemote(QUrl remoteUrl)
bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateTime)
{
- SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e");
- if (picture->readingPicture(false)) {
- bool success = false;
- ImportDialog *importDialog = new ImportDialog(profileName, this);
- importDialog->setImage(snapmaticImage);
- importDialog->setModal(true);
- importDialog->show();
- importDialog->exec();
- if (importDialog->isImportAgreed()) {
- if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer())) {
- SnapmaticProperties spJson = picture->getSnapmaticProperties();
+ bool success = false;
+ SnapmaticPicture *picture = new SnapmaticPicture();
+ picture->initialise(RagePhoto::PhotoFormat::GTA5); // TODO: check which game we want create for
+ ImportDialog *importDialog = new ImportDialog(profileName, this);
+ importDialog->setImage(snapmaticImage);
+ importDialog->setModal(true);
+ importDialog->show();
+ importDialog->exec();
+ if (importDialog->isImportAgreed()) {
+ if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer())) {
+ SnapmaticProperties spJson = picture->getSnapmaticProperties();
+ spJson.uid = getRandomUid();
+ bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ int cEnough = 0;
+ while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
spJson.uid = getRandomUid();
- bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- int cEnough = 0;
- while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit) {
- spJson.uid = getRandomUid();
- fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
- fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
- fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
- cEnough++;
- }
- spJson.createdDateTime = importDateTime;
-#if QT_VERSION >= 0x060000
- quint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
- if (timestamp > UINT32_MAX) {
- timestamp = UINT32_MAX;
- }
- spJson.createdTimestamp = (quint32)timestamp;
-#else
- spJson.createdTimestamp = spJson.createdDateTime.toTime_t();
-#endif
- picture->setSnapmaticProperties(spJson);
- const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
- picture->setPicFileName(picFileName);
- picture->setPictureTitle(importDialog->getImageTitle());
- picture->updateStrings();
- success = importSnapmaticPicture(picture, true);
+ fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
+ fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
+ fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
+ cEnough++;
}
+ spJson.createdDateTime = importDateTime;
+#if QT_VERSION >= 0x060000
+ quint64 timestamp = spJson.createdDateTime.toSecsSinceEpoch();
+ if (timestamp > UINT32_MAX) {
+ timestamp = UINT32_MAX;
+ }
+ spJson.createdTimestamp = (quint32)timestamp;
+#else
+ spJson.createdTimestamp = spJson.createdDateTime.toTime_t();
+#endif
+ picture->setSnapmaticProperties(spJson);
+ const QString picFileName = QString("PGTA5%1").arg(QString::number(spJson.uid));
+ picture->setPicFileName(picFileName);
+ picture->setPictureTitle(importDialog->getImageTitle());
+ picture->updateStrings();
+ success = importSnapmaticPicture(picture, true);
}
- else {
- delete picture;
- success = true;
- }
- delete importDialog;
- if (!success)
- delete picture;
- return success;
}
else {
delete picture;
- return false;
+ success = true;
}
+ delete importDialog;
+ if (!success)
+ delete picture;
+ return success;
}
bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, bool warn)
diff --git a/src/SnapmaticPicture.cpp b/src/SnapmaticPicture.cpp
index 65b2081..cdce002 100644
--- a/src/SnapmaticPicture.cpp
+++ b/src/SnapmaticPicture.cpp
@@ -17,10 +17,12 @@
*****************************************************************************/
#include "SnapmaticPicture.h"
+#include "pcg_basic.h"
#include
#include
#include
#include
+#include
#include
#include
#include
@@ -845,7 +847,125 @@ const QString SnapmaticPicture::getLastStep(bool readable)
return lastStep;
}
return lastStep;
+}
+void SnapmaticPicture::initialise(uint32_t photoFormat)
+{
+ switch (photoFormat) {
+ case RagePhoto::PhotoFormat::GTA5:
+ case G5EPhotoFormat::G5EX:
+ {
+ p_ragePhoto.setFormat(photoFormat);
+ p_ragePhoto.setHeader("PHOTO - 09/20/23 04:41:35", 0x97D5BDBDUL, 0x00000000UL);
+ p_ragePhoto.setJpeg(std::string(), RagePhoto::DefaultSize::DEFAULT_GTA5_PHOTOBUFFER);
+
+ boost::json::object t_jsonObject;
+ t_jsonObject["area"] = "SANAND";
+ t_jsonObject["crewid"] = 0;
+ t_jsonObject["cv"] = true;
+ t_jsonObject["drctr"] = false;
+
+ boost::json::object t_locObject;
+ t_locObject["x"] = 0;
+ t_locObject["y"] = 0;
+ t_locObject["z"] = 0;
+
+ t_jsonObject["loc"] = t_locObject;
+ t_jsonObject["meme"] = false;
+ t_jsonObject["mid"] = "";
+ t_jsonObject["mode"] = "FREEMODE";
+ t_jsonObject["mug"] = false;
+ t_jsonObject["nm"] = "";
+ t_jsonObject["rds"] = "";
+ t_jsonObject["rsedtr"] = false;
+ t_jsonObject["scr"] = 1;
+ t_jsonObject["sid"] = "0x0";
+ t_jsonObject["slf"] = true;
+ t_jsonObject["street"] = 0;
+
+ pcg32_random_t rng;
+ pcg32_srandom_r(&rng, QDateTime::currentMSecsSinceEpoch(), (intptr_t)&rng);
+ uint32_t secondsInYear = pcg32_boundedrand_r(&rng, 31535999UL);
+ uint32_t timestamp = 1356998400UL + secondsInYear;
+ QDateTime dateTime = QDateTime::fromSecsSinceEpoch(timestamp, Qt::UTC);
+
+ boost::json::object t_timeObject;
+ t_timeObject["day"] = dateTime.date().day();
+ t_timeObject["hour"] = dateTime.time().hour();
+ t_timeObject["minute"] = dateTime.time().minute();
+ t_timeObject["month"] = dateTime.date().month();
+ t_timeObject["second"] = dateTime.time().second();
+ t_timeObject["year"] = dateTime.date().year();
+
+ t_jsonObject["time"] = t_timeObject;
+
+ const std::string json = SnapmaticJson::serialize(t_jsonObject, false);
+ setJsonStr(json, true);
+ jsonOk = true;
+
+ p_ragePhoto.setDescription("");
+
+ isPreLoaded = true;
+ picOk = true; // TODO: the picture is still "not ok", but soon after it will be, but we should not assume it
+ }
+ break;
+ case RagePhoto::PhotoFormat::RDR2:
+ {
+ p_ragePhoto.setFormat(photoFormat);
+ p_ragePhoto.setHeader("PHOTO - 09/20/23 04:39:16", 0x0F5B0A65UL, 0xDF91D3D2UL);
+ p_ragePhoto.setJpeg(std::string(), RagePhoto::DefaultSize::DEFAULT_RDR2_PHOTOBUFFER);
+
+ boost::json::object t_jsonObject;
+ t_jsonObject["advanced"] = false;
+ t_jsonObject["crewid"] = 0;
+ t_jsonObject["districtname"] = 0;
+ t_jsonObject["drctr"] = false;
+
+ boost::json::object t_locObject;
+ t_locObject["x"] = 0;
+ t_locObject["y"] = 0;
+ t_locObject["z"] = 0;
+
+ t_jsonObject["inphotomode"] = true;
+ t_jsonObject["loc"] = t_locObject;
+ t_jsonObject["meme"] = false;
+ t_jsonObject["mid"] = "";
+ t_jsonObject["mode"] = "SP";
+ t_jsonObject["mug"] = false;
+ t_jsonObject["nm"] = "";
+ t_jsonObject["regionname"] = 0;
+ t_jsonObject["rsedtr"] = false;
+ t_jsonObject["sid"] = "0x0";
+ t_jsonObject["slf"] = false;
+ t_jsonObject["statename"] = 0;
+
+ pcg32_random_t rng;
+ pcg32_srandom_r(&rng, QDateTime::currentMSecsSinceEpoch(), (intptr_t)&rng);
+ uint32_t secondsInYear = pcg32_boundedrand_r(&rng, 31535999UL);
+ int64_t timestamp = -2240524800L + secondsInYear;
+ QDateTime dateTime = QDateTime::fromSecsSinceEpoch(timestamp, Qt::UTC);
+
+ boost::json::object t_timeObject;
+ t_timeObject["day"] = dateTime.date().day();
+ t_timeObject["hour"] = dateTime.time().hour();
+ t_timeObject["minute"] = dateTime.time().minute();
+ t_timeObject["month"] = dateTime.date().month();
+ t_timeObject["second"] = dateTime.time().second();
+ t_timeObject["year"] = dateTime.date().year();
+
+ t_jsonObject["time"] = t_timeObject;
+
+ const std::string json = SnapmaticJson::serialize(t_jsonObject, false);
+ setJsonStr(json, true);
+ jsonOk = true;
+
+ p_ragePhoto.setDescription("");
+
+ isPreLoaded = true;
+ picOk = true; // TODO: the picture is still "not ok", but soon after it will be, but we should not assume it
+ }
+ break;
+ }
}
const QImage SnapmaticPicture::getImage()
diff --git a/src/SnapmaticPicture.h b/src/SnapmaticPicture.h
index 05161c3..e69d0dd 100644
--- a/src/SnapmaticPicture.h
+++ b/src/SnapmaticPicture.h
@@ -90,6 +90,7 @@ public:
const QString getExportPictureFileName();
const QString getOriginalPictureFileName();
const QString getOriginalPictureFilePath();
+ void initialise(uint32_t photoFormat);
bool setImage(const QImage &picture, bool eXtendMode = false);
bool setPictureTitl(const QString &newTitle); // Please use setPictureTitle instead
bool setPictureStream(const QByteArray &streamArray, int width, int height);