improved telemetry + player list and fixed some other issues

This commit is contained in:
Syping 2018-01-16 00:13:08 +01:00
parent 68c8a971ee
commit 26a24122e1
39 changed files with 3134 additions and 1587 deletions

View File

@ -25,7 +25,7 @@ matrix:
- EXECUTABLE_ARCH=_x64 - EXECUTABLE_ARCH=_x64
before_install: before_install:
- cd tmext && rm -rf TelemetryClassAuthenticator.cpp && openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in TelemetryClassAuthenticator.cpp.enc -out TelemetryClassAuthenticator.cpp -d && cd .. - ".travis/source.sh"
script: script:
- ".travis/travis.sh" - ".travis/travis.sh"

View File

@ -3,9 +3,9 @@
DOCKER_IMAGE=i386/debian:jessie DOCKER_IMAGE=i386/debian:jessie
PROJECT_DIR_DOCKER=/gta5view PROJECT_DIR_DOCKER=/gta5view
cd $PROJECT_DIR && \ cd ${PROJECT_DIR} && \
docker pull $DOCKER_IMAGE && \ docker pull ${DOCKER_IMAGE} && \
docker run --rm \ docker run --rm \
-v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \
$DOCKER_IMAGE \ ${DOCKER_IMAGE} \
/bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh"

View File

@ -3,9 +3,9 @@
DOCKER_IMAGE=debian:jessie DOCKER_IMAGE=debian:jessie
PROJECT_DIR_DOCKER=/gta5view PROJECT_DIR_DOCKER=/gta5view
cd $PROJECT_DIR && \ cd ${PROJECT_DIR} && \
docker pull $DOCKER_IMAGE && \ docker pull ${DOCKER_IMAGE} && \
docker run --rm \ docker run --rm \
-v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \
$DOCKER_IMAGE \ ${DOCKER_IMAGE} \
/bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh" /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/debian_install.sh && .travis/debian_build.sh"

View File

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
# Creating folders # Creating folders
cd $PROJECT_DIR && \ cd ${PROJECT_DIR} && \
echo "gta5view build version is $APPLICATION_VERSION" && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \
mkdir build && \ mkdir build && \
mkdir assets && \ mkdir assets && \
chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \ chmod -x res/gta5sync_*.qm res/gta5view.desktop res/gta5view.png && \
@ -21,11 +21,11 @@ mkdir -p /usr/share/gta5view && \
# Starting build # Starting build
cd qt5 && \ cd qt5 && \
qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT5 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY ../../gta5view.pro && \ qmake -qt=5 -spec linux-clang GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT5} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../../gta5view.pro && \
make -j 4 && \ make -j 4 && \
checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \<dpkg@syping.de\>" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=$PROJECT_DIR/assets && \ checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt5 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \<dpkg@syping.de\>" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view,gta5view-qt4 --replaces=gta5view,gta5view-qt4 --pakdir=${PROJECT_DIR}/assets && \
cd .. && \ cd .. && \
cd qt4 && \ cd qt4 && \
qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 $QMAKE_FLAGS_QT4 DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \ qmake -qt=4 GTA5SYNC_PREFIX=/usr QMAKE_CXXFLAGS+=-std=gnu++11 ${QMAKE_FLAGS_QT4} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_QCONF ../../gta5view.pro && \
make -j 4 && \ make -j 4 && \
checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=$PACKAGE_VERSION --pkgrelease=$PACKAGE_BUILD --pkggroup=utility --maintainer="Syping \<dpkg@syping.de\>" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=$PROJECT_DIR/assets checkinstall -D --default --nodoc --install=no --pkgname=gta5view-qt4 --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \<dpkg@syping.de\>" --requires=libqtcore4,libqtgui4,libqt4-network,qtcore4-l10n --conflicts=gta5view,gta5view-qt5 --replaces=gta5view,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets

View File

@ -2,4 +2,4 @@
# Install packages # Install packages
apt-get update -qq && \ apt-get update -qq && \
apt-get install -qq $APT_INSTALL checkinstall dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev apt-get install -qq ${APT_INSTALL} checkinstall dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt4-dev

4
.travis/source.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
rm -rf tmext/TelemetryClassAuthenticator.cpp && \
openssl aes-256-cbc -K $encrypted_55502862a724_key -iv $encrypted_55502862a724_iv -in tmext/TelemetryClassAuthenticator.cpp.enc -out tmext/TelemetryClassAuthenticator.cpp -d

View File

@ -8,7 +8,7 @@ if [ `git name-rev --tags --name-only $(git rev-parse HEAD)` == "undefined" ]; t
export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION)
export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION)
export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD} export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}
if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=$TRAVIS_BUILD_NUMBER; fi if [ "$PACKAGE_BUILD" == "" ]; then export PACKAGE_BUILD=${TRAVIS_BUILD_NUMBER}; fi
export PROJECT_DIR=$(pwd) export PROJECT_DIR=$(pwd)
.travis/$BUILD_SCRIPT .travis/${BUILD_SCRIPT}

View File

@ -5,4 +5,4 @@ sudo .travis/debian_install.sh && \
# Build gta5view # Build gta5view
sudo .travis/debian_build.sh && \ sudo .travis/debian_build.sh && \
cd $PROJECT_DIR cd ${PROJECT_DIR}

View File

