From 7adf8f2c90bd1393c2db09d1c07782efcd8f4a8d Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Wed, 16 Dec 2020 13:02:11 +0100
Subject: [PATCH 1/4] 1.9.1: Cayo Perico DLC update, Multi-select bugfix

---
 .ci/gta5view.nsi                    |   2 +-
 ProfileInterface.cpp                |   4 ++--
 config.h                            |   2 +-
 res/app.rc                          |   8 ++++----
 res/de.syping.gta5view.metainfo.xml |   1 +
 res/global.de.ini                   |   1 +
 res/global.en.ini                   |   1 +
 res/global.es.ini                   |   1 +
 res/global.es_MX.ini                |   1 +
 res/global.fr.ini                   |   1 +
 res/global.it.ini                   |   1 +
 res/global.ja.ini                   |   1 +
 res/global.ko.ini                   |   1 +
 res/global.pl.ini                   |   1 +
 res/global.pt.ini                   |   1 +
 res/global.ru.ini                   |   1 +
 res/global.zh.ini                   |   1 +
 res/template.g5e                    | Bin 706 -> 717 bytes
 18 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/.ci/gta5view.nsi b/.ci/gta5view.nsi
index 6302b72..2b586d7 100644
--- a/.ci/gta5view.nsi
+++ b/.ci/gta5view.nsi
@@ -3,7 +3,7 @@
 !define APP_NAME "gta5view"
 !define COMP_NAME "Syping"
 !define WEB_SITE "https://gta5view.syping.de/"
-!define VERSION "1.9.0.0"
+!define VERSION "1.9.1.0"
 !define COPYRIGHT "Copyright © 2016-2020 Syping"
 !define DESCRIPTION "Grand Theft Auto V Savegame and Snapmatic Viewer/Editor"
 !define INSTALLER_NAME "gta5view_setup.exe"
diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp
index 8dd57e5..99fd1a4 100644
--- a/ProfileInterface.cpp
+++ b/ProfileInterface.cpp
@@ -1670,7 +1670,7 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev)
     }
     QMenu contextMenu(picWidget);
     const int selectedCount = selectedWidgets();
