From 49d29aa3ecca1b6fd97a1eeeebf6cb8cf3370c84 Mon Sep 17 00:00:00 2001 From: Rafael Date: Tue, 22 Mar 2016 05:20:42 +0100 Subject: [PATCH] added get member name from Social Club --- CrewDatabase.cpp | 54 +++++++++++++++++++++++++++ CrewDatabase.h | 41 +++++++++++++++++++++ DatabaseThread.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++ DatabaseThread.h | 43 ++++++++++++++++++++++ PictureDialog.cpp | 19 ++++++++-- PictureDialog.h | 5 ++- PictureDialog.ui | 20 ++++++++++ ProfileDatabase.cpp | 54 +++++++++++++++++++++++++++ ProfileDatabase.h | 42 +++++++++++++++++++++ gta5sync.pro | 12 ++++-- main.cpp | 22 +++++++++-- 11 files changed, 391 insertions(+), 11 deletions(-) create mode 100755 CrewDatabase.cpp create mode 100755 CrewDatabase.h create mode 100755 DatabaseThread.cpp create mode 100755 DatabaseThread.h create mode 100755 ProfileDatabase.cpp create mode 100755 ProfileDatabase.h diff --git a/CrewDatabase.cpp b/CrewDatabase.cpp new file mode 100755 index 0000000..d86e853 --- /dev/null +++ b/CrewDatabase.cpp @@ -0,0 +1,54 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "CrewDatabase.h" +#include +#include +#include + +CrewDatabase::CrewDatabase(QObject *parent) : QObject(parent) +{ + QDir dir; + dir.setPath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); + dir.mkdir("../gta5sync"); + QString dirPath = dir.absolutePath(); + QString defaultConfPath = dirPath + "/crews.ini"; + + QSettings confPathSettings("Syping Gaming Team","gta5sync"); + confPathSettings.beginGroup("Database"); + QString confPathFile = confPathSettings.value("Location", defaultConfPath).toString(); + confPathSettings.endGroup(); + + crewDB = new QSettings(confPathFile, QSettings::IniFormat); + crewDB->beginGroup("Crews"); +} + +CrewDatabase::~CrewDatabase() +{ + crewDB->endGroup(); +} + +QStringList CrewDatabase::getCrews() +{ + return crewDB->childKeys(); +} + +void CrewDatabase::addCrew(int crewID) +{ + crewDB->setValue(QString::number(crewID), crewID); +} diff --git a/CrewDatabase.h b/CrewDatabase.h new file mode 100755 index 0000000..e4e32d6 --- /dev/null +++ b/CrewDatabase.h @@ -0,0 +1,41 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef CREWDATABASE_H +#define CREWDATABASE_H + +#include +#include +#include + +class CrewDatabase : public QObject +{ + Q_OBJECT +public: + explicit CrewDatabase(QObject *parent = 0); + QStringList getCrews(); + ~CrewDatabase(); + +private: + QSettings *crewDB; + +public slots: + void addCrew(int crewID); +}; + +#endif // CREWDATABASE_H diff --git a/DatabaseThread.cpp b/DatabaseThread.cpp new file mode 100755 index 0000000..fbbacfb --- /dev/null +++ b/DatabaseThread.cpp @@ -0,0 +1,90 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "DatabaseThread.h" +#include "CrewDatabase.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DatabaseThread::DatabaseThread(CrewDatabase *crewDB, QObject *parent) : QThread(parent), crewDB(crewDB) +{ +} + +void DatabaseThread::run() +{ + QNetworkAccessManager *netManager = new QNetworkAccessManager(); + QEventLoop threadLoop; + dbtBegin: + + QStringList crewList = crewDB->getCrews(); + foreach (const QString &crewID, crewList) + { + QString memberListUrl = "http://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=" + crewID; + + QNetworkRequest netRequest(memberListUrl); + netRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"); + netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + netRequest.setRawHeader("Accept-Language", "en-US;q=0.5,en;q=0.3"); + netRequest.setRawHeader("Connection", "keep-alive"); + + QNetworkReply *netReply = netManager->get(netRequest); + + QEventLoop downloadLoop; + QObject::connect(netReply, SIGNAL(finished()), &downloadLoop, SLOT(quit())); + QTimer::singleShot(30000, &downloadLoop, SLOT(quit())); + downloadLoop.exec(); + + if (netReply->isFinished()) + { + QByteArray crewJson = netReply->readAll(); + QJsonDocument crewDocument = QJsonDocument::fromJson(crewJson); + QJsonObject crewObject = crewDocument.object(); + QVariantMap crewMap = crewObject.toVariantMap(); + if (crewMap.contains("Members")) + { + QList memberList = crewMap["Members"].toList(); + foreach (const QVariant &memberVariant, memberList) + { + QMap memberMap = memberVariant.toMap(); + if (memberMap.contains("RockstarId") && memberMap.contains("Name")) + { + int RockstarId = memberMap["RockstarId"].toInt(); + QString memberName = memberMap["Name"].toString(); + if (memberName != "" && RockstarId != 0) + { + emit playerNameFound(RockstarId, memberName); + } + } + } + } + } + } + + QTimer::singleShot(300000, &threadLoop, SLOT(quit())); + threadLoop.exec(); + goto dbtBegin; +} diff --git a/DatabaseThread.h b/DatabaseThread.h new file mode 100755 index 0000000..f987e0f --- /dev/null +++ b/DatabaseThread.h @@ -0,0 +1,43 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef DATABASETHREAD_H +#define DATABASETHREAD_H + +#include "CrewDatabase.h" +#include +#include + +class DatabaseThread : public QThread +{ + Q_OBJECT +public: + explicit DatabaseThread(CrewDatabase *crewDB, QObject *parent = 0); + +private: + CrewDatabase *crewDB; + +protected: + void run(); + +signals: + void playerNameFound(int playerID, QString playerName); + +}; + +#endif // DATABASETHREAD_H diff --git a/PictureDialog.cpp b/PictureDialog.cpp index c15abb0..e3b4f47 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -17,22 +17,29 @@ *****************************************************************************/ #include "PictureDialog.h" +#include "ProfileDatabase.h" #include "ui_PictureDialog.h" #include +#include #include #include #include #include +#include #include -PictureDialog::PictureDialog(QWidget *parent) : - QDialog(parent), +PictureDialog::PictureDialog(ProfileDatabase *profileDB, QWidget *parent) : + QDialog(parent), profileDB(profileDB), ui(new Ui::PictureDialog) { ui->setupUi(this); windowTitleStr = this->windowTitle(); jsonDrawString = ui->labJSON->text(); + ui->cmdExport->setEnabled(0); + ui->cmdExport->setDefault(0); + ui->cmdClose->setDefault(1); + ui->cmdClose->setFocus(); } PictureDialog::~PictureDialog() @@ -51,6 +58,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk) if (picture->isPicOk()) { ui->labPicture->setPixmap(picture->getPixmap()); + ui->cmdExport->setEnabled(true); } if (picture->isJsonOk()) { @@ -66,7 +74,7 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk) foreach (const QString &player, plyrsList) { plyrsStr.append(", "); - plyrsStr.append(player); + plyrsStr.append(profileDB->getPlayerName(player.toInt())); } plyrsStr.remove(0,2); } @@ -91,3 +99,8 @@ void PictureDialog::on_cmdClose_clicked() { this->close(); } + +void PictureDialog::on_cmdExport_clicked() +{ + +} diff --git a/PictureDialog.h b/PictureDialog.h index df2b2b4..97f04a2 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -20,6 +20,7 @@ #define PICTUREDIALOG_H #include "SnapmaticPicture.h" +#include "ProfileDatabase.h" #include namespace Ui { @@ -30,17 +31,19 @@ class PictureDialog : public QDialog { Q_OBJECT public: - explicit PictureDialog(QWidget *parent = 0); + explicit PictureDialog(ProfileDatabase *profileDB, QWidget *parent = 0); void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk); ~PictureDialog(); private slots: void on_cmdClose_clicked(); + void on_cmdExport_clicked(); private: Ui::PictureDialog *ui; QString jsonDrawString; QString windowTitleStr; + ProfileDatabase *profileDB; }; #endif // PICTUREDIALOG_H diff --git a/PictureDialog.ui b/PictureDialog.ui index 2faf1ed..00c96ea 100755 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -33,6 +33,19 @@ + + + + Qt::Vertical + + + + 0 + 0 + + + + @@ -74,6 +87,13 @@ + + + + Export + + + diff --git a/ProfileDatabase.cpp b/ProfileDatabase.cpp new file mode 100755 index 0000000..e57aed8 --- /dev/null +++ b/ProfileDatabase.cpp @@ -0,0 +1,54 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "ProfileDatabase.h" +#include +#include +#include + +ProfileDatabase::ProfileDatabase(QObject *parent) : QObject(parent) +{ + QDir dir; + dir.setPath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); + dir.mkdir("../gta5sync"); + QString dirPath = dir.absolutePath(); + QString defaultConfPath = dirPath + "/players.ini"; + + QSettings confPathSettings("Syping Gaming Team","gta5sync"); + confPathSettings.beginGroup("Database"); + QString confPathFile = confPathSettings.value("Location", defaultConfPath).toString(); + confPathSettings.endGroup(); + + profileDB = new QSettings(confPathFile, QSettings::IniFormat); + profileDB->beginGroup("Players"); +} + +ProfileDatabase::~ProfileDatabase() +{ + profileDB->endGroup(); +} + +QString ProfileDatabase::getPlayerName(int playerID) +{ + return profileDB->value(QString::number(playerID), playerID).toString(); +} + +void ProfileDatabase::setPlayerName(int playerID, QString playerName) +{ + profileDB->setValue(QString::number(playerID), playerName); +} diff --git a/ProfileDatabase.h b/ProfileDatabase.h new file mode 100755 index 0000000..bbe1f26 --- /dev/null +++ b/ProfileDatabase.h @@ -0,0 +1,42 @@ +/***************************************************************************** +* gta5sync GRAND THEFT AUTO V SYNC +* Copyright (C) 2016 Syping Gaming Team +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef PROFILEDATABASE_H +#define PROFILEDATABASE_H + +#include +#include +#include + +class ProfileDatabase : public QObject +{ + Q_OBJECT +public: + explicit ProfileDatabase(QObject *parent = 0); + QString getPlayerName(int playerID); + ~ProfileDatabase(); + +private: + QSettings *profileDB; + +public slots: + void setPlayerName(int playerID, QString playerName); + +}; + +#endif // PROFILEDATABASE_H diff --git a/gta5sync.pro b/gta5sync.pro index d95559f..580150c 100755 --- a/gta5sync.pro +++ b/gta5sync.pro @@ -16,7 +16,7 @@ #* along with this program. If not, see . #*****************************************************************************/ -QT += core gui +QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets isEqual(QT_MAJOR_VERSION, 5): DEFINES += QT5_MODE @@ -27,11 +27,17 @@ TEMPLATE = app SOURCES += main.cpp\ SnapmaticPicture.cpp \ - PictureDialog.cpp + PictureDialog.cpp \ + ProfileDatabase.cpp \ + DatabaseThread.cpp \ + CrewDatabase.cpp HEADERS += \ SnapmaticPicture.h \ - PictureDialog.h + PictureDialog.h \ + ProfileDatabase.h \ + DatabaseThread.h \ + CrewDatabase.h FORMS += \ PictureDialog.ui diff --git a/main.cpp b/main.cpp index 93ca445..b2c7683 100755 --- a/main.cpp +++ b/main.cpp @@ -17,15 +17,21 @@ *****************************************************************************/ #include "SnapmaticPicture.h" +#include "ProfileDatabase.h" +#include "DatabaseThread.h" #include "PictureDialog.h" +#include "CrewDatabase.h" #include #include +#include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); + a.setApplicationName("gta5sync"); + a.setApplicationVersion("1.0.0"); QStringList applicationArgs = a.arguments(); QString selectedAction; @@ -52,15 +58,23 @@ int main(int argc, char *argv[]) } } + CrewDatabase *crewDB = new CrewDatabase(); + ProfileDatabase *profileDB = new ProfileDatabase(); + DatabaseThread *threadDB = new DatabaseThread(crewDB); + QObject::connect(threadDB, SIGNAL(playerNameFound(int,QString)), profileDB, SLOT(setPlayerName(int,QString))); + threadDB->start(); + if (selectedAction == "showpic") { - PictureDialog picDialog; + PictureDialog *picDialog = new PictureDialog(profileDB); SnapmaticPicture picture; bool readOk = picture.readingPictureFromFile(arg1); - picDialog.setWindowFlags(picDialog.windowFlags()^Qt::WindowContextHelpButtonHint); - picDialog.setSnapmaticPicture(&picture, readOk); + picDialog->setWindowFlags(picDialog->windowFlags()^Qt::WindowContextHelpButtonHint); + picDialog->setSnapmaticPicture(&picture, readOk); + int crewID = picture.getCrewNumber(); + if (crewID != 0) { crewDB->addCrew(crewID); } if (!readOk) { return 1; } - picDialog.show(); + picDialog->show(); return a.exec(); }