Browse Source

gta5view 1.9.2

1.9.x 1.9.2
Syping 7 months ago
parent
commit
98cfa7c5de
  1. 2
      .ci/app.rc
  2. 4
      .ci/gta5view.nsi
  3. 94
      RagePhoto.cpp
  4. 4
      config.h
  5. 10
      res/app.rc
  6. 3
      res/de.syping.gta5view.metainfo.xml
  7. BIN
      res/gta5sync_fr.qm
  8. 2
      res/gta5sync_fr.ts

2
.ci/app.rc

@ -24,7 +24,7 @@ BEGIN
VALUE "FileDescription", "gta5view"
VALUE "FileVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER"
VALUE "InternalName", "gta5view"
VALUE "LegalCopyright", "Copyright © 2016-2020 Syping"
VALUE "LegalCopyright", "Copyright © 2016-2021 Syping"
VALUE "OriginalFilename", "gta5view.exe"
VALUE "ProductName", "gta5view"
VALUE "ProductVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER"

4
.ci/gta5view.nsi

@ -3,8 +3,8 @@
!define APP_NAME "gta5view"
!define COMP_NAME "Syping"
!define WEB_SITE "https://gta5view.syping.de/"
!define VERSION "1.9.1.0"
!define COPYRIGHT "Copyright © 2016-2020 Syping"
!define VERSION "1.9.2.0"
!define COPYRIGHT "Copyright © 2016-2021 Syping"
!define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor"
!define INSTALLER_NAME "gta5view_setup.exe"
!define MAIN_APP_EXE "gta5view.exe"

94
RagePhoto.cpp

