added ability to read GTA V game language
This commit is contained in:
		
							parent
							
								
									c29cc44717
								
							
						
					
					
						commit
						39f20aca9d
					
				
					 30 changed files with 3131 additions and 1856 deletions
				
			
		|  | @ -15,11 +15,7 @@ docker run --rm \ | |||
| export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ | ||||
| 
 | ||||
| # Upload Assets to Dropbox | ||||
| if [ "${PACKAGE_CODE}" == "Dropbox" ]; then | ||||
| 	${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gta5view-builds/${PACKAGE_VERSION} | ||||
| 	${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5view-builds/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ | ||||
| 	rm -rf ${GTA5VIEW_EXECUTABLE} | ||||
| elif [ "${PACKAGE_CODE}" == "gta5-mods" ]; then | ||||
| if [ "${PACKAGE_CODE}" == "gta5-mods" ]; then | ||||
| 	${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} | ||||
| 	${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ | ||||
| 	rm -rf ${GTA5VIEW_EXECUTABLE} | ||||
|  |  | |||
|  | @ -22,11 +22,6 @@ matrix: | |||
|     - BUILD_SCRIPT=windows_docker.sh | ||||
|     - QT_SELECT=qt5-x86_64-w64-mingw32 | ||||
|     - RELEASE_LABEL="Windows 64-Bit Portable" | ||||
|     - EXECUTABLE_ARCH=_x64 | ||||
|   - env: | ||||
|     - BUILD_SCRIPT=windows_docker.sh | ||||
|     - QT_SELECT=qt5-x86_64-w64-mingw32 | ||||
|     - PACKAGE_CODE=Dropbox | ||||
|   - env: | ||||
|     - BUILD_SCRIPT=windows_docker.sh | ||||
|     - QT_SELECT=qt5-x86_64-w64-mingw32 | ||||
|  |  | |||
							
								
								
									
										286
									
								
								AppEnv.cpp
									
										
									
									
									
								
							
							
						
						
									
										286
									
								
								AppEnv.cpp
									
										
									
									
									
								
							|  | @ -206,6 +206,292 @@ QUrl AppEnv::getPlayerFetchingUrl(QString crewID, int pageNumber) | |||
|     return getPlayerFetchingUrl(crewID, QString::number(pageNumber)); | ||||
| } | ||||
| 
 | ||||
| // Game Stuff
 | ||||
| 
 | ||||
| GameVersion AppEnv::getGameVersion() | ||||
| { | ||||
| #ifdef GTA5SYNC_WIN | ||||
|     QString argumentValue; | ||||
| #ifdef _WIN64 | ||||
|     argumentValue = "\\WOW6432Node"; | ||||
| #endif | ||||
|     QSettings registrySettingsSc(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\Grand Theft Auto V").arg(argumentValue), QSettings::NativeFormat); | ||||
|     QString installFolderSc = registrySettingsSc.value("InstallFolder", "").toString(); | ||||
|     QDir installFolderScDir(installFolderSc); | ||||
|     bool scVersionInstalled = false; | ||||
|     if (!installFolderSc.isEmpty() && installFolderScDir.exists()) | ||||
|     { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|         qDebug() << "gameVersionFoundSocialClubVersion"; | ||||
| #endif | ||||
|         scVersionInstalled = true; | ||||
|     } | ||||
| 
 | ||||
|     QSettings registrySettingsSteam(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\GTAV").arg(argumentValue), QSettings::NativeFormat); | ||||
|     QString installFolderSteam = registrySettingsSteam.value("installfoldersteam", "").toString(); | ||||
|     if (installFolderSteam.right(5) == "\\GTAV") | ||||
|     { | ||||
|         installFolderSteam = installFolderSteam.remove(installFolderSteam.length() - 5, 5); | ||||
|     } | ||||
|     QDir installFolderSteamDir(installFolderSteam); | ||||
|     bool steamVersionInstalled = false; | ||||
|     if (!installFolderSteam.isEmpty() && installFolderSteamDir.exists()) | ||||
|     { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|         qDebug() << "gameVersionFoundSteamVersion"; | ||||
| #endif | ||||
|         steamVersionInstalled = true; | ||||
|     } | ||||
| 
 | ||||
|     if (scVersionInstalled && steamVersionInstalled) | ||||
|     { | ||||
|         return GameVersion::BothVersions; | ||||
|     } | ||||
|     else if (scVersionInstalled) | ||||
|     { | ||||
|         return GameVersion::SocialClubVersion; | ||||
|     } | ||||
|     else if (steamVersionInstalled) | ||||
|     { | ||||
|         return GameVersion::SteamVersion; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return GameVersion::NoVersion; | ||||
|     } | ||||
| #else | ||||
|     return GameVersion::NoVersion; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| GameLanguage AppEnv::getGameLanguage(GameVersion gameVersion) | ||||
| { | ||||
|     if (gameVersion == GameVersion::SocialClubVersion) | ||||
|     { | ||||
| #ifdef GTA5SYNC_WIN | ||||
|         QString argumentValue; | ||||
| #ifdef _WIN64 | ||||
|         argumentValue = "\\WOW6432Node"; | ||||
| #endif | ||||
|         QSettings registrySettingsSc(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\Grand Theft Auto V").arg(argumentValue), QSettings::NativeFormat); | ||||
|         QString languageSc = registrySettingsSc.value("Language", "").toString(); | ||||
|         return gameLanguageFromString(languageSc); | ||||
| #else | ||||
|         return GameLanguage::Undefined; | ||||
| #endif | ||||
|     } | ||||
|     else if (gameVersion == GameVersion::SteamVersion) | ||||
|     { | ||||
| #ifdef GTA5SYNC_WIN | ||||
|         QString argumentValue; | ||||
| #ifdef _WIN64 | ||||
|         argumentValue = "\\WOW6432Node"; | ||||
| #endif | ||||
|         QSettings registrySettingsSteam(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\Grand Theft Auto V Steam").arg(argumentValue), QSettings::NativeFormat); | ||||
|         QString languageSteam = registrySettingsSteam.value("Language", "").toString(); | ||||
|         return gameLanguageFromString(languageSteam); | ||||
| #else | ||||
|         return GameLanguage::Undefined; | ||||
| #endif | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return GameLanguage::Undefined; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| GameLanguage AppEnv::gameLanguageFromString(QString gameLanguage) | ||||
| { | ||||
|     if (gameLanguage == "en-US") | ||||
|     { | ||||
|         return GameLanguage::English; | ||||
|     } | ||||
|     else if (gameLanguage == "fr-FR") | ||||
|     { | ||||
|         return GameLanguage::French; | ||||
|     } | ||||
|     else if (gameLanguage == "it-IT") | ||||
|     { | ||||
|         return GameLanguage::Italian; | ||||
|     } | ||||
|     else if (gameLanguage == "de-DE") | ||||
|     { | ||||
|         return GameLanguage::German; | ||||
|     } | ||||
|     else if (gameLanguage == "es-ES") | ||||
|     { | ||||
|         return GameLanguage::Spanish; | ||||
|     } | ||||
|     else if (gameLanguage == "es-MX") | ||||
|     { | ||||
|         return GameLanguage::Mexican; | ||||
|     } | ||||
|     else if (gameLanguage == "pt-BR") | ||||
|     { | ||||
|         return GameLanguage::Brasilian; | ||||
|     } | ||||
|     else if (gameLanguage == "ru-RU") | ||||
|     { | ||||
|         return GameLanguage::Russian; | ||||
|     } | ||||
|     else if (gameLanguage == "pl-PL") | ||||
|     { | ||||
|         return GameLanguage::Polish; | ||||
|     } | ||||
|     else if (gameLanguage == "ja-JP") | ||||
|     { | ||||
|         return GameLanguage::Japanese; | ||||
|     } | ||||
|     else if (gameLanguage == "zh-CHS") | ||||
|     { | ||||
|         return GameLanguage::SChinese; | ||||
|     } | ||||
|     else if (gameLanguage == "zh-CHT") | ||||
|     { | ||||
|         return GameLanguage::TChinese; | ||||
|     } | ||||
|     else if (gameLanguage == "ko-KR") | ||||
|     { | ||||
|         return GameLanguage::Koreana; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return GameLanguage::Undefined; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| QString AppEnv::gameLanguageToString(GameLanguage gameLanguage) | ||||
| { | ||||
|     if (gameLanguage == GameLanguage::English) | ||||
|     { | ||||
|         return "en-US"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::French) | ||||
|     { | ||||
|         return "fr-FR"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Italian) | ||||
|     { | ||||
|         return "it-IT"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::German) | ||||
|     { | ||||
|         return "de-DE"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Spanish) | ||||
|     { | ||||
|         return "es-ES"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Mexican) | ||||
|     { | ||||
|         return "es-MX"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Brasilian) | ||||
|     { | ||||
|         return "pt-BR"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Russian) | ||||
|     { | ||||
|         return "ru-RU"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Polish) | ||||
|     { | ||||
|         return "pl-PL"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Japanese) | ||||
|     { | ||||
|         return "ja-JP"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::SChinese) | ||||
|     { | ||||
|         return "zh-CHS"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::TChinese) | ||||
|     { | ||||
|         return "zh-CHT"; | ||||
|     } | ||||
|     else if (gameLanguage == GameLanguage::Koreana) | ||||
|     { | ||||
|         return "ko-KR"; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return "Undefinied"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| bool AppEnv::setGameLanguage(GameVersion gameVersion, GameLanguage gameLanguage) | ||||
| { | ||||
|     bool socialClubVersion = false; | ||||
|     bool steamVersion = false; | ||||
|     if (gameVersion == GameVersion::SocialClubVersion) | ||||
|     { | ||||
|         socialClubVersion = true; | ||||
|     } | ||||
|     else if (gameVersion == GameVersion::SteamVersion) | ||||
|     { | ||||
|         steamVersion = true; | ||||
|     } | ||||
|     else if (gameVersion == GameVersion::BothVersions) | ||||
|     { | ||||
|         socialClubVersion = true; | ||||
|         steamVersion = true; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|     if (socialClubVersion) | ||||
|     { | ||||
| #ifdef GTA5SYNC_WIN | ||||
|         QString argumentValue; | ||||
| #ifdef _WIN64 | ||||
|         argumentValue = "\\WOW6432Node"; | ||||
| #endif | ||||
|         QSettings registrySettingsSc(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\Grand Theft Auto V").arg(argumentValue), QSettings::NativeFormat); | ||||
|         if (gameLanguage != GameLanguage::Undefined) | ||||
|         { | ||||
|             registrySettingsSc.setValue("Language", gameLanguageToString(gameLanguage)); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             registrySettingsSc.remove("Language"); | ||||
|         } | ||||
|         registrySettingsSc.sync(); | ||||
|         if (registrySettingsSc.status() != QSettings::NoError) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
| #endif | ||||
|     } | ||||
|     if (steamVersion) | ||||
|     { | ||||
| #ifdef GTA5SYNC_WIN | ||||
|         QString argumentValue; | ||||
| #ifdef _WIN64 | ||||
|         argumentValue = "\\WOW6432Node"; | ||||
| #endif | ||||
|         QSettings registrySettingsSteam(QString("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\Rockstar Games\\Grand Theft Auto V Steam").arg(argumentValue), QSettings::NativeFormat); | ||||
|         if (gameLanguage != GameLanguage::Undefined) | ||||
|         { | ||||
|             registrySettingsSteam.setValue("Language", gameLanguageToString(gameLanguage)); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             registrySettingsSteam.remove("Language"); | ||||
|         } | ||||
|         registrySettingsSteam.sync(); | ||||
|         if (registrySettingsSteam.status() != QSettings::NoError) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
| #endif | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| // Screen Stuff
 | ||||
| 
 | ||||
| qreal AppEnv::screenRatio() | ||||
| { | ||||
| #if QT_VERSION >= 0x050000 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								AppEnv.h
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								AppEnv.h
									
										
									
									
									
								
							|  | @ -22,6 +22,9 @@ | |||
| #include <QString> | ||||
| #include <QUrl> | ||||
| 
 | ||||
| enum class GameVersion : int { NoVersion = 0, SocialClubVersion = 1, SteamVersion = 2, BothVersions = 3 }; | ||||
| enum class GameLanguage : int { Undefined = 0, English = 1, French = 2, Italian = 3, German = 4, Spanish = 5, Mexican = 6, Brasilian = 7, Russian = 8, Polish = 9, Japanese = 10, SChinese = 11, TChinese = 12, Koreana = 13 }; | ||||
| 
 | ||||
| class AppEnv | ||||
| { | ||||
| public: | ||||
|  | @ -44,6 +47,13 @@ public: | |||
|     static QUrl getPlayerFetchingUrl(QString crewID, QString pageNumber); | ||||
|     static QUrl getPlayerFetchingUrl(QString crewID, int pageNumber); | ||||
| 
 | ||||
|     // Game Stuff
 | ||||
|     static GameVersion getGameVersion(); | ||||
|     static GameLanguage getGameLanguage(GameVersion gameVersion); | ||||
|     static GameLanguage gameLanguageFromString(QString gameLanguage); | ||||
|     static QString gameLanguageToString(GameLanguage gameLanguage); | ||||
|     static bool setGameLanguage(GameVersion gameVersion, GameLanguage gameLanguage); | ||||
| 
 | ||||
|     // Screen Stuff
 | ||||
|     static qreal screenRatio(); | ||||
| }; | ||||
|  |  | |||
|  | @ -63,13 +63,6 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : | |||
|     avatarAreaImage = QImage(":/img/avatarareaimport.png"); | ||||
|     selectedColour = QColor::fromRgb(0, 0, 0, 255); | ||||
| 
 | ||||
|     // Set Import Settings
 | ||||
|     QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|     settings.beginGroup("Import"); | ||||
|     QString currentProfile = settings.value("Profile", "Default").toString(); | ||||
|     settings.endGroup(); | ||||
|     processSettings(currentProfile); | ||||
| 
 | ||||
|     // Set Icon for OK Button
 | ||||
|     if (QIcon::hasThemeIcon("dialog-ok")) | ||||
|     { | ||||
|  | @ -95,6 +88,13 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : | |||
|     ui->labBackgroundImage->setText(tr("Background Image:")); | ||||
|     ui->cmdBackgroundWipe->setVisible(false); | ||||
| 
 | ||||
|     // Set Import Settings
 | ||||
|     QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|     settings.beginGroup("Import"); | ||||
|     QString currentProfile = settings.value("Profile", "Default").toString(); | ||||
|     settings.endGroup(); | ||||
|     processSettings(currentProfile); | ||||
| 
 | ||||
|     // DPI calculation
 | ||||
|     qreal screenRatio = AppEnv::screenRatio(); | ||||
|     snapmaticResolutionLW = 516 * screenRatio; // 430
 | ||||
|  |  | |||
|  | @ -20,8 +20,10 @@ | |||
| #include "ui_JsonEditorDialog.h" | ||||
| #include "SnapmaticEditor.h" | ||||
| #include "AppEnv.h" | ||||
| #include "config.h" | ||||
| #include <QStringBuilder> | ||||
| #include <QJsonDocument> | ||||
| #include <QJsonObject> | ||||
| #include <QMessageBox> | ||||
| 
 | ||||
| #if QT_VERSION >= 0x050200 | ||||
|  | @ -29,6 +31,10 @@ | |||
| #include <QDebug> | ||||
| #endif | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
| #include "TelemetryClass.h" | ||||
| #endif | ||||
| 
 | ||||
| JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : | ||||
|     QDialog(parent), smpic(picture), | ||||
|     ui(new Ui::JsonEditorDialog) | ||||
|  | @ -185,6 +191,22 @@ bool JsonEditorDialog::saveJsonContent() | |||
|             jsonCode = newCode; | ||||
|             smpic->updateStrings(); | ||||
|             smpic->emitUpdate(); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "JSONEdited"; | ||||
|                 jsonObject["EditedSize"] = QString::number(smpic->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|             return true; | ||||
|         } | ||||
|         return true; | ||||
|  | @ -198,13 +220,13 @@ bool JsonEditorDialog::saveJsonContent() | |||
| 
 | ||||
| void JsonEditorDialog::on_cmdClose_clicked() | ||||
| { | ||||
|     this->close(); | ||||
|     close(); | ||||
| } | ||||
| 
 | ||||
| void JsonEditorDialog::on_cmdSave_clicked() | ||||
| { | ||||
|     if (saveJsonContent()) | ||||
|     { | ||||
|         this->close(); | ||||
|         close(); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -103,6 +103,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : | |||
|     setupInterfaceSettings(); | ||||
|     setupStatisticsSettings(); | ||||
|     setupSnapmaticPictureViewer(); | ||||
|     setupWindowsGameSettings(); | ||||
| 
 | ||||
| #ifndef Q_QS_ANDROID | ||||
|     // DPI calculation
 | ||||
|  | @ -110,7 +111,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : | |||
|     resize(435 * screenRatio, 405 * screenRatio); | ||||
| #endif | ||||
| 
 | ||||
|     this->setWindowTitle(windowTitle().arg(GTA5SYNC_APPSTR)); | ||||
|     setWindowTitle(windowTitle().arg(GTA5SYNC_APPSTR)); | ||||
| } | ||||
| 
 | ||||
| OptionsDialog::~OptionsDialog() | ||||
|  | @ -150,9 +151,21 @@ void OptionsDialog::setupLanguageBox() | |||
|     currentAreaLanguage = settings->value("AreaLanguage", "Auto").toString(); | ||||
|     settings->endGroup(); | ||||
| 
 | ||||
|     QString cbSysStr = tr("%1 (Next Closest Language)", "First language a person can talk with a different person/application. \"Native\" or \"Not Native\".").arg(tr("System", | ||||
|                                                                                                                                                                       "System in context of System default")); | ||||
|     QString cbSysStr = tr("%1 (Language priority)", "First language a person can talk with a different person/application. \"Native\" or \"Not Native\".").arg(tr("System", | ||||
|                                                                                                                                                                   "System in context of System default")); | ||||
| #ifdef GTA5SYNC_WIN | ||||
|     QString cbAutoStr; | ||||
|     if (AppEnv::getGameLanguage(AppEnv::getGameVersion()) != GameLanguage::Undefined) | ||||
|     { | ||||
|         cbAutoStr = tr("%1 (Game language)", "Next closest language compared to the Game settings").arg(tr("Auto", "Automatic language choice.")); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         cbAutoStr = tr("%1 (Closest to Interface)", "Next closest language compared to the Interface").arg(tr("Auto", "Automatic language choice.")); | ||||
|     } | ||||
| #else | ||||
|     QString cbAutoStr = tr("%1 (Closest to Interface)", "Next closest language compared to the Interface").arg(tr("Auto", "Automatic language choice.")); | ||||
| #endif | ||||
|     ui->cbLanguage->addItem(cbSysStr, "System"); | ||||
|     ui->cbAreaLanguage->addItem(cbAutoStr, "Auto"); | ||||
| 
 | ||||
|  | @ -412,6 +425,15 @@ void OptionsDialog::applySettings() | |||
|     settings->endGroup(); | ||||
|     Telemetry->refresh(); | ||||
|     Telemetry->work(); | ||||
|     if (ui->cbUsageData->isChecked() && Telemetry->canPush()) | ||||
|     { | ||||
|         QJsonDocument jsonDocument; | ||||
|         QJsonObject jsonObject; | ||||
|         jsonObject["Type"] = "SettingsUpdated"; | ||||
|         jsonObject["UpdateTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|         jsonDocument.setObject(jsonObject); | ||||
|         Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
| #if QT_VERSION >= 0x050000 | ||||
|  | @ -432,6 +454,7 @@ void OptionsDialog::applySettings() | |||
|         Translator->initUserLanguage(); | ||||
|     } | ||||
| 
 | ||||
|     settings->sync(); | ||||
|     emit settingsApplied(newContentMode, languageChanged); | ||||
| 
 | ||||
|     if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) | ||||
|  | @ -576,6 +599,77 @@ void OptionsDialog::setupStatisticsSettings() | |||
| #endif | ||||
| } | ||||
| 
 | ||||
| void OptionsDialog::setupWindowsGameSettings() | ||||
| { | ||||
| #ifdef GTA5SYNC_GAME | ||||
|     GameVersion gameVersion = AppEnv::getGameVersion(); | ||||
| #ifdef GTA5SYNC_WIN | ||||
|     if (gameVersion != GameVersion::NoVersion) | ||||
|     { | ||||
|         if (gameVersion == GameVersion::SocialClubVersion) | ||||
|         { | ||||
|             ui->gbSteam->setDisabled(true); | ||||
|             ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("<span style=\"color: green\">%1</span>").arg(tr("Yes")))); | ||||
|             ui->labSteamFound->setText(tr("Found: %1").arg(QString("<span style=\"color: red\">%1</span>").arg(tr("No")))); | ||||
|             if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) | ||||
|             { | ||||
|                 ui->labSocialClubLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SocialClubVersion))).nativeLanguageName())); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ui->labSocialClubLanguage->setText(tr("Language: %1").arg(tr("OS defined"))); | ||||
|             } | ||||
|             ui->labSteamLanguage->setVisible(false); | ||||
|         } | ||||
|         else if (gameVersion == GameVersion::SteamVersion) | ||||
|         { | ||||
|             ui->gbSocialClub->setDisabled(true); | ||||
|             ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("<span style=\"color: red\">%1</span>").arg(tr("No")))); | ||||
|             ui->labSteamFound->setText(tr("Found: %1").arg(QString("<span style=\"color: green\">%1</span>").arg(tr("Yes")))); | ||||
|             ui->labSocialClubLanguage->setVisible(false); | ||||
|             if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) | ||||
|             { | ||||
|                 ui->labSteamLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SteamVersion))).nativeLanguageName())); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ui->labSteamLanguage->setText(tr("Language: %1").arg(tr("Steam defined"))); | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("<span style=\"color: green\">%1</span>").arg(tr("Yes")))); | ||||
|             ui->labSteamFound->setText(tr("Found: %1").arg(QString("<span style=\"color: green\">%1</span>").arg(tr("Yes")))); | ||||
|             if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) | ||||
|             { | ||||
|                 ui->labSocialClubLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SocialClubVersion))).nativeLanguageName())); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ui->labSocialClubLanguage->setText(tr("Language: %1").arg(tr("OS defined"))); | ||||
|             } | ||||
|             if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) | ||||
|             { | ||||
|                 ui->labSteamLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SteamVersion))).nativeLanguageName())); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ui->labSteamLanguage->setText(tr("Language: %1").arg(tr("Steam defined"))); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabGame)); | ||||
|     } | ||||
| #else | ||||
|     ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabGame)); | ||||
| #endif | ||||
| #else | ||||
|     ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabGame)); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) | ||||
| { | ||||
|     if (checked) | ||||
|  |  | |||
|  | @ -79,6 +79,7 @@ private: | |||
|     void setupInterfaceSettings(); | ||||
|     void setupStatisticsSettings(); | ||||
|     void setupSnapmaticPictureViewer(); | ||||
|     void setupWindowsGameSettings(); | ||||
|     void applySettings(); | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -382,6 +382,72 @@ | |||
|        </item> | ||||
|       </layout> | ||||
|      </widget> | ||||
|      <widget class="QWidget" name="tabGame"> | ||||
|       <attribute name="title"> | ||||
|        <string>Game</string> | ||||
|       </attribute> | ||||
|       <layout class="QVBoxLayout" name="vlGame"> | ||||
|        <item> | ||||
|         <widget class="QGroupBox" name="gbSocialClub"> | ||||
|          <property name="title"> | ||||
|           <string>Social Club Version</string> | ||||
|          </property> | ||||
|          <layout class="QVBoxLayout" name="vlGameSocialClub"> | ||||
|           <item> | ||||
|            <widget class="QLabel" name="labSocialClubFound"> | ||||
|             <property name="text"> | ||||
|              <string>Found: %1</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QLabel" name="labSocialClubLanguage"> | ||||
|             <property name="text"> | ||||
|              <string>Language: %1</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </widget> | ||||
|        </item> | ||||
|        <item> | ||||
|         <widget class="QGroupBox" name="gbSteam"> | ||||
|          <property name="title"> | ||||
|           <string>Steam Version</string> | ||||
|          </property> | ||||
|          <layout class="QVBoxLayout" name="vlGameSteam"> | ||||
|           <item> | ||||
|            <widget class="QLabel" name="labSteamFound"> | ||||
|             <property name="text"> | ||||
|              <string>Found: %1</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QLabel" name="labSteamLanguage"> | ||||
|             <property name="text"> | ||||
|              <string>Language: %1</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </widget> | ||||
|        </item> | ||||
|        <item> | ||||
|         <spacer name="vsGame"> | ||||
|          <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="tabStats"> | ||||
|       <attribute name="title"> | ||||
|        <string>Feedback</string> | ||||
|  | @ -473,7 +539,7 @@ | |||
|          <property name="title"> | ||||
|           <string>Other</string> | ||||
|          </property> | ||||
|          <layout class="QVBoxLayout" name="verticalLayout"> | ||||
|          <layout class="QVBoxLayout" name="vlFeedbackOther"> | ||||
|           <item> | ||||
|            <layout class="QHBoxLayout" name="hlParticipation"> | ||||
|             <item> | ||||
|  |  | |||
|  | @ -32,6 +32,7 @@ | |||
| #include "GlobalString.h" | ||||
| #include "UiModLabel.h" | ||||
| #include "AppEnv.h" | ||||
| #include "config.h" | ||||
| 
 | ||||
| #ifdef GTA5SYNC_WIN | ||||
| #if QT_VERSION >= 0x050200 | ||||
|  | @ -45,6 +46,7 @@ | |||
| #include <QJsonDocument> | ||||
| #include <QApplication> | ||||
| #include <QFontMetrics> | ||||
| #include <QJsonObject> | ||||
| #include <QSizePolicy> | ||||
| #include <QStaticText> | ||||
| #include <QFileDialog> | ||||
|  | @ -67,6 +69,10 @@ | |||
| #include <QUrl> | ||||
| #include <QDir> | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
| #include "TelemetryClass.h" | ||||
| #endif | ||||
| 
 | ||||
| // Macros for better Overview + RAM
 | ||||
| #define locX QString::number(picture->getSnapmaticProperties().location.x) | ||||
| #define locY QString::number(picture->getSnapmaticProperties().location.y) | ||||
|  | @ -910,6 +916,23 @@ void PictureDialog::openPreviewMap() | |||
|         else | ||||
|         { | ||||
|             updated(); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "LocationEdited"; | ||||
|                 jsonObject["ExtraFlags"] = "Viewer"; | ||||
|                 jsonObject["EditedSize"] = QString::number(picture->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|         } | ||||
|     } | ||||
|     delete mapLocDialog; | ||||
|  | @ -976,6 +999,23 @@ void PictureDialog::editSnapmaticImage() | |||
|                 return; | ||||
|             } | ||||
|             smpic->emitCustomSignal("PictureUpdated"); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "ImageEdited"; | ||||
|                 jsonObject["ExtraFlags"] = "Viewer"; | ||||
|                 jsonObject["EditedSize"] = QString::number(smpic->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  |  | |||
|  | @ -66,6 +66,12 @@ | |||
| #include <random> | ||||
| #include <ctime> | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
| #include "TelemetryClass.h" | ||||
| #include <QJsonDocument> | ||||
| #include <QJsonObject> | ||||
| #endif | ||||
| 
 | ||||
| #define importTimeFormat "HHmmss" | ||||
| #define findRetryLimit 500 | ||||
| 
 | ||||
|  | @ -597,6 +603,26 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime | |||
|             { | ||||
|                 bool success = importSnapmaticPicture(picture, notMultiple); | ||||
|                 if (!success) delete picture; | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|                 if (success) | ||||
|                 { | ||||
|                     QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|                     telemetrySettings.beginGroup("Telemetry"); | ||||
|                     bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|                     telemetrySettings.endGroup(); | ||||
|                     if (pushUsageData && Telemetry->canPush()) | ||||
|                     { | ||||
|                         QJsonDocument jsonDocument; | ||||
|                         QJsonObject jsonObject; | ||||
|                         jsonObject["Type"] = "ImportSuccess"; | ||||
|                         jsonObject["ImportSize"] = QString::number(picture->getContentMaxLength()); | ||||
|                         jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                         jsonObject["ImportType"] = "Snapmatic"; | ||||
|                         jsonDocument.setObject(jsonObject); | ||||
|                         Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|                     } | ||||
|                 } | ||||
| #endif | ||||
|                 return success; | ||||
|             } | ||||
|             else | ||||
|  | @ -613,6 +639,25 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime | |||
|             { | ||||
|                 bool success = importSavegameData(savegame, selectedFile, notMultiple); | ||||
|                 if (!success) delete savegame; | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|                 if (success) | ||||
|                 { | ||||
|                     QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|                     telemetrySettings.beginGroup("Telemetry"); | ||||
|                     bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|                     telemetrySettings.endGroup(); | ||||
|                     if (pushUsageData && Telemetry->canPush()) | ||||
|                     { | ||||
|                         QJsonDocument jsonDocument; | ||||
|                         QJsonObject jsonObject; | ||||
|                         jsonObject["Type"] = "ImportSuccess"; | ||||
|                         jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                         jsonObject["ImportType"] = "Savegame"; | ||||
|                         jsonDocument.setObject(jsonObject); | ||||
|                         Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|                     } | ||||
|                 } | ||||
| #endif | ||||
|                 return success; | ||||
|             } | ||||
|             else | ||||
|  | @ -767,6 +812,27 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime | |||
|                             picture->setPictureTitle(importDialog->getImageTitle()); | ||||
|                             picture->updateStrings(); | ||||
|                             success = importSnapmaticPicture(picture, notMultiple); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|                             if (success) | ||||
|                             { | ||||
|                                 QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|                                 telemetrySettings.beginGroup("Telemetry"); | ||||
|                                 bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|                                 telemetrySettings.endGroup(); | ||||
|                                 if (pushUsageData && Telemetry->canPush()) | ||||
|                                 { | ||||
|                                     QJsonDocument jsonDocument; | ||||
|                                     QJsonObject jsonObject; | ||||
|                                     jsonObject["Type"] = "ImportSuccess"; | ||||
|                                     jsonObject["ExtraFlag"] = "Dialog"; | ||||
|                                     jsonObject["ImportSize"] = QString::number(picture->getContentMaxLength()); | ||||
|                                     jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                                     jsonObject["ImportType"] = "Image"; | ||||
|                                     jsonDocument.setObject(jsonObject); | ||||
|                                     Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|                                 } | ||||
|                             } | ||||
| #endif | ||||
|                         } | ||||
|                     } | ||||
|                     else | ||||
|  | @ -794,6 +860,26 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime | |||
|                 bool success = importSnapmaticPicture(picture, notMultiple); | ||||
|                 delete savegame; | ||||
|                 if (!success) delete picture; | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|                 if (success) | ||||
|                 { | ||||
|                     QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|                     telemetrySettings.beginGroup("Telemetry"); | ||||
|                     bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|                     telemetrySettings.endGroup(); | ||||
|                     if (pushUsageData && Telemetry->canPush()) | ||||
|                     { | ||||
|                         QJsonDocument jsonDocument; | ||||
|                         QJsonObject jsonObject; | ||||
|                         jsonObject["Type"] = "ImportSuccess"; | ||||
|                         jsonObject["ImportSize"] = QString::number(picture->getContentMaxLength()); | ||||
|                         jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                         jsonObject["ImportType"] = "Snapmatic"; | ||||
|                         jsonDocument.setObject(jsonObject); | ||||
|                         Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|                     } | ||||
|                 } | ||||
| #endif | ||||
|                 return success; | ||||
|             } | ||||
|             else if (savegame->readingSavegame()) | ||||
|  | @ -801,6 +887,25 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime | |||
|                 bool success = importSavegameData(savegame, selectedFile, notMultiple); | ||||
|                 delete picture; | ||||
|                 if (!success) delete savegame; | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|                 if (success) | ||||
|                 { | ||||
|                     QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|                     telemetrySettings.beginGroup("Telemetry"); | ||||
|                     bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|                     telemetrySettings.endGroup(); | ||||
|                     if (pushUsageData && Telemetry->canPush()) | ||||
|                     { | ||||
|                         QJsonDocument jsonDocument; | ||||
|                         QJsonObject jsonObject; | ||||
|                         jsonObject["Type"] = "ImportSuccess"; | ||||
|                         jsonObject["ImportTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                         jsonObject["ImportType"] = "Savegame"; | ||||
|                         jsonDocument.setObject(jsonObject); | ||||
|                         Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|                     } | ||||
|                 } | ||||
| #endif | ||||
|                 return success; | ||||
|             } | ||||
|             else | ||||
|  | @ -1326,7 +1431,7 @@ void ProfileInterface::deleteSelected() | |||
|                     if (widget->getWidgetType() == "SnapmaticWidget") | ||||
|                     { | ||||
|                         SnapmaticWidget *picWidget = qobject_cast<SnapmaticWidget*>(widget); | ||||
|                         if (picWidget->getPicture()->deletePicFile()) | ||||
|                         if (picWidget->getPicture()->deletePictureFile()) | ||||
|                         { | ||||
|                             pictureDeleted(picWidget); | ||||
|                         } | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ | |||
| #include "PlayerListDialog.h" | ||||
| #include "StringParser.h" | ||||
| #include "AppEnv.h" | ||||
| #include "config.h" | ||||
| #include <QStringListIterator> | ||||
| #include <QStringBuilder> | ||||
| #include <QTextDocument> | ||||
|  | @ -30,6 +31,12 @@ | |||
| #include <QDebug> | ||||
| #include <QFile> | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
| #include "TelemetryClass.h" | ||||
| #include <QJsonDocument> | ||||
| #include <QJsonObject> | ||||
| #endif | ||||
| 
 | ||||
| SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileDB, QWidget *parent) : | ||||
|     QDialog(parent), crewDB(crewDB), profileDB(profileDB), | ||||
|     ui(new Ui::SnapmaticEditor) | ||||
|  | @ -261,11 +268,11 @@ void SnapmaticEditor::setSnapmaticTitle(const QString &title) | |||
|     ui->labTitle->setText(titleStr); | ||||
|     if (SnapmaticPicture::verifyTitle(snapmaticTitle)) | ||||
|     { | ||||
|         ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: green\">%1</a>").arg(tr("Yes", "Yes, should work fine")))); | ||||
|         ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("<span style=\"color: green\">%1</span>").arg(tr("Yes", "Yes, should work fine")))); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         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</span>").arg(tr("No", "No, could lead to issues")))); | ||||
|     } | ||||
| #ifndef Q_OS_ANDROID | ||||
|     ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width())); | ||||
|  | @ -332,6 +339,22 @@ void SnapmaticEditor::on_cmdApply_clicked() | |||
|         { | ||||
|             smpic->updateStrings(); | ||||
|             smpic->emitUpdate(); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "PropertyEdited"; | ||||
|                 jsonObject["EditedSize"] = QString::number(smpic->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|         } | ||||
|     } | ||||
|     close(); | ||||
|  |  | |||
|  | @ -38,6 +38,12 @@ | |||
| #include <QMenu> | ||||
| #include <QFile> | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
| #include "TelemetryClass.h" | ||||
| #include <QJsonDocument> | ||||
| #include <QJsonObject> | ||||
| #endif | ||||
| 
 | ||||
| SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QString profileName, QWidget *parent) : | ||||
|     ProfileWidget(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), profileName(profileName), | ||||
|     ui(new Ui::SnapmaticWidget) | ||||
|  | @ -158,8 +164,24 @@ bool SnapmaticWidget::deletePicture() | |||
|     int uchoice = QMessageBox::question(this, tr("Delete picture"), tr("Are you sure to delete %1 from your Snapmatic pictures?").arg("\""+smpic->getPictureTitle()+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); | ||||
|     if (uchoice == QMessageBox::Yes) | ||||
|     { | ||||
|         if (smpic->deletePicFile()) | ||||
|         if (smpic->deletePictureFile()) | ||||
|         { | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "DeleteSuccess"; | ||||
|                 jsonObject["DeletedSize"] = QString::number(smpic->getContentMaxLength()); | ||||
|                 jsonObject["DeletedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|             return true; | ||||
|         } | ||||
|         else | ||||
|  | @ -347,6 +369,23 @@ void SnapmaticWidget::editSnapmaticImage() | |||
|                 return; | ||||
|             } | ||||
|             smpic->emitCustomSignal("PictureUpdated"); | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "ImageEdited"; | ||||
|                 jsonObject["ExtraFlags"] = "Interface"; | ||||
|                 jsonObject["EditedSize"] = QString::number(smpic->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
| #endif | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  | @ -387,6 +426,26 @@ void SnapmaticWidget::openMapViewer() | |||
|             QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); | ||||
|             picture->setSnapmaticProperties(fallbackProperties); | ||||
|         } | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|         else | ||||
|         { | ||||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); | ||||
|             telemetrySettings.endGroup(); | ||||
|             if (pushUsageData && Telemetry->canPush()) | ||||
|             { | ||||
|                 QJsonDocument jsonDocument; | ||||
|                 QJsonObject jsonObject; | ||||
|                 jsonObject["Type"] = "LocationEdited"; | ||||
|                 jsonObject["ExtraFlags"] = "Interface"; | ||||
|                 jsonObject["EditedSize"] = QString::number(picture->getContentMaxLength()); | ||||
|                 jsonObject["EditedTime"] = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); | ||||
|                 jsonDocument.setObject(jsonObject); | ||||
|                 Telemetry->push(TelemetryCategory::PersonalData, jsonDocument); | ||||
|             } | ||||
|         } | ||||
| #endif | ||||
|     } | ||||
|     delete mapLocDialog; | ||||
| } | ||||
|  |  | |||
|  | @ -169,6 +169,8 @@ void TelemetryClass::push(TelemetryCategory category) | |||
|         break; | ||||
|     case TelemetryCategory::UserFeedback: | ||||
|         break; | ||||
|     case TelemetryCategory::PersonalData: | ||||
|         break; | ||||
|     case TelemetryCategory::CustomEmitted: | ||||
|         break; | ||||
|     } | ||||
|  | @ -393,6 +395,7 @@ QJsonDocument TelemetryClass::getApplicationConf() | |||
|     QJsonObject startupObject; | ||||
|     startupObject["AppStyle"] = settings.value("AppStyle", "System").toString(); | ||||
|     startupObject["CustomStyle"] = settings.value("CustomStyle", false).toBool(); | ||||
|     startupObject["StartCount"] = QString::number(settings.value("StartCount", 0).toUInt()); | ||||
|     jsonObject["Startup"] = startupObject; | ||||
|     settings.endGroup(); | ||||
| 
 | ||||