-    if (contentMode < 20 || selectedCount <= 1) {
+    if (contentMode < 20 || selectedCount == 0) {
         QMenu editMenu(SnapmaticWidget::tr("Edi&t"), picWidget);
         if (picWidget->isHidden()) {
             editMenu.addAction(SnapmaticWidget::tr("Show &In-game"), picWidget, SLOT(makePictureVisibleSlot()));
@@ -1750,7 +1750,7 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev)
     }
     QMenu contextMenu(sgdWidget);
     const int selectedCount = selectedWidgets();
-    if (contentMode < 20 || selectedCount <= 1) {
+    if (contentMode < 20 || selectedCount == 0) {
         contextMenu.addAction(SavegameWidget::tr("&View"), sgdWidget, SLOT(on_cmdView_clicked()));
         contextMenu.addAction(SavegameWidget::tr("&Export"), sgdWidget, SLOT(on_cmdCopy_clicked()));
         contextMenu.addAction(SavegameWidget::tr("&Remove"), sgdWidget, SLOT(on_cmdDelete_clicked()));
diff --git a/config.h b/config.h
index 62d6c6a..98a7897 100644
--- a/config.h
+++ b/config.h
@@ -44,7 +44,7 @@
 #endif
 
 #ifndef GTA5SYNC_APPVER
-#define GTA5SYNC_APPVER "1.9.0"
+#define GTA5SYNC_APPVER "1.9.1"
 #endif
 
 #if __cplusplus
diff --git a/res/app.rc b/res/app.rc
index b089122..849660a 100644
--- a/res/app.rc
+++ b/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, 0, 0
-PRODUCTVERSION      1, 9, 0, 0
+FILEVERSION         1, 9, 1, 0
+PRODUCTVERSION      1, 9, 1, 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.0"
+            VALUE   "FileVersion",      "1.9.1"
             VALUE   "InternalName",     "gta5view"
             VALUE   "LegalCopyright",   "Copyright � 2016-2020 Syping"
             VALUE   "OriginalFilename", "gta5view.exe"
             VALUE   "ProductName",      "gta5view"
-            VALUE   "ProductVersion",   "1.9.0"
+            VALUE   "ProductVersion",   "1.9.1"
         END
     END
 END
diff --git a/res/de.syping.gta5view.metainfo.xml b/res/de.syping.gta5view.metainfo.xml
index 13b6131..95daf20 100644
--- a/res/de.syping.gta5view.metainfo.xml
+++ b/res/de.syping.gta5view.metainfo.xml
@@ -32,6 +32,7 @@
     <developer_name>Syping</developer_name>
 
     <releases>
+        <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"/>
     </releases>
diff --git a/res/global.de.ini b/res/global.de.ini
index f3b21dc..0916785 100644
--- a/res/global.de.ini
+++ b/res/global.de.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Vinewood-Rennbahn"
 HUMLAB="Humane Labs and Research"
+ISHEIST="Cayo Perico"
 JAIL="Bolingbroke-Strafanstalt"
 KOREAT="Little Seoul"
 LACT="Land-Act-Stausee"
diff --git a/res/global.en.ini b/res/global.en.ini
index 1cde708..97c84dd 100644
--- a/res/global.en.ini
+++ b/res/global.en.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Vinewood Racetrack"
 HUMLAB="Humane Labs and Research"
+ISHEIST="Cayo Perico"
 JAIL="Bolingbroke Penitentiary"
 KOREAT="Little Seoul"
 LACT="Land Act Reservoir"
diff --git a/res/global.es.ini b/res/global.es.ini
index 60878a1..b364c50 100644
--- a/res/global.es.ini
+++ b/res/global.es.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Circuito de Vinewood"
 HUMLAB="Laboratorios Humane"
+ISHEIST="Cayo Perico"
 JAIL="Penitenciaría de Bolingbroke"
 KOREAT="Little Seoul"
 LACT="Embalse de Land Act"
diff --git a/res/global.es_MX.ini b/res/global.es_MX.ini
index 48476ea..620ef14 100644
--- a/res/global.es_MX.ini
+++ b/res/global.es_MX.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Circuito de Vinewood"
 HUMLAB="Humane Labs and Research"
+ISHEIST="Cayo Perico"
 JAIL="Penitenciaría de Bolingbroke"
 KOREAT="Little Seoul"
 LACT="Presa de Land Act"
diff --git a/res/global.fr.ini b/res/global.fr.ini
index 977500e..807c5ec 100644
--- a/res/global.fr.ini
+++ b/res/global.fr.ini
@@ -41,6 +41,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Hippodrome de Vinewood"
 HUMLAB="Laboratoires Humane"
+ISHEIST="Cayo Perico"
 JAIL="Pénitencier de Bolingbroke"
 KOREAT="Little Seoul"
 LACT="Land Act Reservoir"
diff --git a/res/global.it.ini b/res/global.it.ini
index a98e012..4c89a36 100644
--- a/res/global.it.ini
+++ b/res/global.it.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Vinewood Racetrack"
 HUMLAB="Laboratori di ricerca Humane"
+ISHEIST="Cayo Perico"
 JAIL="Bolingbroke Penitentiary"
 KOREAT="Little Seoul"
 LACT="Land Act Reservoir"
diff --git a/res/global.ja.ini b/res/global.ja.ini
index e1af8ad..f38223d 100644
--- a/res/global.ja.ini
+++ b/res/global.ja.ini
@@ -42,6 +42,7 @@ HAWICK="ハウィック"
 HEART="ハートアタック・ビーチ"
 HORS="バインウッド・レーストラック"
 HUMLAB="ヒューメイン研究所"
+ISHEIST="カヨ・ペリコ"
 JAIL="ボーリングブローク刑務所"
 KOREAT="リトル・ソウル"
 LACT="ランド・アクト貯水池"
diff --git a/res/global.ko.ini b/res/global.ko.ini
index 11ef9f4..7296638 100644
--- a/res/global.ko.ini
+++ b/res/global.ko.ini
@@ -42,6 +42,7 @@ HAWICK="호익"
 HEART="하트 어택 해변"
 HORS="바인우드 레이스트랙"
 HUMLAB="휴메인 실험 연구소"
+ISHEIST="카요 페리코"
 JAIL="볼링브로크 교도소"
 KOREAT="리틀 서울"
 LACT="랜드 액트 저수지"
diff --git a/res/global.pl.ini b/res/global.pl.ini
index 877a864..e318284 100644
--- a/res/global.pl.ini
+++ b/res/global.pl.ini
@@ -42,6 +42,7 @@ HAWICK="Hawick"
 HEART="Plaża Zawałowców"
 HORS="Tor wyścigowy Vinewood"
 HUMLAB="Humane Labs and Research"
+ISHEIST="Cayo Perico"
 JAIL="Zakład karny Bolingbroke"
 KOREAT="Mały Seul"
 LACT="Jezioro zaporowe"
diff --git a/res/global.pt.ini b/res/global.pt.ini
index 8686d6d..79d46ab 100644
--- a/res/global.pt.ini
+++ b/res/global.pt.ini
@@ -41,6 +41,7 @@ HAWICK="Hawick"
 HEART="Heart Attacks Beach"
 HORS="Hipódromo de Vinewood"
 HUMLAB="Laboratórios e Pesquisas Humane"
+ISHEIST="Cayo Perico"
 JAIL="Penitenciária Bolingbroke"
 KOREAT="Little Seoul"
 LACT="Reservatório Land Act"
diff --git a/res/global.ru.ini b/res/global.ru.ini
index 37df696..996f807 100644
--- a/res/global.ru.ini
+++ b/res/global.ru.ini
@@ -42,6 +42,7 @@ HAWICK="Хавик"
 HEART="Харт-Аттакс-Бич"
 HORS="Гоночная трасса Вайнвуда"
 HUMLAB="Лаборатория Humane Labs and Research"
+ISHEIST="Кайо-Перико"
 JAIL="Тюрьма Болингброук"
 KOREAT="Маленький Сеул"
 LACT="Лэнд-экт-резервуар"
diff --git a/res/global.zh.ini b/res/global.zh.ini
index 7d7a080..49650cc 100644
--- a/res/global.zh.ini
+++ b/res/global.zh.ini
@@ -41,6 +41,7 @@ HAWICK="霍伊克"
 HEART="驚心海灘"
 HORS="好麥塢賽馬場"
 HUMLAB="人道研究實驗室"
+ISHEIST="佩里克島"
 JAIL="博林布魯克監獄"
 KOREAT="小首爾"
 LACT="蘭艾水庫"
diff --git a/res/template.g5e b/res/template.g5e
index 42f896dba4afa8f18929dbee93215edefbb302ea..c74ba7fd8c1ffa8c11259f561b5491c5780f2128 100644
GIT binary patch
delta 229
zcmV<B02=?o1<eJp!2y5N0000000BC9+D(v4Yr`-Qg#XK&eXtW~K{rF3TT^I`AqOFC
z8iO814`RpUzh@<b=|x)Yd?U?jfea)eaPCk2>3{}`&k3Tf)nnAP)Ip^Hag!!e1LGCM
zf~iV#U7x(Z8d$QlVYZmTS6Z*Ri{sBQe0?8=(#gLY=Ily&H%3__ot`%3&&(l0T&@j*
zjw=-+>3>n8;=1F#zST}GBhlO-QpiP4foPp3jV0OwEje+=mb=fzyDLFmPAq<us4m?h
fKG{mjJH4VaNk(^Vx91si{gc-lPjp>Rla2y340&m`

delta 218
zcmV<0044v;1;Pce!2y5C0000000Ag?+D%Z)3c@fD{FgcR&{j~$O=!JYL671gB&!yh
zR`Nh=>A$;4p?KNM&dzKmnIJ7m2we8fzNwHwaql7Wgx;-AP+R3K#9eldGIWE2nD9xX
zG1V{EIfEfXtIR|*c%>OMvpAgV`gp49$b`o#>&>Eib)$6<*IP~otKGs`NBZw#rx+J}
zrp@^$XNl|X5Z;D3_LgYL?%Nn-f|i`GV9Rp|(Obq?eegWo#$dgFLhRT|YUuSM9Z9mZ
U%!>`bD5M{le?b{m%9EJ_G;r{3%m4rY


From dd7667b9f79743bb701bdda9bf0d8a88d0b4e8c4 Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Sun, 10 Jan 2021 01:33:18 +0100
Subject: [PATCH 2/4] Build fix Qt6 ifdef

---
 TranslationClass.cpp  | 12 ++++++------
 uimod/UiModWidget.cpp | 21 ++++++---------------
 2 files changed, 12 insertions(+), 21 deletions(-)

diff --git a/TranslationClass.cpp b/TranslationClass.cpp
index 05e3b8c..fd1de31 100644
--- a/TranslationClass.cpp
+++ b/TranslationClass.cpp
@@ -63,7 +63,7 @@ void TranslationClass::loadTranslation(QApplication *app)
         {
             app->installTranslator(&inQtTranslator);
         }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
         QLocale::setDefault(QLocale(currentLanguage));
 #else
         QLocale::setDefault(currentLanguage);
@@ -151,7 +151,7 @@ void TranslationClass::loadTranslation(QApplication *app)
             {
                 app->installTranslator(&inQtTranslator);
             }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
             QLocale::setDefault(QLocale(currentLanguage));
 #else
             QLocale::setDefault(currentLanguage);
@@ -184,7 +184,7 @@ void TranslationClass::loadTranslation(QApplication *app)
             {
                 app->installTranslator(&inQtTranslator);
             }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
             QLocale::setDefault(QLocale(currentLanguage));
 #else
             QLocale::setDefault(currentLanguage);
@@ -207,7 +207,7 @@ void TranslationClass::loadTranslation(QApplication *app)
             {
                 app->installTranslator(&inQtTranslator);
             }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
             QLocale::setDefault(QLocale(currentLanguage));
 #else
             QLocale::setDefault(currentLanguage);
@@ -235,7 +235,7 @@ void TranslationClass::loadTranslation(QApplication *app)
             {
                 app->installTranslator(&inQtTranslator);
             }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
             QLocale::setDefault(QLocale(currentLanguage));
 #else
             QLocale::setDefault(currentLanguage);
@@ -256,7 +256,7 @@ void TranslationClass::loadTranslation(QApplication *app)
             {
                 app->installTranslator(&inQtTranslator);
             }
-#if QT_VERSION <= 0x060000
+#if QT_VERSION >= 0x060000
             QLocale::setDefault(QLocale(currentLanguage));
 #else
             QLocale::setDefault(currentLanguage);
diff --git a/uimod/UiModWidget.cpp b/uimod/UiModWidget.cpp
index ff852fc..990ce7f 100644
--- a/uimod/UiModWidget.cpp
+++ b/uimod/UiModWidget.cpp
@@ -46,26 +46,21 @@ void UiModWidget::setImageDropEnabled(bool enabled)
 
 void UiModWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent)
 {
-    if (filesDropEnabled && dragEnterEvent->mimeData()->hasUrls())
-    {
-        QStringList pathList;
+    if (filesDropEnabled && dragEnterEvent->mimeData()->hasUrls()) {
+        QVector<QString> pathList;
         const QList<QUrl> urlList = dragEnterEvent->mimeData()->urls();
 
-        for (const QUrl &currentUrl : urlList)
-        {
-            if (currentUrl.isLocalFile())
-            {
+        for (const QUrl &currentUrl : urlList) {
+            if (currentUrl.isLocalFile()) {
                 pathList.append(currentUrl.toLocalFile());
             }
         }
 
-        if (!pathList.isEmpty())
-        {
+        if (!pathList.isEmpty()) {
             dragEnterEvent->acceptProposedAction();
         }
     }
-    else if (imageDropEnabled && dragEnterEvent->mimeData()->hasImage())
-    {
+    else if (imageDropEnabled && dragEnterEvent->mimeData()->hasImage()) {
         dragEnterEvent->acceptProposedAction();
     }
 }
@@ -80,11 +75,7 @@ void UiModWidget::paintEvent(QPaintEvent *paintEvent)
 {
     Q_UNUSED(paintEvent)
     QStyleOption opt;
-#if QT_VERSION <= 0x060000
     opt.initFrom(this);
-#else
-    opt.init(this);
-#endif
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }

From b8ad311912e1188855ad03c8f1b1d80e298e2e83 Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Wed, 27 Jan 2021 14:40:50 +0100
Subject: [PATCH 3/4] Fix rare PictureDialog crash issue

---
 PictureDialog.cpp | 54 +++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/PictureDialog.cpp b/PictureDialog.cpp
index e77ea73..958d825 100644
--- a/PictureDialog.cpp
+++ b/PictureDialog.cpp
@@ -199,7 +199,7 @@ void PictureDialog::setupPictureDialog()
     }
 
     installEventFilter(this);
-    installEventFilter(ui->labPicture);
+    // installEventFilter(ui->labPicture);
 
     // DPI calculation
     ui->hlButtons->setSpacing(6 * screenRatio);
@@ -214,32 +214,32 @@ void PictureDialog::setupPictureDialog()
 
 PictureDialog::~PictureDialog()
 {
-#ifdef Q_OS_WIN
-#if QT_VERSION >= 0x050200
-    if (naviEnabled)
-    {
-        for (QObject *obj : layout()->menuBar()->children())
-        {
-            delete obj;
-        }
-        delete layout()->menuBar();
-    }
-#endif
-#else
-    if (naviEnabled)
-    {
-        for (QObject *obj : layout()->menuBar()->children())
-        {
-            delete obj;
-        }
-        delete layout()->menuBar();
-    }
-#endif
-    for (QObject *obj : manageMenu->children())
-    {
-        delete obj;
-    }
-    delete manageMenu;
+//#ifdef Q_OS_WIN
+//#if QT_VERSION >= 0x050200
+//  if (naviEnabled)
+//  {
+//      for (QObject *obj : layout()->menuBar()->children())
+//      {
+//          delete obj;
+//      }
+//      delete layout()->menuBar();
+//  }
+//#endif
+//#else
+//  if (naviEnabled)
+//  {
+//     for (QObject *obj : layout()->menuBar()->children())
+//      {
+//          delete obj;
+//      }
+//      delete layout()->menuBar();
+//  }
+//#endif
+//  for (QObject *obj : manageMenu->children())
+//  {
+//      delete obj;
+//  }
+//  delete manageMenu;
     delete ui;
 }
 

From 98cfa7c5deac5a124eef194cb9d56fafbe4459f8 Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Mon, 22 Mar 2021 05:54:46 +0100
Subject: [PATCH 4/4] gta5view 1.9.2

---
 .ci/app.rc                          |   2 +-
 .ci/gta5view.nsi                    |   4 +-
 RagePhoto.cpp                       | 114 ++++++++++++++++++++--------
 config.h                            |   4 +-
 res/app.rc                          |  10 +--
 res/de.syping.gta5view.metainfo.xml |   3 +-
 res/gta5sync_fr.qm                  | Bin 47993 -> 47995 bytes
 res/gta5sync_fr.ts                  |   2 +-
 8 files changed, 95 insertions(+), 44 deletions(-)

diff --git a/.ci/app.rc b/.ci/app.rc
index ec976d2..92f6518 100644
--- a/.ci/app.rc
+++ b/.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"
diff --git a/.ci/gta5view.nsi b/.ci/gta5view.nsi
index 2b586d7..9b16d1b 100644
--- a/.ci/gta5view.nsi
+++ b/.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"
diff --git a/RagePhoto.cpp b/RagePhoto.cpp
index 9ddda87..5ea3c11 100644
--- a/RagePhoto.cpp
+++ b/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];
-        size = dataBuffer.read(photoHeader, 256);
-        if (size != 256)
+        char *photoHeader = static_cast<char*>(malloc(256));
+        if (!photoHeader)
             return false;
+        size = dataBuffer.read(photoHeader, 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];
-        size = dataBuffer.read(photoData, t_photoSize);
-        if (size != t_photoSize)
+        char *photoData = static_cast<char*>(malloc(t_photoSize));
+        if (!photoData)
             return false;
+        size = dataBuffer.read(photoData, 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];
-        size = dataBuffer.read(jsonBytes, p_jsonBuffer);
-        if (size != p_jsonBuffer)
+        char *jsonBytes = static_cast<char*>(malloc(p_jsonBuffer));
+        if (!jsonBytes)
             return false;
+        size = dataBuffer.read(jsonBytes, 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];
-        size = dataBuffer.read(titlBytes, p_titlBuffer);
-        if (size != p_titlBuffer)
+        char *titlBytes = static_cast<char*>(malloc(p_titlBuffer));
+        if (!titlBytes)
             return false;
+        size = dataBuffer.read(titlBytes, 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];
-        size = dataBuffer.read(descBytes, p_descBuffer);
-        if (size != p_descBuffer)
+        char *descBytes = static_cast<char*>(malloc(p_descBuffer));
+        if (!descBytes)
             return false;
+        size = dataBuffer.read(descBytes, 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];
-            size = dataBuffer.read(compressedPhotoHeader, compressedSize);
-            if (size != compressedSize)
+            char *compressedPhotoHeader = static_cast<char*>(malloc(compressedSize));
+            if (!compressedPhotoHeader)
                 return false;
+            size = dataBuffer.read(compressedPhotoHeader, 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];
-            size = dataBuffer.read(compressedPhoto, compressedSize);
-            if (size != compressedSize)
+            char *compressedPhoto = static_cast<char*>(malloc(compressedSize));
+            if (!compressedPhoto)
                 return false;
+            size = dataBuffer.read(compressedPhoto, 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];
-            size = dataBuffer.read(compressedJson, compressedSize);
-            if (size != compressedSize)
+            char *compressedJson = static_cast<char*>(malloc(compressedSize));
+            if (!compressedJson)
                 return false;
+            size = dataBuffer.read(compressedJson, 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];
-            size = dataBuffer.read(compressedTitl, compressedSize);
-            if (size != compressedSize)
+            char *compressedTitl = static_cast<char*>(malloc(compressedSize));
+            if (!compressedTitl)
                 return false;
+            size = dataBuffer.read(compressedTitl, 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];
-            size = dataBuffer.read(compressedDesc, compressedSize);
-            if (size != compressedSize)
+            char *compressedDesc = static_cast<char*>(malloc(compressedSize));
+            if (!compressedDesc)
                 return false;
+            size = dataBuffer.read(compressedDesc, 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);
diff --git a/config.h b/config.h
index 98a7897..d3d59d2 100644
--- a/config.h
+++ b/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
diff --git a/res/app.rc b/res/app.rc
index 849660a..9eb654c 100644
--- a/res/app.rc
+++ b/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
diff --git a/res/de.syping.gta5view.metainfo.xml b/res/de.syping.gta5view.metainfo.xml
index 95daf20..aa82124 100644
--- a/res/de.syping.gta5view.metainfo.xml
+++ b/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"/>
diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm
index d638131027f37c2c39ca25abc33b572d3113d9c6..9c8386dd6817e68fb6a743e63d02b895e75c66d6 100644
GIT binary patch
delta 3340
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

delta 3338
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

diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts
index ce395c9..5d5c39f 100644
--- a/res/gta5sync_fr.ts
+++ b/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"/>