/***************************************************************************** * gta5sync GRAND THEFT AUTO V SYNC * Copyright (C) 2016-2017 Syping * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . *****************************************************************************/ #include "TranslationClass.h" #include "SnapmaticPicture.h" #include "ProfileDatabase.h" #include "DatabaseThread.h" #include "SavegameDialog.h" #include "PictureDialog.h" #include "UserInterface.h" #include "CrewDatabase.h" #include "SavegameData.h" #include "IconLoader.h" #include "AppEnv.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #ifdef GTA5SYNC_WIN #include "windows.h" #include #endif int main(int argc, char *argv[]) { QApplication a(argc, argv); a.setApplicationName(GTA5SYNC_APPSTR); a.setApplicationVersion(GTA5SYNC_APPVER); #ifdef GTA5SYNC_WIN #if QT_VERSION >= 0x050400 if (QSysInfo::windowsVersion() >= 0x0080) { // Get Windows Font NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(ncm); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); LOGFONTW uiFont = ncm.lfMessageFont; QString uiFontStr(QString::fromStdWString(std::wstring(uiFont.lfFaceName))); #ifdef GTA5SYNC_DEBUG qDebug() << QApplication::tr("Font") << QApplication::tr("Selected Font: %1").arg(uiFontStr); #endif // Set Application Font QFont appFont(uiFontStr, 9); a.setFont(appFont); } #endif #endif QString pluginsDir = AppEnv::getPluginsFolder(); if (QFileInfo(pluginsDir).exists()) { a.addLibraryPath(pluginsDir); } TCInstance->initUserLanguage(); TCInstance->loadTranslation(&a); QStringList applicationArgs = a.arguments(); QString selectedAction; QString arg1; applicationArgs.removeAt(0); foreach(QString currentArg, applicationArgs) { QString reworkedArg; if (currentArg.left(9) == "-showpic=" && selectedAction == "") { reworkedArg = currentArg.remove(0,9); arg1 = reworkedArg; selectedAction = "showpic"; } else if (currentArg.left(9) == "-showsgd=" && selectedAction == "") { reworkedArg = currentArg.remove(0,9); arg1 = reworkedArg; selectedAction = "showsgd"; } else if (selectedAction == "") { QFile argumentFile(currentArg); QFileInfo argumentFileInfo(argumentFile); if (argumentFile.exists()) { QString argumentFileName = argumentFileInfo.fileName(); QString argumentFileType = argumentFileName.left(4); QString argumentFileExt = argumentFileName.right(4); if (argumentFileType == "PGTA" || argumentFileExt == ".g5e") { arg1 = currentArg; selectedAction = "showpic"; } else if (argumentFileType == "SGTA") { arg1 = currentArg; selectedAction = "showsgd"; } else if (argumentFileType == "MISR") { arg1 = currentArg; selectedAction = "showsgd"; } } } } if (selectedAction == "showpic") { CrewDatabase crewDB; ProfileDatabase profileDB; DatabaseThread threadDB(&crewDB); PictureDialog picDialog(true, &profileDB, &crewDB); SnapmaticPicture picture; bool readOk = picture.readingPictureFromFile(arg1); picDialog.setWindowIcon(IconLoader::loadingAppIcon()); picDialog.setSnapmaticPicture(&picture, readOk); int crewID = picture.getSnapmaticProperties().crewID; if (crewID != 0) { crewDB.addCrew(crewID); } if (!readOk) { return 1; } QEventLoop threadLoop; QObject::connect(&threadDB, SIGNAL(crewNameFound(int, QString)), &crewDB, SLOT(setCrewName(int, QString))); QObject::connect(&threadDB, SIGNAL(crewNameUpdated()), &picDialog, SLOT(crewNameUpdated())); QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); QObject::connect(&threadDB, SIGNAL(playerNameUpdated()), &picDialog, SLOT(playerNameUpdated())); QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); QObject::connect(&picDialog, SIGNAL(endDatabaseThread()), &threadDB, SLOT(doEndThread())); threadDB.start(); picDialog.show(); threadLoop.exec(); return 0; } else if (selectedAction == "showsgd") { SavegameDialog savegameDialog; SavegameData savegame; bool readOk = savegame.readingSavegameFromFile(arg1); savegameDialog.setWindowIcon(IconLoader::loadingAppIcon()); savegameDialog.setSavegameData(&savegame, arg1, readOk); if (!readOk) { return 1; } savegameDialog.show(); return a.exec(); } CrewDatabase crewDB; ProfileDatabase profileDB; DatabaseThread threadDB(&crewDB); QEventLoop threadLoop; QObject::connect(&threadDB, SIGNAL(crewNameFound(int,QString)), &crewDB, SLOT(setCrewName(int, QString))); QObject::connect(&threadDB, SIGNAL(playerNameFound(int, QString)), &profileDB, SLOT(setPlayerName(int, QString))); QObject::connect(&threadDB, SIGNAL(finished()), &threadLoop, SLOT(quit())); threadDB.start(); UserInterface uiWindow(&profileDB, &crewDB, &threadDB); uiWindow.setWindowIcon(IconLoader::loadingAppIcon()); uiWindow.setupDirEnv(); #ifdef Q_OS_ANDROID uiWindow.showMaximized(); #else uiWindow.show(); #endif threadLoop.exec(); return 0; }