3131#include < chrono>
3232#endif
3333
34+ inline quint32 joaatFromSI (const char *data, size_t size)
35+ {
36+ quint32 val = 0xE47AB81CUL ;
37+ for (size_t i = 0 ; i != size; i++) {
38+ val += data[i];
39+ val += (val << 10 );
40+ val ^= (val >> 6 );
41+ }
42+ val += (val << 3 );
43+ val ^= (val >> 11 );
44+ val += (val << 15 );
45+ return val;
46+ }
47+
3448RagePhoto::RagePhoto ()
3549{
3650 p_photoFormat = PhotoFormat::Undefined;
@@ -530,8 +544,15 @@ bool RagePhoto::setJsonData(const QByteArray &data)
530544 QJsonDocument t_jsonDocument = QJsonDocument::fromJson (data);
531545 if (t_jsonDocument.isNull ())
532546 return false ;
533- p_jsonData = t_jsonDocument.toJson (QJsonDocument::Compact);
534547 p_jsonObject = t_jsonDocument.object ();
548+ // serializer band-aid
549+ QJsonObject t_jsonObject = p_jsonObject;
550+ t_jsonObject[" sign" ] = " __gta5view.sign" ;
551+ t_jsonDocument.setObject (t_jsonObject);
552+ p_jsonData = t_jsonDocument.toJson (QJsonDocument::Compact);
553+ char sign_char[24 ];
554+ sprintf (sign_char, " %llu" , (0x100000000000000ULL | joaatFromSI (p_photoData.constData (), p_photoData.size ())));
555+ p_jsonData.replace (" \" __gta5view.sign\" " , sign_char);
535556 return true ;
536557}
537558
@@ -555,6 +576,8 @@ bool RagePhoto::setPhotoData(const QByteArray &data)
555576 if (size > p_photoBuffer)
556577 return false ;
557578 p_photoData = data;
579+ // serializer band-aid
580+ setJsonData (p_jsonData);
558581 return true ;
559582}
560583
@@ -563,6 +586,8 @@ bool RagePhoto::setPhotoData(const char *data, int size)
563586 if (static_cast <quint32>(size) > p_photoBuffer)
564587 return false ;
565588 p_photoData = QByteArray (data, size);
589+ // serializer band-aid
590+ setJsonData (p_jsonData);
566591 return true ;
567592}
568593
@@ -640,6 +665,9 @@ QByteArray RagePhoto::save(PhotoFormat photoFormat)
640665
641666void RagePhoto::save (QIODevice *ioDevice, PhotoFormat photoFormat)
642667{
668+ // serializer band-aid
669+ setJsonData (p_jsonData);
670+
643671 if (photoFormat == PhotoFormat::G5EX) {
644672 char uInt32Buffer[4 ];
645673 quint32 format = static_cast <quint32>(PhotoFormat::G5EX);
0 commit comments