|  | @ -434,11 +437,14 @@ QString TelemetryClass::categoryToString(TelemetryCategory category) | |||
|     case TelemetryCategory::ApplicationConf: | ||||
|         return QString("ApplicationConf"); | ||||
|         break; | ||||
|     case TelemetryCategory::ApplicationSpec: | ||||
|         return QString("ApplicationSpec"); | ||||
|         break; | ||||
|     case TelemetryCategory::UserFeedback: | ||||
|         return QString("UserFeedback"); | ||||
|         break; | ||||
|     case TelemetryCategory::ApplicationSpec: | ||||
|         return QString("ApplicationSpec"); | ||||
|     case TelemetryCategory::PersonalData: | ||||
|         return QString("PersonalData"); | ||||
|         break; | ||||
|     case TelemetryCategory::CustomEmitted: | ||||
|         return QString("CustomEmitted"); | ||||
|  | @ -489,6 +495,10 @@ void TelemetryClass::work_p(bool doWork) | |||
|         { | ||||
|             push(TelemetryCategory::ApplicationConf); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             push(TelemetryCategory::ApplicationConf, QJsonDocument()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ | |||
| #include <QString> | ||||
| #include <QUrl> | ||||
| 
 | ||||
| enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConf = 3, UserFeedback = 4, ApplicationSpec = 5, CustomEmitted = 99}; | ||||
| enum class TelemetryCategory : int { OperatingSystemSpec = 0, HardwareSpec = 1, UserLocaleData = 2, ApplicationConf = 3, UserFeedback = 4, ApplicationSpec = 5, PersonalData = 6, CustomEmitted = 99 }; | ||||
| 
 | ||||
| class TelemetryClass : public QObject | ||||
| { | ||||
|  |  | |||
|  | @ -517,25 +517,52 @@ QString TranslationClass::getCurrentAreaLanguage() | |||
|     const QStringList areaTranslations = listAreaTranslations(); | ||||
|     if (userAreaLanguage == "Auto" || userAreaLanguage.trimmed().isEmpty()) | ||||
|     { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|         qDebug() << "autoAreaLanguageMode"; | ||||
| #endif | ||||
|         QString langCode = QString(currentLanguage).replace("-", "_"); | ||||
|         if (areaTranslations.contains(langCode)) | ||||
|         GameLanguage gameLanguage = AppEnv::getGameLanguage(AppEnv::getGameVersion()); | ||||
|         if (gameLanguage == GameLanguage::Undefined) | ||||
|         { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|             qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
|             qDebug() << "autoAreaLanguageModeInterface"; | ||||
| #endif | ||||
|             return langCode; | ||||
|             QString langCode = QString(currentLanguage).replace("-", "_"); | ||||
|             if (areaTranslations.contains(langCode)) | ||||
|             { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|                 qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
| #endif | ||||
|                 return langCode; | ||||
|             } | ||||
|             else if (langCode.contains("_")) | ||||
|             { | ||||
|                 langCode = langCode.split("_").at(0); | ||||
|                 if (!areaTranslations.contains(langCode)) goto outputDefaultLanguage; | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|                 qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
| #endif | ||||
|                 return langCode; | ||||
|             } | ||||
|         } | ||||
|         else if (langCode.contains("_")) | ||||
|         else | ||||
|         { | ||||
|             langCode = langCode.split("_").at(0); | ||||
|             if (!areaTranslations.contains(langCode)) goto outputDefaultLanguage; | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|             qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
|             qDebug() << "autoAreaLanguageModeGame"; | ||||
| #endif | ||||
|             return langCode; | ||||
|             QString langCode = AppEnv::gameLanguageToString(gameLanguage).replace("-", "_"); | ||||
|             if (areaTranslations.contains(langCode)) | ||||
|             { | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|                 qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
| #endif | ||||
|                 return langCode; | ||||
|             } | ||||
|             else if (langCode.contains("_")) | ||||
|             { | ||||
|                 langCode = langCode.split("_").at(0); | ||||
|                 if (!areaTranslations.contains(langCode)) goto outputDefaultLanguage; | ||||
| #ifdef GTA5SYNC_DEBUG | ||||
|                 qDebug() << "autoAreaLanguageSelected" << langCode; | ||||
| #endif | ||||
|                 return langCode; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else if (areaTranslations.contains(userAreaLanguage)) | ||||
|  |  | |||
							
								
								
									
										11
									
								
								main.cpp
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								main.cpp
									
										
									
									
									
								
							|  | @ -75,6 +75,14 @@ int main(int argc, char *argv[]) | |||
|     QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|     settings.beginGroup("Startup"); | ||||
| 
 | ||||
| #ifdef GTA5SYNC_TELEMETRY | ||||
|     // Increase Start count at every startup
 | ||||
|     uint startCount = settings.value("StartCount", 0).toUInt(); | ||||
|     startCount++; | ||||
|     settings.setValue("StartCount", startCount); | ||||
|     settings.sync(); | ||||
| #endif | ||||
| 
 | ||||
|     bool isFirstStart = settings.value("IsFirstStart", true).toBool(); | ||||
|     bool customStyle = settings.value("CustomStyle", false).toBool(); | ||||
|     QString appStyle = settings.value("AppStyle", "Default").toString(); | ||||
|  | @ -181,7 +189,9 @@ int main(int argc, char *argv[]) | |||
|             QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); | ||||
|             telemetrySettings.beginGroup("Telemetry"); | ||||
|             telemetrySettings.setValue("PushUsageData", true); | ||||
|             telemetrySettings.setValue("PushAppConf", true); | ||||
|             telemetrySettings.endGroup(); | ||||
|             telemetrySettings.sync(); | ||||
|             Telemetry->init(); | ||||
|             Telemetry->work(); | ||||
|         } | ||||
|  | @ -189,7 +199,6 @@ int main(int argc, char *argv[]) | |||
|         delete telemetryDialog; | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     settings.endGroup(); | ||||
| 
 | ||||
|     for (QString currentArg : applicationArgs) | ||||
|  |  | |||
							
								
								
									
										594
									
								
								res/gta5sync.ts
									
										
									
									
									
								
							
							
						
						
									
										594
									
								
								res/gta5sync.ts
									
										
									
									
									
								
							
										
											
												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
											
										
									
								
							
										
											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
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue