diff --git a/CMakeLists.txt b/CMakeLists.txt index f028be6..97d4837 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,6 +177,24 @@ if(FLATPAK_BUILD) ) endif() +option(WITH_MOTD "Developer message system directed to users" OFF) +if(WITH_MOTD) + list(APPEND GTA5VIEW_HEADERS + MessageThread.h + ) + list(APPEND GTA5VIEW_SOURCES + MessageThread.cpp + ) + list(APPEND GTA5VIEW_DEFINES + -DGTA5SYNC_MOTD + ) + if(MOTD_WEBURL) + list(APPEND GTA5VIEW_DEFINES + "-DGTA5SYNC_MOTD_WEBURL=\"${MOTD_WEBURL}\"" + ) + endif() +endif() + option(WITH_TELEMETRY "Hardware survey and basic telemetry system" OFF) if(WITH_TELEMETRY) list(APPEND GTA5VIEW_HEADERS diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp index 498ad90..a944638 100644 --- a/DatabaseThread.cpp +++ b/DatabaseThread.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2020 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 @@ -48,11 +48,8 @@ void DatabaseThread::run() while (threadRunning) { - if (threadRunning) - { - QTimer::singleShot(300000, &threadLoop, SLOT(quit())); - threadLoop.exec(); - } + QTimer::singleShot(300000, &threadLoop, SLOT(quit())); + threadLoop.exec(); } } diff --git a/MessageThread.cpp b/MessageThread.cpp new file mode 100644 index 0000000..2781ac6 --- /dev/null +++ b/MessageThread.cpp @@ -0,0 +1,111 @@ +/***************************************************************************** +* gta5view Grand Theft Auto V Profile Viewer +* Copyright (C) 2020 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 +* 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 . +*****************************************************************************/ + +#include "TranslationClass.h" +#include "MessageThread.h" +#include "AppEnv.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include + +MessageThread::MessageThread(uint cacheId, QObject *parent) : QThread(parent), cacheId(cacheId) +{ + threadRunning = true; +} + +void MessageThread::run() +{ + QEventLoop threadLoop; + + QObject::connect(this, SIGNAL(threadTerminated()), &threadLoop, SLOT(quit())); + + while (threadRunning) { + { +#ifdef GTA5SYNC_MOTD_WEBURL + QUrl motdWebUrl = QUrl(GTA5SYNC_MOTD_WEBURL); +#else + QUrl motdWebUrl = QUrl("https://motd.syping.de/gta5view-dev/"); +#endif + QUrlQuery urlQuery(motdWebUrl); + urlQuery.addQueryItem("code", GTA5SYNC_BUILDCODE); + urlQuery.addQueryItem("cacheid", QString::number(cacheId)); + urlQuery.addQueryItem("lang", Translator->getCurrentLanguage()); + urlQuery.addQueryItem("version", GTA5SYNC_APPVER); + motdWebUrl.setQuery(urlQuery); + + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QNetworkRequest netRequest(motdWebUrl); + netRequest.setRawHeader("User-Agent", AppEnv::getUserAgent()); + QNetworkReply *netReply = netManager->get(netRequest); + + QEventLoop downloadLoop; + QObject::connect(netManager, SIGNAL(finished(QNetworkReply*)), &downloadLoop, SLOT(quit())); + QObject::connect(this, SIGNAL(threadTerminated()), &threadLoop, SLOT(quit())); + QTimer::singleShot(60000, &downloadLoop, SLOT(quit())); + downloadLoop.exec(); + + if (netReply->isFinished()) { + QByteArray jsonContent = netReply->readAll(); + QString headerData = QString::fromUtf8(netReply->rawHeader("gta5view")); + if (!headerData.isEmpty()) { + QMap headerMap; + const QStringList headerVarList = headerData.split(';'); + for (QString headerVar : headerVarList) { + QStringList varValueList = headerVar.split('='); + if (varValueList.length() >= 2) { + const QString variable = varValueList.at(0).trimmed(); + varValueList.removeFirst(); + const QString value = varValueList.join('='); + headerMap.insert(variable, value); + } + } + if (headerMap.value("update", "false") == "true") { + QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonContent); + emit messagesArrived(jsonDocument.object()); + } + if (headerMap.contains("cache")) { + bool uintOk; + uint cacheVal = headerMap.value("cache").toUInt(&uintOk); + if (uintOk) { + cacheId = cacheVal; + emit updateCacheId(cacheId); + } + } + } + } + + delete netReply; + delete netManager; + } + + QTimer::singleShot(300000, &threadLoop, SLOT(quit())); + threadLoop.exec(); + } +} + +void MessageThread::terminateThread() +{ + threadRunning = false; + emit threadTerminated(); +} diff --git a/MessageThread.h b/MessageThread.h new file mode 100644 index 0000000..fa2d25b --- /dev/null +++ b/MessageThread.h @@ -0,0 +1,48 @@ +/***************************************************************************** +* gta5view Grand Theft Auto V Profile Viewer +* Copyright (C) 2020 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 +* 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 . +*****************************************************************************/ + +#ifndef MESSAGETHREAD_H +#define MESSAGETHREAD_H + +#include +#include +#include + +class MessageThread : public QThread +{ + Q_OBJECT +public: + explicit MessageThread(uint cacheId, QObject *parent = 0); + +public slots: + void terminateThread(); + +private: + bool threadRunning; + uint cacheId; + +protected: + void run(); + +signals: + void messagesArrived(const QJsonObject &messageObject); + void updateCacheId(uint cacheId); + void threadTerminated(); +}; + +#endif // MESSAGETHREAD_H diff --git a/UserInterface.cpp b/UserInterface.cpp index a9d7734..78476ea 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -40,14 +40,21 @@ #include #include #include +#include #include #include #include #include +#ifdef GTA5SYNC_MOTD +UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, MessageThread *threadMessage, QWidget *parent) : + QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), threadMessage(threadMessage), + ui(new Ui::UserInterface) +#else UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), ui(new Ui::UserInterface) +#endif { ui->setupUi(this); contentMode = 0; @@ -328,7 +335,11 @@ void UserInterface::closeProfile_p() void UserInterface::closeEvent(QCloseEvent *ev) { Q_UNUSED(ev) +#ifdef GTA5SYNC_MOTD + threadMessage->terminateThread(); +#else threadDB->terminateThread(); +#endif } UserInterface::~UserInterface() @@ -603,6 +614,119 @@ void UserInterface::settingsApplied(int _contentMode, bool languageChanged) } } +#ifdef GTA5SYNC_MOTD +void UserInterface::messagesArrived(const QJsonObject &object) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Messages"); + QJsonObject::const_iterator it = object.constBegin(); + QJsonObject::const_iterator end = object.constEnd(); + QStringList messages; + while (it != end) { + const QString key = it.key(); + const QJsonValue value = it.value(); + bool uintOk; + uint messageId = key.toUInt(&uintOk); + if (uintOk && value.isString()) { + const QString valueStr = value.toString(); + settings.setValue(QString::number(messageId), valueStr); + messages << valueStr; + } + it++; + } + settings.endGroup(); + if (!messages.isEmpty()) + showMessages(messages); +} + +void UserInterface::showMessages(const QStringList messages) +{ + QDialog *messageDialog = new QDialog(this); + messageDialog->setWindowTitle(tr("%1 - Messages").arg(GTA5SYNC_APPSTR)); + messageDialog->setWindowFlags(messageDialog->windowFlags()^Qt::WindowContextHelpButtonHint); + QVBoxLayout *messageLayout = new QVBoxLayout; + messageDialog->setLayout(messageLayout); + QStackedWidget *stackWidget = new QStackedWidget(messageDialog); + for (const QString message : messages) { + QLabel *messageLabel = new QLabel(messageDialog); + messageLabel->setText(message); + messageLabel->setWordWrap(true); + stackWidget->addWidget(messageLabel); + } + messageLayout->addWidget(stackWidget); + QHBoxLayout *buttonLayout = new QHBoxLayout; + QPushButton *backButton = new QPushButton(messageDialog); + QPushButton *nextButton = new QPushButton(messageDialog); + if (QIcon::hasThemeIcon("go-previous") && QIcon::hasThemeIcon("go-next") && QIcon::hasThemeIcon("list-add")) { + backButton->setIcon(QIcon::fromTheme("go-previous")); + nextButton->setIcon(QIcon::fromTheme("go-next")); + } + else { + backButton->setIcon(QIcon(":/img/back.svgz")); + nextButton->setIcon(QIcon(":/img/next.svgz")); + } + backButton->setEnabled(false); + if (stackWidget->count() <= 1) { + nextButton->setEnabled(false); + } + buttonLayout->addWidget(backButton); + buttonLayout->addWidget(nextButton); + buttonLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); + QPushButton *closeButton = new QPushButton(messageDialog); + closeButton->setText(tr("&Close")); + if (QIcon::hasThemeIcon("dialog-close")) { + closeButton->setIcon(QIcon::fromTheme("dialog-close")); + } + else if (QIcon::hasThemeIcon("gtk-close")) { + closeButton->setIcon(QIcon::fromTheme("gtk-close")); + } + buttonLayout->addWidget(closeButton); + messageLayout->addLayout(buttonLayout); + QObject::connect(backButton, &QPushButton::clicked, [stackWidget,backButton,nextButton,closeButton]() { + int index = stackWidget->currentIndex(); + if (index > 0) { + index--; + stackWidget->setCurrentIndex(index); + nextButton->setEnabled(true); + if (index > 0) { + backButton->setEnabled(true); + } + else { + backButton->setEnabled(false); + closeButton->setFocus(); + } + } + }); + QObject::connect(nextButton, &QPushButton::clicked, [stackWidget,backButton,nextButton,closeButton]() { + int index = stackWidget->currentIndex(); + if (index < stackWidget->count()-1) { + index++; + stackWidget->setCurrentIndex(index); + backButton->setEnabled(true); + if (index < stackWidget->count()-1) { + nextButton->setEnabled(true); + } + else { + nextButton->setEnabled(false); + closeButton->setFocus(); + } + } + }); + QObject::connect(closeButton, &QPushButton::clicked, messageDialog, &QDialog::accept); + QObject::connect(messageDialog, &QDialog::finished, messageDialog, &QDialog::deleteLater); + QTimer::singleShot(0, closeButton, SLOT(setFocus())); + messageDialog->show(); +} + +void UserInterface::updateCacheId(uint cacheId) +{ + QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + settings.beginGroup("Messages"); + settings.setValue("CacheId", cacheId); + settings.endGroup(); +} +#endif + void UserInterface::on_actionSelect_GTA_Folder_triggered() { QString GTAV_Folder_Temp = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); diff --git a/UserInterface.h b/UserInterface.h index c6f9ed2..7e5259d 100644 --- a/UserInterface.h +++ b/UserInterface.h @@ -31,6 +31,10 @@ #include #include +#ifdef GTA5SYNC_MOTD +#include "MessageThread.h" +#endif + namespace Ui { class UserInterface; } @@ -39,7 +43,11 @@ class UserInterface : public QMainWindow { Q_OBJECT public: +#ifdef GTA5SYNC_MOTD + explicit UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, MessageThread *messageThread, QWidget *parent = 0); +#else explicit UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent = 0); +#endif void setupDirEnv(); ~UserInterface(); @@ -67,6 +75,11 @@ private slots: void on_actionSet_Crew_triggered(); void on_actionSet_Title_triggered(); void settingsApplied(int contentMode, bool languageChanged); +#ifdef GTA5SYNC_MOTD + void messagesArrived(const QJsonObject &object); + void showMessages(const QStringList messages); + void updateCacheId(uint cacheId); +#endif protected: void closeEvent(QCloseEvent *ev); @@ -75,6 +88,9 @@ private: ProfileDatabase *profileDB; CrewDatabase *crewDB; DatabaseThread *threadDB; +#ifdef GTA5SYNC_MOTD + MessageThread *threadMessage; +#endif Ui::UserInterface *ui; ProfileInterface *profileUI; QList profileBtns; diff --git a/gta5view.pro b/gta5view.pro index db2c77e..7761343 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -40,6 +40,7 @@ SOURCES += main.cpp \ ImportDialog.cpp \ JsonEditorDialog.cpp \ MapLocationDialog.cpp \ + MessageThread.cpp \ OptionsDialog.cpp \ PictureDialog.cpp \ PictureExport.cpp \ @@ -81,6 +82,7 @@ HEADERS += \ ImportDialog.h \ JsonEditorDialog.h \ MapLocationDialog.h \ + MessageThread.h \ OptionsDialog.h \ PictureDialog.h \ PictureExport.h \ @@ -236,10 +238,10 @@ INSTALLS += target pixmaps appfiles # QCONF BASED BUILD STUFF -contains(DEFINES, GTA5SYNC_QCONF){ +contains(DEFINES, GTA5SYNC_QCONF) { isEqual(QT_MAJOR_VERSION, 4): RESOURCES -= res/tr_qt4.qrc isEqual(QT_MAJOR_VERSION, 5): RESOURCES -= res/tr_qt5.qrc - !contains(DEFINES, GTA5SYNC_QCONF_IN){ + !contains(DEFINES, GTA5SYNC_QCONF_IN) { RESOURCES -= res/tr_g5p.qrc langfiles.path = $$GTA5SYNC_PREFIX/share/gta5view/translations langfiles.files = $$PWD/res/gta5sync_en_US.qm $$PWD/res/gta5sync_de.qm $$PWD/res/gta5sync_fr.qm $$PWD/res/gta5sync_ko.qm $$PWD/res/gta5sync_ru.qm $$PWD/res/gta5sync_uk.qm $$PWD/res/gta5sync_zh_TW.qm $$PWD/res/qtbase_en_GB.qm @@ -249,13 +251,25 @@ contains(DEFINES, GTA5SYNC_QCONF){ # TELEMETRY BASED STUFF -!contains(DEFINES, GTA5SYNC_TELEMETRY){ +!contains(DEFINES, GTA5SYNC_TELEMETRY) { SOURCES -= TelemetryClass.cpp \ tmext/TelemetryClassAuthenticator.cpp HEADERS -= TelemetryClass.h \ tmext/TelemetryClassAuthenticator.h } +!contains(DEFINES, GTA5SYNC_MOTD) { + SOURCES -= MessageThread.cpp + HEADERS -= MessageThread.h +} else { + lessThan(QT_MAJOR_VERSION, 5) { + SOURCES -= MessageThread.cpp + HEADERS -= MessageThread.h + DEFINES -= GTA5SYNC_MOTD + message("Messages require Qt5 or newer!") + } +} + # CMAKE BASED STUFF unix: greaterThan(QT_MAJOR_VERSION, 4) { diff --git a/main.cpp b/main.cpp index f08ab01..870a1bb 100644 --- a/main.cpp +++ b/main.cpp @@ -59,6 +59,10 @@ #include #endif +#ifdef GTA5SYNC_MOTD +#include "MessageThread.h" +#endif + #ifdef GTA5SYNC_TELEMETRY #include "TelemetryClass.h" #endif @@ -258,9 +262,7 @@ int main(int argc, char *argv[]) bool readOk = picture.readingPictureFromFile(arg1); picDialog.setWindowIcon(IconLoader::loadingAppIcon()); picDialog.setSnapmaticPicture(&picture, readOk); -#ifndef Q_OS_LINUX picDialog.setWindowFlags(picDialog.windowFlags()^Qt::Dialog^Qt::Window); -#endif int crewID = picture.getSnapmaticProperties().crewID; if (crewID != 0) { crewDB.addCrew(crewID); } @@ -305,7 +307,26 @@ int main(int argc, char *argv[]) QObject::connect(&threadDB, SIGNAL(finished()), &a, SLOT(quit())); threadDB.start(); +#ifdef GTA5SYNC_MOTD + uint cacheId; + { + QSettings messageSettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); + messageSettings.beginGroup("Messages"); + cacheId = messageSettings.value("CacheId", 0).toUInt(); + messageSettings.endGroup(); + } + MessageThread threadMessage(cacheId); + QObject::connect(&threadMessage, SIGNAL(finished()), &threadDB, SLOT(terminateThread())); + threadMessage.start(); +#endif + +#ifdef GTA5SYNC_MOTD + UserInterface uiWindow(&profileDB, &crewDB, &threadDB, &threadMessage); + QObject::connect(&threadMessage, SIGNAL(messagesArrived(QJsonObject)), &uiWindow, SLOT(messagesArrived(QJsonObject))); + QObject::connect(&threadMessage, SIGNAL(updateCacheId(uint)), &uiWindow, SLOT(updateCacheId(uint))); +#else UserInterface uiWindow(&profileDB, &crewDB, &threadDB); +#endif uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); uiWindow.setupDirEnv(); #ifdef Q_OS_ANDROID diff --git a/res/gta5sync.ts b/res/gta5sync.ts index 9510eff..e408904 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -1315,7 +1315,7 @@ Press 1 for Default View - + All files (**) @@ -1360,26 +1360,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + No valid file is selected @@ -1398,13 +1398,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1614,7 +1614,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1622,17 +1622,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -2209,22 +2209,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK @@ -2233,7 +2233,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -2265,6 +2265,7 @@ Press 1 for Default View + &Close @@ -2300,8 +2301,8 @@ Press 1 for Default View - - + + &About %1 @@ -2357,15 +2358,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2414,29 +2415,34 @@ Press 1 for Default View - - - + + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format + + + %1 - Messages + + diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index ce9dec1..246cd44 100644 Binary files a/res/gta5sync_de.qm and b/res/gta5sync_de.qm differ diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 8b00064..0d5d6e2 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -1333,13 +1333,13 @@ Drücke 1 für Standardmodus - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1359,7 +1359,7 @@ Drücke 1 für Standardmodus - + All files (**) Alle Dateien (**) @@ -1380,13 +1380,13 @@ Drücke 1 für Standardmodus - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1427,7 +1427,7 @@ Drücke 1 für Standardmodus - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1631,13 +1631,13 @@ Drücke 1 für Standardmodus Exportiere Datei %1 von %2 Dateien - + All profile files (*.g5e SGTA* PGTA*) Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1645,17 +1645,17 @@ Drücke 1 für Standardmodus QApplication - + Font Schrift - + Selected Font: %1 Ausgewähle Schrift: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Willkommen zu %1!</h4>Möchtest du %1 einstellen bevor du es nutzt? @@ -2234,22 +2234,22 @@ Drücke 1 für Standardmodus TelemetryDialog - + %1 User Statistics %1 Benutzerstatistik - + You want help %1 to improve in the future by including personal usage data in your submission? Sollen bei Einreichungen Persönliche Nutzungsdaten einbezogen werden um %1 in der Zukunft zu unterstützen? - + Yes, I want include personal usage data. Ja, ich möchte Persönliche Nutzungsdaten einbeziehen. - + &OK &OK @@ -2349,7 +2349,7 @@ Drücke 1 für Standardmodus - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2365,6 +2365,7 @@ Drücke 1 für Standardmodus + &Close S&chließen @@ -2399,51 +2400,56 @@ Drücke 1 für Standardmodus Dateien &importieren... - - - + + + Select Profile Profil auswählen - - + + Select GTA V Folder... Wähle GTA V Ordner... - + Open File... Datei öffnen... - + %2 - %1 %2 - %1 - - + + &About %1 &Über %1 - - - - + + + + Open File Datei öffnen - + Can't open %1 because of not valid file format Kann nicht %1 öffnen weil Dateiformat nicht gültig ist + + + %1 - Messages + %1 - Nachrichten + &Reload diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 386924d..518ff52 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -1331,19 +1331,19 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1358,14 +1358,14 @@ Press 1 for Default View - + All files (**) - + No valid file is selected @@ -1384,13 +1384,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1614,7 +1614,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1622,17 +1622,17 @@ Press 1 for Default View QApplication - + Font - + Selected Font: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? @@ -2209,22 +2209,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? - + %1 User Statistics - + Yes, I want include personal usage data. - + &OK @@ -2233,7 +2233,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -2265,6 +2265,7 @@ Press 1 for Default View + &Close @@ -2295,8 +2296,8 @@ Press 1 for Default View - - + + &About %1 @@ -2352,15 +2353,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - + + Select GTA V Folder... @@ -2400,30 +2401,35 @@ Press 1 for Default View - - - + + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format + + + %1 - Messages + + diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 891d5f2..a746d61 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -1344,13 +1344,13 @@ Appuyer sur 1 pour le mode par défaut - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -1365,7 +1365,7 @@ Appuyer sur 1 pour le mode par défaut - + All files (**) Tous les fichiers (**) @@ -1387,7 +1387,7 @@ Appuyer sur 1 pour le mode par défaut - + No valid file is selected Fichier invalide @@ -1398,13 +1398,13 @@ Appuyer sur 1 pour le mode par défaut - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1632,13 +1632,13 @@ Appuyer sur 1 pour le mode par défaut Supprimer la sélection ? - + All profile files (*.g5e SGTA* PGTA*) Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1646,17 +1646,17 @@ Appuyer sur 1 pour le mode par défaut QApplication - + Font Police - + Selected Font: %1 Police sélectionnée : %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Bienvenue sur %1!</h4>Voulez-vous configurer %1 avant de l'utiliser t? @@ -2237,22 +2237,22 @@ Appuyer sur 1 pour le mode par défaut TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? Voulez-vous aider au développement de %1 en transmettant vos données d'utilisation ? - + %1 User Statistics Statistiques utilisateurs %1 - + Yes, I want include personal usage data. Oui, je veux partager mes données d'utilisation. - + &OK &OK @@ -2287,6 +2287,7 @@ Appuyer sur 1 pour le mode par défaut + &Close Fer&mer @@ -2362,15 +2363,15 @@ Appuyer sur 1 pour le mode par défaut - + Select &GTA V Folder... Modifier l'emplacement de &GTA V... - - + + Select GTA V Folder... Modifier l'emplacement de GTA V... @@ -2416,42 +2417,47 @@ Appuyer sur 1 pour le mode par défaut - + %2 - %1 %2 - %1 - - + + &About %1 &À propos de %1 - - - + + + Select Profile Sélectionner un profil - + Open File... Ouvrir... - - - - + + + + Open File Ouvrir - + Can't open %1 because of not valid file format Impossible d'ouvrir %1, format invalide + + + %1 - Messages + + diff --git a/res/gta5sync_ko.ts b/res/gta5sync_ko.ts index 7e71a0b..7d2c644 100644 --- a/res/gta5sync_ko.ts +++ b/res/gta5sync_ko.ts @@ -1347,7 +1347,7 @@ Press 1 for Default View - + All files (**) 모든 파일 (**) @@ -1392,26 +1392,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V로 내보내기 (*.g5e) - + Savegames files (SGTA*) 세이브 파일 (SGTA*) - + Snapmatic pictures (PGTA*) 스냅매틱 사진 (PGTA*) - + No valid file is selected 올바른 파일이 선택되지 않았습니다 @@ -1432,13 +1432,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 스냅매틱 사진을 읽지 못했습니다 - + Failed to read Savegame file 세이브 파일을 읽지 못했습니다 @@ -1657,7 +1657,7 @@ Press 1 for Default View 제목 변경 - + All profile files (*.g5e SGTA* PGTA*) 모든 프로필 파일 (*.g5e SGTA* PGTA*) @@ -1665,17 +1665,17 @@ Press 1 for Default View QApplication - + Font 폰트 - + Selected Font: %1 선택된 폰트: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>%1에 오신 것을 환영합니다!</h4>%1을 사용하기 전에 구성하시겠습니까? @@ -2259,22 +2259,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? 개인 사용 데이터를 제출에 포함시켜 %1이(가) 개선되기를 원합니까? - + %1 User Statistics %1 사용자 통계 - + Yes, I want include personal usage data. 예, 개인 사용 데이터를 포함시키고 싶습니다. - + &OK 확인(&O) @@ -2283,7 +2283,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2316,6 +2316,7 @@ Press 1 for Default View + &Close 닫기(&C) @@ -2351,8 +2352,8 @@ Press 1 for Default View - - + + &About %1 %1 정보(&A) @@ -2408,15 +2409,15 @@ Press 1 for Default View - + Select &GTA V Folder... GTA V 폴더 선택(&G)... - - + + Select GTA V Folder... GTA V 폴더 선택 @@ -2465,29 +2466,34 @@ Press 1 for Default View 인게임 숨기기 - - - + + + Select Profile 프로필 선택 - + Open File... 파일 열기... - - - - + + + + Open File 파일 열기 - + Can't open %1 because of not valid file format 올바른 파일 형식이 아니므로 %1을 열 수 없습니다 + + + %1 - Messages + + diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 797cc8b..1b2dd12 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -1345,13 +1345,13 @@ Press 1 for Default View - + Savegames files (SGTA*) Файлы сохранения (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) @@ -1359,7 +1359,7 @@ Press 1 for Default View - + All files (**) Все файлы (**) @@ -1380,20 +1380,20 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не удалось загрузить картинку Snapmatic - + Failed to read Savegame file Не удалось загрузить файл сохранения - + No valid file is selected Выбранный файл неверен @@ -1646,13 +1646,13 @@ Press 1 for Default View Экспортируется файл %1 из %2 - + All profile files (*.g5e SGTA* PGTA*) Все файлы профиля (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1660,17 +1660,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Выбранный шрифт: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Добро пожаловать в %1!</h4>Хочешь изменить настройки %1 перед использованием? @@ -2249,22 +2249,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? Разрешишь нам собирать статистику о пользовании тобой %1? Это поможет нам в разработке. - + %1 User Statistics %1 Пользовательская статистика - + Yes, I want include personal usage data. Да, передавать данные о пользовании программой. - + &OK &ОК @@ -2339,7 +2339,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2375,6 +2375,7 @@ Press 1 for Default View + &Close &Закрыть @@ -2414,51 +2415,56 @@ Press 1 for Default View &Открыть файл... - - - + + + Select Profile Выбор профиля - - + + Select GTA V Folder... Выбрать папку GTA V... - + %2 - %1 %2 - %1 - - + + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Не удалось открыть %1 из-за неверного формата файла + + + %1 - Messages + + &Reload diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 2115c75..fda1d75 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -1337,7 +1337,7 @@ Press 1 for Default View - + All files (**) Усі файли (**) @@ -1382,26 +1382,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли збереження гри (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic зображення (PGTA*) - + No valid file is selected Вибрані недійсні файли @@ -1422,13 +1422,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не вдалося прочитати Snapmatic картинку - + Failed to read Savegame file Не вдалося прочитати файл збереження гри @@ -1642,7 +1642,7 @@ Press 1 for Default View Змінити назву - + All profile files (*.g5e SGTA* PGTA*) Усі файли зображень (*.g5e SGTA* PGTA*) @@ -1650,17 +1650,17 @@ Press 1 for Default View QApplication - + Font Шрифт - + Selected Font: %1 Вибраний шрифт:%1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>Ласкаво просимо до %1!</h4>Ви хочете налаштувати %1 перед використанням? @@ -2239,22 +2239,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? Ви хочете допомогти %1 покращитись у майбутньому, включивши дані особистого користування? - + %1 User Statistics %1 Статистика користувачів - + Yes, I want include personal usage data. Так, я хочу включити дані особистого користування. - + &OK &OK &OK @@ -2264,7 +2264,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2296,6 +2296,7 @@ Press 1 for Default View + &Close &Закрити @@ -2331,8 +2332,8 @@ Press 1 for Default View - - + + &About %1 &Про %1 @@ -2388,15 +2389,15 @@ Press 1 for Default View - + Select &GTA V Folder... Вибрати &GTA V теку... - - + + Select GTA V Folder... Вибрати GTA V теку... @@ -2445,29 +2446,34 @@ Press 1 for Default View Сховати у грі - - - + + + Select Profile Вибрати профіль - + Open File... Відкрити файл... - - - - + + + + Open File Відкрити файл - + Can't open %1 because of not valid file format Неможливо відкрити %1 через невідомий формат файлу + + + %1 - Messages + + diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 670f5ff..20b79d4 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -1331,7 +1331,7 @@ Press 1 for Default View - + All files (**) 所有檔案 (**) @@ -1376,26 +1376,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) 遊戲存檔 (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - + No valid file is selected 沒有選擇有效的檔案 @@ -1414,13 +1414,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 無法讀取 Snapmatic 圖片 - + Failed to read Savegame file 無法讀取遊戲存檔 @@ -1632,7 +1632,7 @@ Press 1 for Default View 更改標題 - + All profile files (*.g5e SGTA* PGTA*) 所有設定檔檔案 (*.g5e SGTA* PGTA*) @@ -1640,17 +1640,17 @@ Press 1 for Default View QApplication - + Font 字體 - + Selected Font: %1 選擇的字體: %1 - + <h4>Welcome to %1!</h4>You want to configure %1 before you start using it? <h4>歡迎使用 %1!</h4> 你想在開始前先設定 %1 嗎? @@ -2229,22 +2229,22 @@ Press 1 for Default View TelemetryDialog - + You want help %1 to improve in the future by including personal usage data in your submission? 你希望通過收集資料來幫助改善 %1 嗎? - + %1 User Statistics %1 使用者統計 - + Yes, I want include personal usage data. 是的,我想幫忙. - + &OK 確定(&O) @@ -2253,7 +2253,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2285,6 +2285,7 @@ Press 1 for Default View + &Close 關閉(&C) @@ -2320,8 +2321,8 @@ Press 1 for Default View - - + + &About %1 關於 %1(&A) @@ -2377,15 +2378,15 @@ Press 1 for Default View - + Select &GTA V Folder... 選擇 GTA V 資料夾(&G)... - - + + Select GTA V Folder... 選擇 GTA V 資料夾... @@ -2434,29 +2435,34 @@ Press 1 for Default View 在遊戲中隱藏 - - - + + + Select Profile 選擇設定檔 - + Open File... 開啟檔案... - - - - + + + + Open File 開啟檔案 - + Can't open %1 because of not valid file format 格式無效,無法開啟 %1 + + + %1 - Messages + +