@ -1,6 +1,6 @@
/*****************************************************************************
* gta5view Grand Theft Auto V Profile Viewer
* Copyright (C) 2020 Syping
* Copyright (C) 2020-2021 Syping
*
* 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
@ -90,15 +90,20 @@ bool RagePhoto::load()
quint32 format = charToUInt32LE(uInt32Buffer);
if (format == static_cast<quint32>(PhotoFormat::GTA5)) {
char photoHeader[256];
char *photoHeader = static_cast<char*>(malloc(256));
if (!photoHeader)
return false;
size = dataBuffer.read(photoHeader, 256);
if (size != 256)
if (size != 256) {
free(photoHeader);
return false;
}
for (const QChar &photoChar : utf16LEToString(photoHeader, 256)) {
if (photoChar.isNull())
break;
p_photoString += photoChar;
}
free(photoHeader);
size = dataBuffer.read(uInt32Buffer, 4);
if (size != 4)
@ -142,11 +147,16 @@ bool RagePhoto::load()
return false;
quint32 t_photoSize = charToUInt32LE(uInt32Buffer);
char photoData[t_photoSize];
char *photoData = static_cast<char*>(malloc(t_photoSize));
if (!photoData)
return false;
size = dataBuffer.read(photoData, t_photoSize);
if (size != t_photoSize)
if (size != t_photoSize) {
free(photoData);
return false;
}
p_photoData = QByteArray(photoData, t_photoSize);
free(photoData);
dataBuffer.seek(p_jsonOffset + 264);
size = dataBuffer.read(markerBuffer, 4);
@ -160,15 +170,20 @@ bool RagePhoto::load()
return false;
p_jsonBuffer = charToUInt32LE(uInt32Buffer);
char jsonBytes[p_jsonBuffer];
char *jsonBytes = static_cast<char*>(malloc(p_jsonBuffer));
if (!jsonBytes)
return false;
size = dataBuffer.read(jsonBytes, p_jsonBuffer);
if (size != p_jsonBuffer)
if (size != p_jsonBuffer) {
free(jsonBytes);
return false;
}
for (quint32 i = 0; i != p_jsonBuffer; i++) {
if (jsonBytes[i] == '\x00')
break;
p_jsonData += jsonBytes[i];
}
free(jsonBytes);
QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData);
if (t_jsonDocument.isNull())
return false;
@ -186,15 +201,20 @@ bool RagePhoto::load()
return false;
p_titlBuffer = charToUInt32LE(uInt32Buffer);
char titlBytes[p_titlBuffer];
char *titlBytes = static_cast<char*>(malloc(p_titlBuffer));
if (!titlBytes)
return false;
size = dataBuffer.read(titlBytes, p_titlBuffer);
if (size != p_titlBuffer)
if (size != p_titlBuffer){
free(titlBytes);
return false;
}
for (const QChar &titlChar : QString::fromUtf8(titlBytes, p_titlBuffer)) {
if (titlChar.isNull())
break;
p_titleString += titlChar;
}
free(titlBytes);
dataBuffer.seek(p_descOffset + 264);
size = dataBuffer.read(markerBuffer, 4);
@ -208,15 +228,20 @@ bool RagePhoto::load()
return false;
p_descBuffer = charToUInt32LE(uInt32Buffer);
char descBytes[p_descBuffer];
char *descBytes = static_cast<char*>(malloc(p_descBuffer));
if (!descBytes)
return false;
size = dataBuffer.read(descBytes, p_descBuffer);
if (size != p_descBuffer)
if (size != p_descBuffer) {
free(descBytes);
return false;
}
for (const QChar &descChar : QString::fromUtf8(descBytes, p_descBuffer)) {
if (descChar.isNull())
break;
p_descriptionString += descChar;
}
free(descBytes);
dataBuffer.seek(p_endOfFile + 260);
size = dataBuffer.read(markerBuffer, 4);
@ -243,12 +268,17 @@ bool RagePhoto::load()
return false;
quint32 compressedSize = charToUInt32LE(uInt32Buffer);
char compressedPhotoHeader[compressedSize];
char *compressedPhotoHeader = static_cast<char*>(malloc(compressedSize));
if (!compressedPhotoHeader)
return false;
size = dataBuffer.read(compressedPhotoHeader, compressedSize);
if (size != compressedSize)
if (size != compressedSize) {
free(compressedPhotoHeader);
return false;
}
QByteArray t_photoHeader = QByteArray::fromRawData(compressedPhotoHeader, compressedSize);
t_photoHeader = qUncompress(t_photoHeader);
free(compressedPhotoHeader);
if (t_photoHeader.isEmpty())
return false;
p_photoString = QString::fromUtf8(t_photoHeader);
@ -268,12 +298,17 @@ bool RagePhoto::load()
return false;
compressedSize = charToUInt32LE(uInt32Buffer);
char compressedPhoto[compressedSize];
char *compressedPhoto = static_cast<char*>(malloc(compressedSize));
if (!compressedPhoto)
return false;
size = dataBuffer.read(compressedPhoto, compressedSize);
if (size != compressedSize)
if (size != compressedSize) {
free(compressedPhoto);
return false;
}
QByteArray t_photoData = QByteArray::fromRawData(compressedPhoto, compressedSize);
p_photoData = qUncompress(t_photoData);
free(compressedPhoto);
size = dataBuffer.read(uInt32Buffer, 4);
if (size != 4)
@ -290,12 +325,17 @@ bool RagePhoto::load()
return false;
compressedSize = charToUInt32LE(uInt32Buffer);
char compressedJson[compressedSize];
char *compressedJson = static_cast<char*>(malloc(compressedSize));
if (!compressedJson)
return false;
size = dataBuffer.read(compressedJson, compressedSize);
if (size != compressedSize)
if (size != compressedSize) {
free(compressedJson);
return false;
}
QByteArray t_jsonBytes = QByteArray::fromRawData(compressedJson, compressedSize);
p_jsonData = qUncompress(t_jsonBytes);
free(compressedJson);
if (p_jsonData.isEmpty())
return false;
QJsonDocument t_jsonDocument = QJsonDocument::fromJson(p_jsonData);
@ -318,12 +358,17 @@ bool RagePhoto::load()
return false;
compressedSize = charToUInt32LE(uInt32Buffer);
char compressedTitl[compressedSize];
char *compressedTitl = static_cast<char*>(malloc(compressedSize));
if (!compressedTitl)
return false;
size = dataBuffer.read(compressedTitl, compressedSize);
if (size != compressedSize)
if (size != compressedSize) {
free(compressedTitl);
return false;
}
QByteArray t_titlBytes = QByteArray::fromRawData(compressedTitl, compressedSize);
t_titlBytes = qUncompress(t_titlBytes);
free(compressedTitl);
p_titleString = QString::fromUtf8(t_titlBytes);
size = dataBuffer.read(uInt32Buffer, 4);
@ -341,12 +386,17 @@ bool RagePhoto::load()
return false;
compressedSize = charToUInt32LE(uInt32Buffer);
char compressedDesc[compressedSize];
char *compressedDesc = static_cast<char*>(malloc(compressedSize));
if (!compressedDesc)
return false;
size = dataBuffer.read(compressedDesc, compressedSize);
if (size != compressedSize)
if (size != compressedSize) {
free(compressedDesc);
return false;
}
QByteArray t_descBytes = QByteArray::fromRawData(compressedDesc, compressedSize);
t_descBytes = qUncompress(t_descBytes);
free(compressedDesc);
p_descriptionString = QString::fromUtf8(t_descBytes);
size = dataBuffer.read(uInt32Buffer, 4);
@ -382,7 +432,7 @@ bool RagePhoto::load()
size = dataBuffer.read(length, 1);
if (size != 1)
return false;
int i_length = QByteArray::number((int)length[0], 16).toInt() + 6;
int i_length = QByteArray::number(static_cast<int>(length[0]), 16).toInt() + 6;
#if QT_VERSION >= 0x050A00
size = dataBuffer.skip(i_length);

4
config.h

@ -40,11 +40,11 @@
#endif
#ifndef GTA5SYNC_COPYRIGHT
#define GTA5SYNC_COPYRIGHT "2016-2020"
#define GTA5SYNC_COPYRIGHT "2016-2021"
#endif
#ifndef GTA5SYNC_APPVER
#define GTA5SYNC_APPVER "1.9.1"
#define GTA5SYNC_APPVER "1.9.2"
#endif
#if __cplusplus

10
res/app.rc

@ -4,8 +4,8 @@ IDI_ICON1 ICON DISCARDABLE "5sync.ico"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest"
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 9, 1, 0
PRODUCTVERSION 1, 9, 1, 0
FILEVERSION 1, 9, 2, 0
PRODUCTVERSION 1, 9, 2, 0
FILEFLAGSMASK 0x3fL
FILEFLAGS 0
FILEOS VOS_NT_WINDOWS32
@ -22,12 +22,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Syping"
VALUE "FileDescription", "gta5view"
VALUE "FileVersion", "1.9.1"
VALUE "FileVersion", "1.9.2"
VALUE "InternalName", "gta5view"
VALUE "LegalCopyright", "Copyright © 2016-2020 Syping"
VALUE "LegalCopyright", "Copyright © 2016-2021 Syping"
VALUE "OriginalFilename", "gta5view.exe"
VALUE "ProductName", "gta5view"
VALUE "ProductVersion", "1.9.1"
VALUE "ProductVersion", "1.9.2"
END
END
END

3
res/de.syping.gta5view.metainfo.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2020 Syping -->
<!-- Copyright 2021 Syping -->
<component type="desktop-application">
<id>de.syping.gta5view</id>
<launchable type="desktop-id">de.syping.gta5view.desktop</launchable>
@ -32,6 +32,7 @@
<developer_name>Syping</developer_name>
<releases>
<release date="2021-03-22" version="1.9.2"/>
<release date="2020-12-16" version="1.9.1"/>
<release date="2020-11-30" version="1.9.0"/>
<release date="2020-10-11" version="1.8.0"/>

BIN
res/gta5sync_fr.qm

Binary file not shown.

2
res/gta5sync_fr.ts

@ -305,7 +305,7 @@ et les fichiers de sauvegarde de Grand Theft Auto V</translation>
<message>
<location filename="../ImportDialog.ui" line="311"/>
<source>Resolution:</source>
<translation>Résolution:</translation>
<translation>Résolution :</translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="324"/>

Loading…
Cancel
Save