@ -1,18 +1,18 @@
#!/bin/bash #!/bin/bash
export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \
# Creating folders # Creating folders
cd $PROJECT_DIR && \ cd ${PROJECT_DIR} && \
echo "gta5view build version is $APPLICATION_VERSION" && \ echo "gta5view build version is ${APPLICATION_VERSION}" && \
echo "gta5view executable is $GTA5VIEW_EXECUTABLE" && \ echo "gta5view executable is ${GTA5VIEW_EXECUTABLE}" && \
mkdir build && \ mkdir build && \
mkdir assets && \ mkdir assets && \
# Starting build # Starting build
cd build && \ cd build && \
qmake-static $QMAKE_FLAGS DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"$APPLICATION_VERSION\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY ../gta5view.pro && \ qmake-static ${QMAKE_FLAGS} DEFINES+=GTA5SYNC_BUILDTYPE_DEV "DEFINES+=GTA5SYNC_APPVER=\\\\\\\"${APPLICATION_VERSION}\\\\\\\"" DEFINES+=GTA5SYNC_TELEMETRY "DEFINES+=GTA5SYNC_TELEMETRY_WEBURL=\\\\\\\"https://dev.syping.de/gta5view-userstats/\\\\\\\"" ../gta5view.pro && \
make -j 4 && \ make -j 4 && \
cp -Rf release/*.exe $PROJECT_DIR/assets/$GTA5VIEW_EXECUTABLE && \ cp -Rf release/*.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \
cd $PROJECT_DIR/assets && \ cd ${PROJECT_DIR}/assets && \
upx --best $GTA5VIEW_EXECUTABLE upx --best ${GTA5VIEW_EXECUTABLE}

View File

@ -1,12 +1,12 @@
#!/bin/bash #!/bin/bash
QT_VERSION=5.6.3 QT_VERSION=5.6.3
DOCKER_IMAGE=syping/qt5-static-mingw:$QT_VERSION DOCKER_IMAGE=syping/qt5-static-mingw:${QT_VERSION}
PROJECT_DIR_DOCKER=/gta5view PROJECT_DIR_DOCKER=/gta5view
cd $PROJECT_DIR && \ cd ${PROJECT_DIR} && \
docker pull $DOCKER_IMAGE && \ docker pull ${DOCKER_IMAGE} && \
docker run --rm \ docker run --rm \
-v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \
$DOCKER_IMAGE \ ${DOCKER_IMAGE} \
/bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh" /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .travis/windows_build.sh"

View File

@ -46,6 +46,9 @@ Running with Qt %6&lt;br/&gt;
<property name="openExternalLinks"> <property name="openExternalLinks">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC * gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2017 Syping * Copyright (C) 2016-2018 Syping
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -74,5 +74,5 @@ QString GlobalString::getLanguageFile()
QString GlobalString::getLanguage() QString GlobalString::getLanguage()
{ {
return TCInstance->getCurrentAreaLanguage(); return Translator->getCurrentAreaLanguage();
} }

View File

@ -37,7 +37,6 @@ ImageEditorDialog::ImageEditorDialog(SnapmaticPicture *picture, QString profileN
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
ui->setupUi(this); ui->setupUi(this);
ui->cmdClose->setDefault(true);
ui->cmdClose->setFocus(); ui->cmdClose->setFocus();
// Set Icon for Close Button // Set Icon for Close Button

View File

@ -37,7 +37,6 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) :
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint);
ui->setupUi(this); ui->setupUi(this);
ui->cmdClose->setDefault(true);
ui->cmdClose->setFocus(); ui->cmdClose->setFocus();
// Set Icon for Close Button // Set Icon for Close Button

View File

@ -25,17 +25,25 @@
#include "config.h" #include "config.h"
#include <QStringBuilder> #include <QStringBuilder>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QJsonDocument>
#include <QStyleFactory> #include <QStyleFactory>
#include <QApplication> #include <QApplication>
#include <QJsonObject>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QStringList> #include <QStringList>
#include <QClipboard>
#include <QLocale> #include <QLocale>
#include <QString> #include <QString>
#include <QTimer>
#include <QDebug> #include <QDebug>
#include <QList> #include <QList>
#include <QDir> #include <QDir>
#ifdef GTA5SYNC_TELEMETRY
#include "TelemetryClass.h"
#endif
OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
QDialog(parent), profileDB(profileDB), QDialog(parent), profileDB(profileDB),
ui(new Ui::OptionsDialog) ui(new Ui::OptionsDialog)
@ -47,6 +55,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
ui->setupUi(this); ui->setupUi(this);
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);
ui->labPicCustomRes->setVisible(false); ui->labPicCustomRes->setVisible(false);
ui->cmdCancel->setFocus();
QRect desktopResolution = QApplication::desktop()->screenGeometry(this); QRect desktopResolution = QApplication::desktop()->screenGeometry(this);
int desktopSizeWidth = desktopResolution.width(); int desktopSizeWidth = desktopResolution.width();
@ -91,6 +100,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
setupPictureSettings(); setupPictureSettings();
setupCustomGTAFolder(); setupCustomGTAFolder();
setupInterfaceSettings(); setupInterfaceSettings();
setupStatisticsSettings();
setupSnapmaticPictureViewer(); setupSnapmaticPictureViewer();
#ifndef Q_QS_ANDROID #ifndef Q_QS_ANDROID
@ -177,7 +187,7 @@ void OptionsDialog::setupLanguageBox()
} }
QString aCurrentLanguage = QString("en_GB"); QString aCurrentLanguage = QString("en_GB");
if (TCInstance->isLanguageLoaded()) { aCurrentLanguage = TCInstance->getCurrentLanguage(); } if (Translator->isLanguageLoaded()) { aCurrentLanguage = Translator->getCurrentLanguage(); }
QLocale currentLocale = QLocale(aCurrentLanguage); QLocale currentLocale = QLocale(aCurrentLanguage);
ui->labCurrentLanguage->setText(tr("Current: %1").arg(currentLocale.nativeLanguageName() % " (" % currentLocale.nativeCountryName() % ") [" % aCurrentLanguage % "]")); ui->labCurrentLanguage->setText(tr("Current: %1").arg(currentLocale.nativeLanguageName() % " (" % currentLocale.nativeCountryName() % ") [" % aCurrentLanguage % "]"));
@ -216,7 +226,7 @@ void OptionsDialog::setupLanguageBox()
} }
} }
QString aCurrentAreaLanguage = TCInstance->getCurrentAreaLanguage(); QString aCurrentAreaLanguage = Translator->getCurrentAreaLanguage();
if (QFile::exists(":/global/global." % currentAreaLanguage % ".loc")) if (QFile::exists(":/global/global." % currentAreaLanguage % ".loc"))
{ {
QFile locFile(":/global/global." % currentAreaLanguage % ".loc"); QFile locFile(":/global/global." % currentAreaLanguage % ".loc");
@ -396,6 +406,15 @@ void OptionsDialog::applySettings()
settings->setValue("AlwaysUseMessageFont", ui->cbAlwaysUseMessageFont->isChecked()); settings->setValue("AlwaysUseMessageFont", ui->cbAlwaysUseMessageFont->isChecked());
settings->endGroup(); settings->endGroup();
#ifdef GTA5SYNC_TELEMETRY
settings->beginGroup("Telemetry");
settings->setValue("PushAppConf", ui->cbAppConfigStats->isChecked());
if (!Telemetry->isStateForced()) { settings->setValue("IsEnabled", ui->cbParticipateStats->isChecked()); }
settings->endGroup();
Telemetry->refresh();
Telemetry->work();
#endif
#if QT_VERSION >= 0x050000 #if QT_VERSION >= 0x050000
bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage; bool languageChanged = ui->cbLanguage->currentData().toString() != currentLanguage;
bool languageAreaChanged = ui->cbAreaLanguage->currentData().toString() != currentAreaLanguage; bool languageAreaChanged = ui->cbAreaLanguage->currentData().toString() != currentAreaLanguage;
@ -405,13 +424,13 @@ void OptionsDialog::applySettings()
#endif #endif
if (languageChanged) if (languageChanged)
{ {
TCInstance->unloadTranslation(qApp); Translator->unloadTranslation(qApp);
TCInstance->initUserLanguage(); Translator->initUserLanguage();
TCInstance->loadTranslation(qApp); Translator->loadTranslation(qApp);
} }
else if (languageAreaChanged) else if (languageAreaChanged)
{ {
TCInstance->initUserLanguage(); Translator->initUserLanguage();
} }
emit settingsApplied(newContentMode, languageChanged); emit settingsApplied(newContentMode, languageChanged);
@ -527,6 +546,44 @@ void OptionsDialog::setupPictureSettings()
settings->endGroup(); settings->endGroup();
} }
void OptionsDialog::setupStatisticsSettings()
{
#ifdef GTA5SYNC_TELEMETRY
ui->cbParticipateStats->setText(tr("Participate in %1 User Statistics").arg(GTA5SYNC_APPSTR));
ui->labUserStats->setText(QString("<a href=\"%2\">%1</a>").arg(tr("View %1 User Statistics Online").arg(GTA5SYNC_APPSTR), TelemetryClass::getWebURL().toString()));
ui->gbUserFeedback->setVisible(false);
// settings->beginGroup("Startup");
// if (settings->value("IsFirstStart", true).toBool() == true)
// {
// ui->gbUserFeedback->setVisible(false);
// }
// settings->endGroup();
settings->beginGroup("Telemetry");
ui->cbParticipateStats->setChecked(Telemetry->isEnabled());
ui->cbAppConfigStats->setChecked(settings->value("PushAppConf", false).toBool());
settings->endGroup();
if (Telemetry->isStateForced())
{
ui->cbParticipateStats->setEnabled(false);
}
if (Telemetry->isRegistered())
{
ui->labParticipationID->setText(tr("Participation ID: %1").arg(Telemetry->getRegisteredID()));
}
else
{
ui->labParticipationID->setText(tr("Participation ID: %1").arg(tr("Not registered")));
ui->cmdCopyStatsID->setVisible(false);
}
#else
ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabStats));
#endif
}
void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked)
{ {
if (checked) if (checked)
@ -585,3 +642,27 @@ void OptionsDialog::on_cbDefaultStyle_toggled(bool checked)
{ {
ui->cbStyleList->setDisabled(checked); ui->cbStyleList->setDisabled(checked);
} }
void OptionsDialog::on_cmdUserFeedbackSend_clicked()
{
#ifdef GTA5SYNC_TELEMETRY
if (ui->txtUserFeedback->toPlainText().length() < 1024 && ui->txtUserFeedback->toPlainText().length() >= 3)
{
QJsonDocument feedback;
QJsonObject feedbackObject;
feedbackObject["Message"] = ui->txtUserFeedback->toPlainText();
feedback.setObject(feedbackObject);
Telemetry->push(TelemetryCategory::UserFeedback, feedback);
ui->txtUserFeedback->setPlainText(QString());
}
else
{
QMessageBox::information(this, tr("User Feedback"), tr("A feedback message have to between 3-1024 characters long"));
}
#endif
}
void OptionsDialog::on_cmdCopyStatsID_clicked()
{
QApplication::clipboard()->setText(Telemetry->getRegisteredID());
}

View File

@ -47,6 +47,8 @@ private slots:
void on_cbIgnoreAspectRatio_toggled(bool checked); void on_cbIgnoreAspectRatio_toggled(bool checked);
void on_cmdExploreFolder_clicked(); void on_cmdExploreFolder_clicked();
void on_cbDefaultStyle_toggled(bool checked); void on_cbDefaultStyle_toggled(bool checked);
void on_cmdUserFeedbackSend_clicked();
void on_cmdCopyStatsID_clicked();
signals: signals:
void settingsApplied(int contentMode, bool languageChanged); void settingsApplied(int contentMode, bool languageChanged);
@ -76,6 +78,7 @@ private:
void setupPictureSettings(); void setupPictureSettings();
void setupCustomGTAFolder(); void setupCustomGTAFolder();
void setupInterfaceSettings(); void setupInterfaceSettings();
void setupStatisticsSettings();
void setupSnapmaticPictureViewer(); void setupSnapmaticPictureViewer();
void applySettings(); void applySettings();
}; };

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>435</width> <width>435</width>
<height>405</height> <height>464</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -20,7 +20,7 @@
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>3</number>
</property> </property>
<widget class="QWidget" name="tabProfile"> <widget class="QWidget" name="tabProfile">
<attribute name="title"> <attribute name="title">
@ -382,6 +382,184 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tabStats">
<attribute name="title">
<string>Feedback</string>
</attribute>
<layout class="QVBoxLayout" name="vlStats">
<item>
<widget class="QGroupBox" name="gbUserStats">
<property name="title">
<string>Participation</string>
</property>
<layout class="QVBoxLayout" name="vlUserStats">
<item>
<widget class="QCheckBox" name="cbParticipateStats">
<property name="text">
<string>Participate in %1 User Statistics</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labUserStats">
<property name="text">
<string notr="true">&lt;a href=&quot;%2&quot;&gt;%1&lt;/a&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gbCategorys">
<property name="title">
<string>Categorys</string>
</property>
<layout class="QVBoxLayout" name="vlCategorys">
<item>
<widget class="QCheckBox" name="cbGeneralStats">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Hardware, Application and OS Specification</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbOSLangStats">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>System Language Configuration</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbAppConfigStats">
<property name="text">
<string>Application Configuration</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gbOther">
<property name="title">
<string>Other</string>
</property>
<layout class="QHBoxLayout" name="hlOtherStats">
<item>
<widget class="QLabel" name="labParticipationID">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Participation ID: %1</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cmdCopyStatsID">
<property name="text">
<string>&amp;Copy</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gbUserFeedback">
<property name="title">
<string>User Feedback</string>
</property>
<layout class="QVBoxLayout" name="vlUserFeedback">
<item>
<widget class="QPlainTextEdit" name="txtUserFeedback"/>
</item>
<item>
<layout class="QHBoxLayout" name="hlUserFeedbackButtons">
<item>
<widget class="QLabel" name="labUserFeedback">
<property name="text">
<string>Limit: 1 message/day</string>
</property>
</widget>
</item>
<item>
<spacer name="hsUserFeedbackButtons">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cmdUserFeedbackSend">
<property name="text">
<string>&amp;Send</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="vsUserStats">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabInterface"> <widget class="QWidget" name="tabInterface">
<attribute name="title"> <attribute name="title">
<string>Interface</string> <string>Interface</string>
@ -401,6 +579,9 @@
<property name="text"> <property name="text">
<string>Current: %1</string> <string>Current: %1</string>
</property> </property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -420,6 +601,9 @@
<property name="text"> <property name="text">
<string>Current: %1</string> <string>Current: %1</string>
</property> </property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC * gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2017 Syping * Copyright (C) 2016-2018 Syping
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -34,9 +34,7 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
listUpdated = false; listUpdated = false;
ui->setupUi(this); ui->setupUi(this);
ui->cmdCancel->setDefault(true);
ui->cmdCancel->setFocus(); ui->cmdCancel->setFocus();
// Set Icon for Apply Button // Set Icon for Apply Button
@ -150,16 +148,19 @@ void PlayerListDialog::drawSwitchButtons()
QPainter avPainter(&avImage); QPainter avPainter(&avImage);
avPainter.setFont(painterFont); avPainter.setFont(painterFont);
avPainter.setBrush(palette.buttonText()); avPainter.setBrush(palette.buttonText());
avPainter.setPen(palette.buttonText().color());
avPainter.drawText(0, 0, makeAvSize, makeAvSize, Qt::AlignCenter | Qt::TextDontClip, "<"); avPainter.drawText(0, 0, makeAvSize, makeAvSize, Qt::AlignCenter | Qt::TextDontClip, "<");
avPainter.end(); avPainter.end();
QPainter sePainter(&seImage); QPainter sePainter(&seImage);
sePainter.setFont(painterFont); sePainter.setFont(painterFont);
sePainter.setBrush(palette.buttonText()); sePainter.setBrush(palette.buttonText());
sePainter.setPen(palette.buttonText().color());
sePainter.drawText(0, 0, makeSeSize, makeSeSize, Qt::AlignCenter | Qt::TextDontClip, ">"); sePainter.drawText(0, 0, makeSeSize, makeSeSize, Qt::AlignCenter | Qt::TextDontClip, ">");
sePainter.end(); sePainter.end();
QPainter adPainter(&adImage); QPainter adPainter(&adImage);
adPainter.setFont(painterFont); adPainter.setFont(painterFont);
adPainter.setBrush(palette.buttonText()); adPainter.setBrush(palette.buttonText());
adPainter.setPen(palette.buttonText().color());
adPainter.drawText(0, 0, makeAdSize, makeAdSize, Qt::AlignCenter | Qt::TextDontClip, "+"); adPainter.drawText(0, 0, makeAdSize, makeAdSize, Qt::AlignCenter | Qt::TextDontClip, "+");
adPainter.end(); adPainter.end();
@ -182,24 +183,32 @@ void PlayerListDialog::buildInterface()
const QStringList dbPlayers = profileDB->getPlayers(); const QStringList dbPlayers = profileDB->getPlayers();
for (QString sePlayer : players) for (QString sePlayer : players)
{ {
ui->listSePlayers->addItem(QString("%1 (%2)").arg(sePlayer, profileDB->getPlayerName(sePlayer))); QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(sePlayer));
playerItem->setData(Qt::UserRole, sePlayer);
ui->listSePlayers->addItem(playerItem);
} }
for (QString dbPlayer : dbPlayers) for (QString dbPlayer : dbPlayers)
{ {
if (!players.contains(dbPlayer)) if (!players.contains(dbPlayer))
{ {
ui->listAvPlayers->addItem(QString("%1 (%2)").arg(dbPlayer, profileDB->getPlayerName(dbPlayer))); QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(dbPlayer));
playerItem->setData(Qt::UserRole, dbPlayer);
ui->listAvPlayers->addItem(playerItem);
} }
} }
ui->listAvPlayers->sortItems(Qt::AscendingOrder);
} }
void PlayerListDialog::on_cmdMakeAv_clicked() void PlayerListDialog::on_cmdMakeAv_clicked()
{ {
for (QListWidgetItem *item : ui->listSePlayers->selectedItems()) for (QListWidgetItem *item : ui->listSePlayers->selectedItems())
{ {
QString playerItemText = item->text(); QString playerName = item->text();
int playerID = item->data(Qt::UserRole).toInt();
delete item; delete item;
ui->listAvPlayers->addItem(playerItemText); QListWidgetItem *playerItem = new QListWidgetItem(playerName);
playerItem->setData(Qt::UserRole, playerID);
ui->listAvPlayers->addItem(playerItem);
ui->listAvPlayers->sortItems(Qt::AscendingOrder); ui->listAvPlayers->sortItems(Qt::AscendingOrder);
} }
} }
@ -214,9 +223,12 @@ void PlayerListDialog::on_cmdMakeSe_clicked()
} }
for (QListWidgetItem *item : ui->listAvPlayers->selectedItems()) for (QListWidgetItem *item : ui->listAvPlayers->selectedItems())
{ {
QString playerItemText = item->text(); QString playerName = item->text();
int playerID = item->data(Qt::UserRole).toInt();
delete item; delete item;
ui->listSePlayers->addItem(playerItemText); QListWidgetItem *playerItem = new QListWidgetItem(playerName);
playerItem->setData(Qt::UserRole, playerID);
ui->listSePlayers->addItem(playerItem);
} }
} }
@ -229,27 +241,30 @@ void PlayerListDialog::on_cmdMakeAd_clicked()
for (int i = 0; i < ui->listAvPlayers->count(); ++i) for (int i = 0; i < ui->listAvPlayers->count(); ++i)
{ {
QListWidgetItem *item = ui->listAvPlayers->item(i); QListWidgetItem *item = ui->listAvPlayers->item(i);
QString playerItemText = item->text(); QString itemPlayerName = item->text();
if (playerItemText.split(" ").at(0) == QString::number(playerID)) int itemPlayerID = item->data(Qt::UserRole).toInt();
if (itemPlayerID == playerID)
{ {
delete item; delete item;
ui->listSePlayers->addItem(playerItemText); QListWidgetItem *playerItem = new QListWidgetItem(itemPlayerName);
playerItem->setData(Qt::UserRole, playerID);
ui->listSePlayers->addItem(playerItem);
return; return;
} }
} }
for (int i = 0; i < ui->listSePlayers->count(); ++i) for (int i = 0; i < ui->listSePlayers->count(); ++i)
{ {
QListWidgetItem *item = ui->listSePlayers->item(i); QListWidgetItem *item = ui->listSePlayers->item(i);
QString playerItemText = item->text(); int itemPlayerID = item->data(Qt::UserRole).toInt();
if (playerItemText.split(" ").at(0) == QString::number(playerID)) if (itemPlayerID == playerID)
{ {
QMessageBox::warning(this, tr("Add Player..."), tr("Failed to add Player %1 because Player %1 is already added!").arg(QString::number(playerID))); QMessageBox::warning(this, tr("Add Player..."), tr("Failed to add Player %1 because Player %1 is already added!").arg(QString::number(playerID)));
//ui->listSePlayers->setCurrentItem(item);
return; return;
} }
} }
QString playerItemText = QString("%1 (%1)").arg(QString::number(playerID)); QListWidgetItem *playerItem = new QListWidgetItem(QString::number(playerID));
ui->listSePlayers->addItem(playerItemText); playerItem->setData(Qt::UserRole, playerID);
ui->listSePlayers->addItem(playerItem);
} }
} }
@ -258,7 +273,7 @@ void PlayerListDialog::on_cmdApply_clicked()
players.clear(); players.clear();
for (int i = 0; i < ui->listSePlayers->count(); ++i) for (int i = 0; i < ui->listSePlayers->count(); ++i)
{ {
players += ui->listSePlayers->item(i)->text().split(" ").at(0); players += ui->listSePlayers->item(i)->data(Qt::UserRole).toString();
} }
emit playerListUpdated(players); emit playerListUpdated(players);
listUpdated = true; listUpdated = true;

View File

@ -105,6 +105,9 @@
</item> </item>
<item> <item>
<widget class="QListWidget" name="listSePlayers"> <widget class="QListWidget" name="listSePlayers">
<property name="dragDropMode">
<enum>QAbstractItemView::InternalMove</enum>
</property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum> <enum>QAbstractItemView::ExtendedSelection</enum>
</property> </property>

View File

@ -1046,7 +1046,7 @@ void ProfileInterface::exportSelected()
if (errorStr != "") if (errorStr != "")
{ {
errorStr.remove(0, 2); errorStr.remove(0, 2);
QMessageBox::warning(this, tr("Export selected"), tr("Export failed with...\n\n%1").arg(errorStr)); QMessageBox::warning(this, tr("Export selected..."), tr("Export failed with...\n\n%1").arg(errorStr));
} }
if (exportThread->isFinished()) if (exportThread->isFinished())
@ -1066,7 +1066,7 @@ void ProfileInterface::exportSelected()
} }
else else
{ {
QMessageBox::information(this, tr("Export selected"), tr("No Snapmatic pictures or Savegames files are selected")); QMessageBox::information(this, tr("Export selected..."), tr("No Snapmatic pictures or Savegames files are selected"));
} }
} }
@ -1160,7 +1160,7 @@ void ProfileInterface::settingsApplied(int _contentMode, bool languageChanged)
void ProfileInterface::enableSelected() void ProfileInterface::enableSelected()
{ {
int fails = 0; QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys()) for (ProfileWidget *widget : widgets.keys())
{ {
if (widget->isSelected()) if (widget->isSelected())
@ -1168,18 +1168,33 @@ void ProfileInterface::enableSelected()
if (widget->getWidgetType() == "SnapmaticWidget") if (widget->getWidgetType() == "SnapmaticWidget")
{ {
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget); SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
if (!snapmaticWidget->makePictureVisible()) snapmaticWidgets += snapmaticWidget;
{
fails++;
}
} }
} }
} }
if (snapmaticWidgets.isEmpty())
{
QMessageBox::information(this, QApplication::translate("UserInterface", "Show In-game"), QApplication::translate("ProfileInterface", "No Snapmatic pictures are selected"));
return;
}
QStringList fails;
for (SnapmaticWidget *widget : snapmaticWidgets)
{
SnapmaticPicture *picture = widget->getPicture();
if (!widget->makePictureVisible())
{
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
}
if (!fails.isEmpty())
{
QMessageBox::warning(this, QApplication::translate("UserInterface", "Show In-game"), QApplication::translate("ProfileInterface", "%1 failed with...\n\n%2", "Action failed with...").arg(QApplication::translate("UserInterface", "Show In-game"), fails.join(", ")));
}
} }
void ProfileInterface::disableSelected() void ProfileInterface::disableSelected()
{ {
int fails = 0; QList<SnapmaticWidget*> snapmaticWidgets;
for (ProfileWidget *widget : widgets.keys()) for (ProfileWidget *widget : widgets.keys())
{ {
if (widget->isSelected()) if (widget->isSelected())
@ -1187,13 +1202,28 @@ void ProfileInterface::disableSelected()
if (widget->getWidgetType() == "SnapmaticWidget") if (widget->getWidgetType() == "SnapmaticWidget")
{ {
SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget); SnapmaticWidget *snapmaticWidget = qobject_cast<SnapmaticWidget*>(widget);
if (!snapmaticWidget->makePictureHidden()) snapmaticWidgets += snapmaticWidget;
{
fails++;
}
} }
} }
} }
if (snapmaticWidgets.isEmpty())
{
QMessageBox::information(this, QApplication::translate("UserInterface", "Hide In-game"), QApplication::translate("ProfileInterface", "No Snapmatic pictures are selected"));
return;
}
QStringList fails;
for (SnapmaticWidget *widget : snapmaticWidgets)
{
SnapmaticPicture *picture = widget->getPicture();
if (!widget->makePictureHidden())
{
fails << QString("%1 [%2]").arg(picture->getPictureTitle(), picture->getPictureString());
}
}
if (!fails.isEmpty())
{
QMessageBox::warning(this, QApplication::translate("UserInterface", "Hide In-game"), QApplication::translate("ProfileInterface", "%1 failed with...\n\n%2", "Action failed with...").arg(QApplication::translate("UserInterface", "Hide In-game"), fails.join(", ")));
}
} }
int ProfileInterface::selectedWidgets() int ProfileInterface::selectedWidgets()
@ -1529,7 +1559,7 @@ void ProfileInterface::massTool(MassTool tool)
if (snapmaticWidgets.isEmpty()) if (snapmaticWidgets.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); QMessageBox::information(this, tr("Qualify as Avatar"), tr("No Snapmatic pictures are selected"));
return; return;
} }
@ -1594,7 +1624,7 @@ void ProfileInterface::massTool(MassTool tool)
pbDialog.close(); pbDialog.close();
if (!fails.isEmpty()) if (!fails.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", "))); QMessageBox::warning(this, tr("Qualify as Avatar"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Qualify", "%1 failed with..."), fails.join(", ")));
} }
} }
break; break;
@ -1615,7 +1645,7 @@ void ProfileInterface::massTool(MassTool tool)
if (snapmaticWidgets.isEmpty()) if (snapmaticWidgets.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); QMessageBox::information(this, tr("Change Players..."), tr("No Snapmatic pictures are selected"));
return; return;
} }
@ -1687,7 +1717,7 @@ void ProfileInterface::massTool(MassTool tool)
pbDialog.close(); pbDialog.close();
if (!fails.isEmpty()) if (!fails.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", "))); QMessageBox::warning(this, tr("Change Players..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Players", "%1 failed with..."), fails.join(", ")));
} }
} }
break; break;
@ -1708,7 +1738,7 @@ void ProfileInterface::massTool(MassTool tool)
if (snapmaticWidgets.isEmpty()) if (snapmaticWidgets.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); QMessageBox::information(this, tr("Change Crew..."), tr("No Snapmatic pictures are selected"));
return; return;
} }
@ -1736,7 +1766,7 @@ preSelectionCrewID:
{ {
if (!crewChar.isNumber()) if (!crewChar.isNumber())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic Crew ID")); QMessageBox::warning(this, tr("Change Crew..."), tr("Failed to enter a valid Snapmatic Crew ID"));
goto preSelectionCrewID; goto preSelectionCrewID;
} }
} }
@ -1805,7 +1835,7 @@ preSelectionCrewID:
pbDialog.close(); pbDialog.close();
if (!fails.isEmpty()) if (!fails.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", "))); QMessageBox::warning(this, tr("Change Crew..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Crew", "%1 failed with..."), fails.join(", ")));
} }
} }
break; break;
@ -1826,7 +1856,7 @@ preSelectionCrewID:
if (snapmaticWidgets.isEmpty()) if (snapmaticWidgets.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("You don't have any Snapmatics selected!")); QMessageBox::information(this, tr("Change Title..."), tr("No Snapmatic pictures are selected"));
return; return;
} }
@ -1839,7 +1869,7 @@ preSelectionTitle:
{ {
if (!SnapmaticPicture::verifyTitle(newTitle)) if (!SnapmaticPicture::verifyTitle(newTitle))
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("Failed to enter a valid Snapmatic title")); QMessageBox::warning(this, tr("Change Title..."), tr("Failed to enter a valid Snapmatic title"));
goto preSelectionTitle; goto preSelectionTitle;
} }
snapmaticTitle = newTitle; snapmaticTitle = newTitle;
@ -1904,7 +1934,7 @@ preSelectionTitle:
pbDialog.close(); pbDialog.close();
if (!fails.isEmpty()) if (!fails.isEmpty())
{ {
QMessageBox::warning(this, tr("Snapmatic Mass Tool"), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", "))); QMessageBox::warning(this, tr("Change Title..."), tr("%1 failed with...\n\n%2", "Action failed with...").arg(tr("Change Title", "%1 failed with..."), fails.join(", ")));
} }
} }
break; break;

View File

@ -1,3 +1,21 @@
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2018 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 <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include "SavegameDialog.h" #include "SavegameDialog.h"
#include "ui_SavegameDialog.h" #include "ui_SavegameDialog.h"
#include "SavegameCopy.h" #include "SavegameCopy.h"
@ -14,6 +32,7 @@ SavegameDialog::SavegameDialog(QWidget *parent) :
// Setup User Interface // Setup User Interface
ui->setupUi(this); ui->setupUi(this);
ui->cmdClose->setFocus();
savegameLabStr = ui->labSavegameText->text(); savegameLabStr = ui->labSavegameText->text();
if (QIcon::hasThemeIcon("dialog-close")) if (QIcon::hasThemeIcon("dialog-close"))

View File

@ -1,3 +1,21 @@
/*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2018 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 <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifndef SAVEGAMEDIALOG_H #ifndef SAVEGAMEDIALOG_H
#define SAVEGAMEDIALOG_H #define SAVEGAMEDIALOG_H

View File

@ -38,7 +38,6 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD
setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint);
ui->setupUi(this); ui->setupUi(this);
ui->cmdCancel->setDefault(true);
ui->cmdCancel->setFocus(); ui->cmdCancel->setFocus();
// Set Icon for Apply Button // Set Icon for Apply Button
@ -240,9 +239,9 @@ void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players)
ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr));
} }
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width()));
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width()));
resize(width(), heightForWidth(width())); if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); }
#endif #endif
} }
@ -268,9 +267,9 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title)
ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: red\">%1</a>").arg(tr("No", "No, could lead to issues")))); ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: red\">%1</a>").arg(tr("No", "No, could lead to issues"))));
} }
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width()));
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width()));
resize(width(), heightForWidth(width())); if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); }
#endif #endif
} }
@ -280,9 +279,9 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew)
QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr); QString crewStr = tr("Crew: %1 (%2)").arg(StringParser::escapeString(crew), editStr);
ui->labCrew->setText(crewStr); ui->labCrew->setText(crewStr);
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID
ui->gbValues->resize(ui->gbValues->sizeHint()); ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width()));
ui->frameWidget->resize(ui->frameWidget->sizeHint()); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width()));
resize(width(), heightForWidth(width())); if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); }
#endif #endif
} }

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>400</width> <width>400</width>
<height>362</height> <height>381</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -115,6 +115,9 @@
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -128,6 +131,9 @@
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -141,6 +147,9 @@
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
</property>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -36,6 +36,10 @@
#include <QFile> #include <QFile>
#include <QDir> #include <QDir>
#ifndef GTA5SYNC_TELEMETRY_WEBURL
#define GTA5SYNC_TELEMETRY_WEBURL ""
#endif
#ifdef GTA5SYNC_WIN #ifdef GTA5SYNC_WIN
#include "windows.h" #include "windows.h"
#include "intrin.h" #include "intrin.h"
@ -51,8 +55,10 @@ void TelemetryClass::init()
telemetryEnabled = settings.value("IsEnabled", false).toBool(); telemetryEnabled = settings.value("IsEnabled", false).toBool();
#else #else
telemetryEnabled = true; // Always enable Telemetry for Developer Versions telemetryEnabled = true; // Always enable Telemetry for Developer Versions
telemetryStateForced = true;
#endif #endif
telemetryClientID = settings.value("ClientID", QString()).toString(); telemetryClientID = settings.value("ClientID", QString()).toString();
telemetryPushAppConf = settings.value("PushAppConf", false).toBool();
settings.endGroup(); settings.endGroup();
} }
@ -88,6 +94,11 @@ bool TelemetryClass::isRegistered()
return !telemetryClientID.isEmpty(); return !telemetryClientID.isEmpty();
} }
QString TelemetryClass::getRegisteredID()
{
return telemetryClientID;
}
void TelemetryClass::setEnabled(bool enabled) void TelemetryClass::setEnabled(bool enabled)
{ {
telemetryEnabled = enabled; telemetryEnabled = enabled;
@ -114,7 +125,8 @@ void TelemetryClass::push(TelemetryCategory category)
case TelemetryCategory::UserLocaleData: case TelemetryCategory::UserLocaleData:
push(category, getSystemLocaleList()); push(category, getSystemLocaleList());
break; break;
case TelemetryCategory::ApplicationConfiguration: case TelemetryCategory::ApplicationConf:
push(category, getApplicationConf());
break; break;
case TelemetryCategory::ApplicationSpec: case TelemetryCategory::ApplicationSpec:
push(category, getApplicationSpec()); push(category, getApplicationSpec());
@ -276,6 +288,58 @@ QJsonDocument TelemetryClass::getApplicationSpec()
return jsonDocument; return jsonDocument;
} }
QJsonDocument TelemetryClass::getApplicationConf()
{
QJsonDocument jsonDocument;
QJsonObject jsonObject;
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("Interface");
QJsonObject interfaceObject;
interfaceObject["AreaLanguage"] = settings.value("AreaLanguage", "Auto").toString();
interfaceObject["Language"] = settings.value("Language", "System").toString();
interfaceObject["NavigationBar"] = settings.value("NavigationBar", false).toBool();
jsonObject["Interface"] = interfaceObject;
settings.endGroup();
settings.beginGroup("Pictures");
QJsonObject picturesObject;
picturesObject["AspectRatio"] = ((Qt::AspectRatioMode)settings.value("AspectRatio").toInt() == Qt::IgnoreAspectRatio) ? "IgnoreAspectRatio" : "KeepAspectRatio";
picturesObject["CustomQuality"] = settings.value("CustomQuality", 100).toInt();
picturesObject["CustomQualityEnabled"] = settings.value("CustomQualityEnabled", false).toBool();
picturesObject["ExportSizeMode"] = settings.value("ExportSizeMode", "Default").toString();
jsonObject["Pictures"] = picturesObject;
settings.endGroup();
settings.beginGroup("Profile");
QJsonObject profileObject;
int contentMode = settings.value("ContentMode", 0).toInt();
switch (contentMode)
{
case 0:
profileObject["ContentMode"] = "OpenWithSingleClick";
break;
case 1:
profileObject["ContentMode"] = "OpenWithDoubleClick";
break;
case 2:
profileObject["ContentMode"] = "SelectWithSingleClick";
break;
}
jsonObject["Profile"] = profileObject;
settings.endGroup();
settings.beginGroup("Startup");
QJsonObject startupObject;
startupObject["AppStyle"] = settings.value("AppStyle", "System").toString();
startupObject["CustomStyle"] = settings.value("CustomStyle", false).toBool();
jsonObject["Startup"] = startupObject;
settings.endGroup();
jsonDocument.setObject(jsonObject);
return jsonDocument;
}
QJsonDocument TelemetryClass::getSystemLocaleList() QJsonDocument TelemetryClass::getSystemLocaleList()
{ {
QJsonDocument jsonDocument; QJsonDocument jsonDocument;
@ -307,8 +371,8 @@ QString TelemetryClass::categoryToString(TelemetryCategory category)
case TelemetryCategory::UserLocaleData: case TelemetryCategory::UserLocaleData:
return QString("UserLocaleData"); return QString("UserLocaleData");
break; break;
case TelemetryCategory::ApplicationConfiguration: case TelemetryCategory::ApplicationConf:
return QString("ApplicationConfiguration"); return QString("ApplicationConf");
break; break;
case TelemetryCategory::UserFeedback: case TelemetryCategory::UserFeedback:
return QString("UserFeedback"); return QString("UserFeedback");
@ -325,6 +389,11 @@ QString TelemetryClass::categoryToString(TelemetryCategory category)
} }
} }
QUrl TelemetryClass::getWebURL()
{
return QUrl(GTA5SYNC_TELEMETRY_WEBURL);
}
void TelemetryClass::registerClient() void TelemetryClass::registerClient()
{ {
QNetworkAccessManager *netManager = new QNetworkAccessManager(); QNetworkAccessManager *netManager = new QNetworkAccessManager();
@ -334,33 +403,88 @@ void TelemetryClass::registerClient()
connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(registerFinished(QNetworkReply*))); connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(registerFinished(QNetworkReply*)));
} }
void TelemetryClass::pushStartupSet() void TelemetryClass::work()
{ {
push(TelemetryCategory::ApplicationSpec); if (!canPush() && canRegister())
push(TelemetryCategory::UserLocaleData); {
push(TelemetryCategory::OperatingSystemSpec); connect(this, SIGNAL(registered(bool)), this, SLOT(work_pd(bool)));
push(TelemetryCategory::HardwareSpec); registerClient();
}
else if (canPush())
{
work_p(true);
}
}
void TelemetryClass::work_p(bool doWork)
{
if (doWork)
{
push(TelemetryCategory::ApplicationSpec);
push(TelemetryCategory::UserLocaleData);
push(TelemetryCategory::OperatingSystemSpec);
push(TelemetryCategory::HardwareSpec);
if (telemetryPushAppConf)
{
push(TelemetryCategory::ApplicationConf);
}
}
}
void TelemetryClass::work_pd(bool doWork)
{
disconnect(this, SIGNAL(registered(bool)), this, SLOT(work_pd(bool)));
work_p(doWork);
} }
void TelemetryClass::pushFinished(QNetworkReply *reply) void TelemetryClass::pushFinished(QNetworkReply *reply)
{ {
bool isSuccessful = false;
if (reply->canReadLine())
{
QByteArray readedData = reply->readLine();
if (QString::fromUtf8(readedData).trimmed() == QString("Submit success!"))
{
#ifdef GTA5SYNC_DEBUG #ifdef GTA5SYNC_DEBUG
qDebug() << "Telemetry" << reply->readAll().trimmed(); qDebug() << "Telemetry" << QString("Submit success!");
#endif #endif
isSuccessful = true;
#ifdef GTA5SYNC_DEBUG
if (reply->isReadable())
{
readedData = reply->readAll().trimmed();
if (!readedData.isEmpty()) { qDebug() << "Telemetry Push" << readedData; }
}
#endif
}
else
{
#ifdef GTA5SYNC_DEBUG
qDebug() << "Telemetry" << QString("Submit failed!");
#endif
}
}
else
{
#ifdef GTA5SYNC_DEBUG
qDebug() << "Telemetry" << QString("Submit failed!");
#endif
}
reply->deleteLater(); reply->deleteLater();
sender()->deleteLater(); sender()->deleteLater();
emit pushed(); emit pushed(isSuccessful);
} }
void TelemetryClass::registerFinished(QNetworkReply *reply) void TelemetryClass::registerFinished(QNetworkReply *reply)
{ {
bool isSuccessful = false;
if (reply->canReadLine()) if (reply->canReadLine())
{ {
QByteArray readData = reply->readLine(); QByteArray readedData = reply->readLine();
if (QString::fromUtf8(readData).trimmed() == QString("Registration success!") && reply->canReadLine()) if (QString::fromUtf8(readedData).trimmed() == QString("Registration success!") && reply->canReadLine())
{ {
readData = reply->readLine(); readedData = reply->readLine();
telemetryClientID = QString::fromUtf8(readData).trimmed(); telemetryClientID = QString::fromUtf8(readedData).trimmed();
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("Telemetry"); settings.beginGroup("Telemetry");
settings.setValue("ClientID", telemetryClientID); settings.setValue("ClientID", telemetryClientID);
@ -368,6 +492,7 @@ void TelemetryClass::registerFinished(QNetworkReply *reply)
#ifdef GTA5SYNC_DEBUG #ifdef GTA5SYNC_DEBUG
qDebug() << "Telemetry" << QString("Registration success!"); qDebug() << "Telemetry" << QString("Registration success!");
#endif #endif
isSuccessful = true;
} }
else else
{ {
@ -384,5 +509,5 @@ void TelemetryClass::registerFinished(QNetworkReply *reply)
} }
reply->deleteLater(); reply->deleteLater();
sender()->deleteLater(); sender()->deleteLater();
emit registered(); emit registered(isSuccessful);
} }

View File

@ -23,8 +23,9 @@
#include <QApplication> #include <QApplication>
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QUrl>
enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConfiguration = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99}; enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConf = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99};
class TelemetryClass : public QObject class TelemetryClass : public QObject
{ {
@ -32,40 +33,44 @@ class TelemetryClass : public QObject
public: public:
static TelemetryClass* getInstance() { return &telemetryClassInstance; } static TelemetryClass* getInstance() { return &telemetryClassInstance; }
static QString categoryToString(TelemetryCategory category); static QString categoryToString(TelemetryCategory category);
static QUrl getWebURL();
bool canPush(); bool canPush();
bool canRegister(); bool canRegister();
bool isEnabled(); bool isEnabled();
bool isStateForced(); bool isStateForced();
bool isRegistered(); bool isRegistered();
void init(); void init();
void work();
void refresh(); void refresh();
void setEnabled(bool enabled); void setEnabled(bool enabled);
void setDisabled(bool disabled); void setDisabled(bool disabled);
void push(TelemetryCategory category); void push(TelemetryCategory category);
void push(TelemetryCategory category, const QJsonDocument json); void push(TelemetryCategory category, const QJsonDocument json);
void registerClient(); void registerClient();
QString getRegisteredID();
private: private:
static TelemetryClass telemetryClassInstance; static TelemetryClass telemetryClassInstance;
QString telemetryClientID; QString telemetryClientID;
bool telemetryEnabled; bool telemetryEnabled;
bool telemetryStateForced; bool telemetryStateForced;
bool telemetryPushAppConf;
void work_p(bool doWork);
QJsonDocument getOperatingSystem(); QJsonDocument getOperatingSystem();
QJsonDocument getSystemHardware(); QJsonDocument getSystemHardware();
QJsonDocument getApplicationSpec(); QJsonDocument getApplicationSpec();
QJsonDocument getApplicationConf();
QJsonDocument getSystemLocaleList(); QJsonDocument getSystemLocaleList();
public slots:
void pushStartupSet();
private slots: private slots:
void pushFinished(QNetworkReply *reply); void pushFinished(QNetworkReply *reply);
void registerFinished(QNetworkReply *reply); void registerFinished(QNetworkReply *reply);
void work_pd(bool doWork);
signals: signals:
void pushed(); void pushed(bool isSucessful);
void registered(); void registered(bool isSucessful);
}; };
extern TelemetryClass telemetryClass; extern TelemetryClass telemetryClass;

View File

@ -62,6 +62,6 @@ private:
extern TranslationClass translationClass; extern TranslationClass translationClass;
#define TCInstance TranslationClass::getInstance() #define Translator TranslationClass::getInstance()
#endif // TRANSLATIONCLASS_H #endif // TRANSLATIONCLASS_H

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* gta5sync GRAND THEFT AUTO V SYNC * gta5sync GRAND THEFT AUTO V SYNC
* Copyright (C) 2016-2017 Syping * Copyright (C) 2016-2018 Syping
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -45,15 +45,11 @@
#endif #endif
#ifndef GTA5SYNC_COPYRIGHT #ifndef GTA5SYNC_COPYRIGHT
#define GTA5SYNC_COPYRIGHT "2016-2017" #define GTA5SYNC_COPYRIGHT "2016-2018"
#endif #endif
#ifndef GTA5SYNC_APPVER #ifndef GTA5SYNC_APPVER
#ifndef GTA5SYNC_DAILYB #define GTA5SYNC_APPVER "1.5.0-dev9"
#define GTA5SYNC_APPVER "1.5.0-dev8"
#else
#define GTA5SYNC_APPVER GTA5SYNC_DAILYB
#endif
#endif #endif
#ifdef GTA5SYNC_BUILDTYPE_REL #ifdef GTA5SYNC_BUILDTYPE_REL
@ -92,12 +88,6 @@
#endif #endif
#endif #endif
#ifdef GTA5SYNC_DAILYB
#ifndef GTA5SYNC_BUILDTYPE
#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Daily Build")
#endif
#endif
#ifndef GTA5SYNC_BUILDTYPE #ifndef GTA5SYNC_BUILDTYPE
#define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Custom") #define GTA5SYNC_BUILDTYPE QT_TRANSLATE_NOOP("AboutDialog", "Custom")
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -26,18 +26,27 @@
#include "UserInterface.h" #include "UserInterface.h"
#include "CrewDatabase.h" #include "CrewDatabase.h"
#include "SavegameData.h" #include "SavegameData.h"
#include "UiModWidget.h"
#include "UiModLabel.h"
#include "IconLoader.h" #include "IconLoader.h"
#include "AppEnv.h" #include "AppEnv.h"
#include "config.h" #include "config.h"
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QStringBuilder> #include <QStringBuilder>
#include <QSignalMapper>
#include <QStyleFactory> #include <QStyleFactory>
#include <QApplication> #include <QApplication>
#include <QPushButton>
#include <QSpacerItem>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox> #include <QMessageBox>
#include <QStringList> #include <QStringList>
#include <QTranslator> #include <QTranslator>
#include <QCheckBox>
#include <QFileInfo> #include <QFileInfo>
#include <QSysInfo> #include <QSysInfo>
#include <QLayout>
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QDebug> #include <QDebug>
@ -98,19 +107,28 @@ int main(int argc, char *argv[])
#endif #endif
#endif #endif
QString pluginsDir = AppEnv::getPluginsFolder();
if (QFileInfo(pluginsDir).exists())
{
a.addLibraryPath(pluginsDir);
}
QStringList applicationArgs = a.arguments(); QStringList applicationArgs = a.arguments();
QString selectedAction; QString selectedAction;
QString arg1; QString arg1;
applicationArgs.removeAt(0); applicationArgs.removeAt(0);
TCInstance->initUserLanguage(); Translator->initUserLanguage();
TCInstance->loadTranslation(&a); Translator->loadTranslation(&a);
#ifdef GTA5SYNC_TELEMETRY
if (!applicationArgs.contains("--disable-telemetry"))
{
if (!applicationArgs.contains("--skip-telemetryinit"))
{
Telemetry->init();
Telemetry->work();
}
}
else
{
Telemetry->setDisabled(true);
}
#endif
if (!applicationArgs.contains("--skip-firststart")) if (!applicationArgs.contains("--skip-firststart"))
{ {
@ -129,31 +147,54 @@ int main(int argc, char *argv[])
} }
} }
settings.endGroup();
#ifdef GTA5SYNC_TELEMETRY #ifdef GTA5SYNC_TELEMETRY
if (!applicationArgs.contains("--disable-telemetry")) bool telemetryWindowLaunched = settings.value("TelemetryWindowLaunched", false).toBool();
if (!telemetryWindowLaunched && !Telemetry->isEnabled() && !Telemetry->isStateForced())
{ {
QObject::connect(Telemetry, SIGNAL(registered()), Telemetry, SLOT(pushStartupSet())); QDialog telemetryDialog;
if (!applicationArgs.contains("--skip-telemetryinit")) telemetryDialog.setObjectName(QStringLiteral("TelemetryDialog"));
telemetryDialog.setWindowTitle(QString("%1 %2").arg(GTA5SYNC_APPSTR, GTA5SYNC_APPVER));
telemetryDialog.setWindowFlags(telemetryDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
telemetryDialog.setWindowIcon(IconLoader::loadingAppIcon());
QVBoxLayout telemetryLayout;
telemetryLayout.setObjectName(QStringLiteral("TelemetryLayout"));
telemetryDialog.setLayout(&telemetryLayout);
UiModLabel telemetryLabel(&telemetryDialog);
telemetryLabel.setObjectName(QStringLiteral("TelemetryLabel"));
telemetryLabel.setText(QString("<h4>%2</h4>%1").arg(QApplication::translate("TelemetryDialog", "You want help %1 to improve in the future by collection of data?").arg(GTA5SYNC_APPSTR), QApplication::translate("TelemetryDialog", "%1 User Statistics").arg(GTA5SYNC_APPSTR)));
telemetryLayout.addWidget(&telemetryLabel);
QCheckBox telemetryCheckBox(&telemetryDialog);
telemetryCheckBox.setObjectName(QStringLiteral("TelemetryCheckBox"));
telemetryCheckBox.setText(QApplication::translate("TelemetryDialog", "Yes, I would like to take part."));
telemetryCheckBox.setChecked(true);
telemetryLayout.addWidget(&telemetryCheckBox);
QHBoxLayout telemetryButtonLayout;
telemetryButtonLayout.setObjectName(QStringLiteral("TelemetryButtonLayout"));
telemetryLayout.addLayout(&telemetryButtonLayout);
QSpacerItem telemetryButtonSpacer(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
telemetryButtonLayout.addSpacerItem(&telemetryButtonSpacer);
QPushButton telemetryButton(&telemetryDialog);
telemetryButton.setObjectName(QStringLiteral("TelemetryButton"));
telemetryButton.setText(QApplication::translate("TelemetryDialog", "&OK"));
telemetryButtonLayout.addWidget(&telemetryButton);
QObject::connect(&telemetryButton, SIGNAL(clicked(bool)), &telemetryDialog, SLOT(close()));
telemetryDialog.setFixedSize(telemetryDialog.sizeHint());
telemetryDialog.exec();
if (telemetryCheckBox.isChecked())
{ {
QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
telemetrySettings.beginGroup("Telemetry");
telemetrySettings.setValue("IsEnabled", true);
telemetrySettings.endGroup();
Telemetry->init(); Telemetry->init();
if (Telemetry->canPush()) Telemetry->work();
{
Telemetry->pushStartupSet();
}
else if (Telemetry->canRegister())
{
Telemetry->registerClient();
}
} }
} settings.setValue("TelemetryWindowLaunched", true);
else
{
Telemetry->setDisabled(true);
} }
#endif #endif
settings.endGroup();
for (QString currentArg : applicationArgs) for (QString currentArg : applicationArgs)
{ {
QString reworkedArg; QString reworkedArg;

View File

@ -25,12 +25,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Syping" VALUE "CompanyName", "Syping"
VALUE "FileDescription", "gta5view" VALUE "FileDescription", "gta5view"
VALUE "FileVersion", "1.5.0-dev8" VALUE "FileVersion", "1.5.0-dev9"
VALUE "InternalName", "gta5view" VALUE "InternalName", "gta5view"
VALUE "LegalCopyright", "Copyright © 2016-2017 Syping" VALUE "LegalCopyright", "Copyright © 2016-2018 Syping"
VALUE "OriginalFilename", "gta5view.exe" VALUE "OriginalFilename", "gta5view.exe"
VALUE "ProductName", "gta5view" VALUE "ProductName", "gta5view"
VALUE "ProductVersion", "1.5.0-dev8" VALUE "ProductVersion", "1.5.0-dev9"
END END
END END
END END

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff