lgogdownloader/include/config.h

334 lines
8.9 KiB
C
Raw Normal View History

2013-03-15 21:46:16 +01:00
/* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
2013-03-24 22:56:57 +01:00
* http://www.wtfpl.net/ for more details. */
2013-03-15 21:46:16 +01:00
#ifndef CONFIG_H__
#define CONFIG_H__
#include <iostream>
#include <curl/curl.h>
#include <json/json.h>
#include <mutex>
#include <ctime>
2013-03-15 21:46:16 +01:00
#include "blacklist.h"
struct DirectoryConfig
{
bool bSubDirectories;
std::string sDirectory;
2022-07-31 14:11:32 +02:00
std::string sWinePrefix;
std::string sGameSubdir;
std::string sInstallersSubdir;
std::string sExtrasSubdir;
std::string sPatchesSubdir;
std::string sLanguagePackSubdir;
std::string sDLCSubdir;
std::string sGalaxyInstallSubdir;
};
struct DownloadConfig
{
unsigned int iInstallerPlatform;
unsigned int iInstallerLanguage;
unsigned int iGalaxyCDN;
std::vector<unsigned int> vPlatformPriority;
std::vector<unsigned int> vLanguagePriority;
std::vector<std::string> vGalaxyCDNPriority;
std::vector<std::string> vTags;
unsigned int iInclude;
2017-03-05 21:47:44 +01:00
unsigned int iGalaxyPlatform;
2017-03-06 06:22:34 +01:00
unsigned int iGalaxyLanguage;
unsigned int iGalaxyArch;
bool bRemoteXML;
bool bSaveChangelogs;
bool bSaveSerials;
2023-12-28 15:54:05 +01:00
bool bSaveGameDetailsJson;
2023-12-28 20:25:11 +01:00
bool bSaveProductJson;
2023-06-05 15:06:44 +02:00
bool bSaveLogo;
2023-11-22 22:41:10 +01:00
bool bSaveIcon;
bool bAutomaticXMLCreation;
bool bFreeSpaceCheck;
bool bIgnoreDLCCount;
bool bDuplicateHandler;
bool bGalaxyDependencies;
bool bDeleteOrphans;
};
struct gameSpecificConfig
{
DownloadConfig dlConf;
DirectoryConfig dirConf;
};
class GalaxyConfig
{
public:
bool isExpired()
{
std::unique_lock<std::mutex> lock(m);
2017-09-20 05:59:43 +02:00
bool bExpired = true; // assume that token is expired
intmax_t time_now = time(NULL);
if (this->token_json.isMember("expires_at"))
bExpired = (time_now > this->token_json["expires_at"].asLargestInt());
return bExpired;
}
std::string getAccessToken()
{
std:: string access_token;
std::unique_lock<std::mutex> lock(m);
if (this->token_json.isMember("access_token"))
access_token = this->token_json["access_token"].asString();
return access_token;
}
std::string getRefreshToken()
{
std::string refresh_token;
std::unique_lock<std::mutex> lock(m);
if (this->token_json.isMember("refresh_token"))
refresh_token = this->token_json["refresh_token"].asString();
return refresh_token;
}
Json::Value getJSON()
{
std::unique_lock<std::mutex> lock(m);
return this->token_json;
}
2022-08-02 18:36:31 +02:00
std::string getUserId() {
std::unique_lock<std::mutex> lock(m);
if(this->token_json.isMember("user_id")) {
return this->token_json["user_id"].asString();
}
return {};
}
void setJSON(Json::Value json)
{
std::unique_lock<std::mutex> lock(m);
if (!json.isMember("expires_at"))
{
intmax_t time_now = time(NULL);
Json::Value::LargestInt expires_in = 3600;
if (json.isMember("expires_in"))
if (!json["expires_in"].isNull())
expires_in = json["expires_in"].asLargestInt();
Json::Value::LargestInt expires_at = time_now + expires_in;
json["expires_at"] = expires_at;
}
this->token_json = json;
}
void setFilepath(const std::string& path)
{
std::unique_lock<std::mutex> lock(m);
this->filepath = path;
}
std::string getFilepath()
{
std::unique_lock<std::mutex> lock(m);
return this->filepath;
}
2022-08-09 11:07:08 +02:00
void resetClient() {
std::lock_guard<std::mutex> lock(m);
if(token_json.isMember("client_id")) {
token_json["client_id"] = default_client_id;
}
if(token_json.isMember("client_secret")) {
token_json["client_secret"] = default_client_secret;
}
}
std::string getClientId()
{
2022-08-09 11:07:08 +02:00
std::lock_guard<std::mutex> lock(m);
2022-08-02 18:36:31 +02:00
if(token_json.isMember("client_id")) {
return token_json["client_id"].asString();
}
return default_client_id;
}
std::string getClientSecret()
{
2022-08-09 11:07:08 +02:00
std::lock_guard<std::mutex> lock(m);
2022-08-02 18:36:31 +02:00
if(token_json.isMember("client_secret")) {
return token_json["client_secret"].asString();
}
return default_client_secret;
}
std::string getRedirectUri()
{
std::unique_lock<std::mutex> lock(m);
return this->redirect_uri;
}
GalaxyConfig() = default;
GalaxyConfig(const GalaxyConfig& other)
{
std::lock_guard<std::mutex> guard(other.m);
redirect_uri = other.redirect_uri;
filepath = other.filepath;
token_json = other.token_json;
}
GalaxyConfig& operator= (GalaxyConfig& other)
{
if(&other == this)
return *this;
std::unique_lock<std::mutex> lock1(m, std::defer_lock);
std::unique_lock<std::mutex> lock2(other.m, std::defer_lock);
std::lock(lock1, lock2);
redirect_uri = other.redirect_uri;
filepath = other.filepath;
token_json = other.token_json;
return *this;
}
protected:
private:
2022-08-02 18:36:31 +02:00
const std::string default_client_id = "46899977096215655";
const std::string default_client_secret = "9d85c43b1482497dbbce61f6e4aa173a433796eeae2ca8c5f6129f2dc4de46d9";
std::string redirect_uri = "https://embed.gog.com/on_login_success?origin=client";
std::string filepath;
Json::Value token_json;
mutable std::mutex m;
};
struct CurlConfig
{
bool bVerifyPeer;
bool bVerbose;
std::string sCACertPath;
std::string sCookiePath;
2017-08-01 22:59:11 +02:00
std::string sUserAgent;
long int iTimeout;
curl_off_t iDownloadRate;
long int iLowSpeedTimeout;
long int iLowSpeedTimeoutRate;
std::string sInterface;
};
2013-03-15 21:46:16 +01:00
class Config
{
public:
Config() {};
virtual ~Config() {};
// Booleans
bool bLogin;
2024-08-22 12:09:51 +02:00
bool bForceBrowserLogin;
bool bSaveConfig;
bool bResetConfig;
bool bDownload;
2013-03-15 21:46:16 +01:00
bool bRepair;
bool bUpdated;
2023-10-12 14:58:00 +02:00
bool bNew;
bool bCheckStatus;
bool bNotifications;
bool bIncludeHiddenProducts;
2021-09-12 09:25:37 +02:00
bool bSizeOnly;
bool bUnicode; // use Unicode in console output
bool bColor; // use colors
2014-02-13 09:05:16 +01:00
bool bReport;
bool bRespectUmask;
bool bPlatformDetection;
#ifdef USE_QT_GUI_LOGIN
bool bEnableLoginGUI;
2024-03-30 18:18:32 +01:00
bool bForceGUILogin;
#endif
bool bUseFastCheck;
bool bTrustAPIForExtras;
bool bGalaxyListCDNs;
// Cache
bool bUseCache;
bool bUpdateCache;
int iCacheValid;
// Download with file id options
std::string sFileIdString;
std::string sOutputFilename;
// Curl
CurlConfig curlConf;
// Download
DownloadConfig dlConf;
// Directories
DirectoryConfig dirConf;
std::string sCacheDirectory;
2013-03-15 21:46:16 +01:00
std::string sXMLDirectory;
std::string sConfigDirectory;
// File paths
2013-03-15 21:46:16 +01:00
std::string sConfigFilePath;
std::string sBlacklistFilePath;
std::string sIgnorelistFilePath;
std::string sGameHasDLCListFilePath;
std::string sReportFilePath;
std::string sTransformConfigFilePath;
std::string sXMLFile;
// Regex
std::string sGameRegex;
std::string sOrphanRegex;
std::string sIgnoreDLCCountRegex;
// Priorities
std::string sPlatformPriority;
std::string sLanguagePriority;
// General strings
std::string sVersionString;
std::string sVersionNumber;
std::string sEmail;
std::string sPassword;
// Lists
Blacklist blacklist;
Blacklist ignorelist;
Blacklist gamehasdlc;
// Cloud save options
std::vector<std::string> cloudWhiteList;
std::vector<std::string> cloudBlackList;
bool bCloudForce;
std::string sGameHasDLCList;
// Integers
int iRetries;
unsigned int iThreads;
unsigned int iInfoThreads;
int iWait;
2013-03-15 21:46:16 +01:00
size_t iChunkSize;
int iProgressInterval;
int iMsgLevel;
unsigned int iListFormat;
Json::Value transformationsJSON;
2013-03-15 21:46:16 +01:00
};
#endif // CONFIG_H__