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 UTIL_H
|
|
|
|
#define UTIL_H
|
|
|
|
|
2014-09-19 21:46:03 +02:00
|
|
|
#include "globalconstants.h"
|
2017-02-17 10:14:28 +01:00
|
|
|
#include "config.h"
|
|
|
|
#include "globals.h"
|
2014-09-19 21:46:03 +02:00
|
|
|
|
2013-03-15 21:46:16 +01:00
|
|
|
#include <cstdio>
|
|
|
|
#include <cstdlib>
|
|
|
|
#include <cstring>
|
|
|
|
#include <cerrno>
|
|
|
|
#include <iostream>
|
|
|
|
#include <sstream>
|
2017-01-13 17:09:05 +01:00
|
|
|
#include <memory>
|
2013-03-15 21:46:16 +01:00
|
|
|
#include <rhash.h>
|
2014-10-28 20:03:02 +01:00
|
|
|
#include <boost/filesystem.hpp>
|
2015-09-01 13:45:34 +02:00
|
|
|
#include <boost/regex.hpp>
|
2015-05-12 01:19:16 +02:00
|
|
|
#include <json/json.h>
|
2019-03-01 13:09:52 +01:00
|
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
2020-09-26 21:09:38 +02:00
|
|
|
#include <curl/curl.h>
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
char *memory;
|
|
|
|
curl_off_t size;
|
|
|
|
} ChunkMemoryStruct;
|
2013-03-15 21:46:16 +01:00
|
|
|
|
2016-04-18 19:33:19 +02:00
|
|
|
struct gameItem
|
|
|
|
{
|
|
|
|
std::string name;
|
|
|
|
std::string id;
|
|
|
|
std::vector<std::string> dlcnames;
|
|
|
|
Json::Value gamedetailsjson;
|
2017-01-11 18:22:38 +01:00
|
|
|
int updates = 0;
|
2016-04-18 19:33:19 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wishlistItem
|
|
|
|
{
|
|
|
|
std::string title;
|
|
|
|
unsigned int platform;
|
|
|
|
std::vector<std::string> tags;
|
|
|
|
time_t release_date_time;
|
|
|
|
std::string currency;
|
|
|
|
std::string price;
|
|
|
|
std::string discount_percent;
|
|
|
|
std::string discount;
|
|
|
|
std::string store_credit;
|
|
|
|
std::string url;
|
|
|
|
bool bIsBonusStoreCreditIncluded;
|
|
|
|
bool bIsDiscounted;
|
|
|
|
};
|
|
|
|
|
2013-03-15 21:46:16 +01:00
|
|
|
namespace Util
|
|
|
|
{
|
2014-09-19 21:46:03 +02:00
|
|
|
std::string makeFilepath(const std::string& directory, const std::string& path, const std::string& gamename, std::string subdirectory = "", const unsigned int& platformId = 0, const std::string& dlcname = "");
|
2014-06-20 17:30:40 +02:00
|
|
|
std::string makeRelativeFilepath(const std::string& path, const std::string& gamename, std::string subdirectory = "");
|
2013-03-15 21:46:16 +01:00
|
|
|
std::string getFileHash(const std::string& filename, unsigned hash_id);
|
2020-02-19 12:49:06 +01:00
|
|
|
std::string getFileHashRange(const std::string& filepath, unsigned hash_id, off_t range_start = 0, off_t range_end = 0);
|
2015-07-03 22:09:50 +02:00
|
|
|
std::string getChunkHash(unsigned char* chunk, uintmax_t chunk_size, unsigned hash_id);
|
2015-07-04 20:52:12 +02:00
|
|
|
int createXML(std::string filepath, uintmax_t chunk_size, std::string xml_dir = std::string());
|
2014-08-01 19:34:44 +02:00
|
|
|
int getGameSpecificConfig(std::string gamename, gameSpecificConfig* conf, std::string directory = std::string());
|
2014-09-19 21:46:03 +02:00
|
|
|
int replaceString(std::string& str, const std::string& to_replace, const std::string& replace_with);
|
2022-07-31 14:11:32 +02:00
|
|
|
int replaceAllString(std::string& str, const std::string& to_replace, const std::string& replace_with);
|
2014-09-19 21:46:03 +02:00
|
|
|
void filepathReplaceReservedStrings(std::string& str, const std::string& gamename, const unsigned int& platformId = 0, const std::string& dlcname = "");
|
2014-10-28 20:03:02 +01:00
|
|
|
void setFilePermissions(const boost::filesystem::path& path, const boost::filesystem::perms& permissions);
|
2014-11-27 22:20:22 +01:00
|
|
|
int getTerminalWidth();
|
2023-03-27 21:09:13 +02:00
|
|
|
void getManualUrlsFromJSON(const Json::Value &root, std::vector<std::string> &urls);
|
2015-05-12 01:19:16 +02:00
|
|
|
std::vector<std::string> getDLCNamesFromJSON(const Json::Value &root);
|
2015-08-29 13:26:36 +02:00
|
|
|
std::string getHomeDir();
|
|
|
|
std::string getConfigHome();
|
|
|
|
std::string getCacheHome();
|
2015-08-29 15:18:20 +02:00
|
|
|
std::vector<std::string> tokenize(const std::string& str, const std::string& separator = ",");
|
2017-05-23 15:44:27 +02:00
|
|
|
unsigned int getOptionValue(const std::string& str, const std::vector<GlobalConstants::optionsStruct>& options, const bool& bAllowStringToIntConversion = true);
|
2015-10-03 18:03:24 +02:00
|
|
|
std::string getOptionNameString(const unsigned int& value, const std::vector<GlobalConstants::optionsStruct>& options);
|
2016-02-20 14:34:51 +01:00
|
|
|
void parseOptionString(const std::string &option_string, std::vector<unsigned int> &priority, unsigned int &type, const std::vector<GlobalConstants::optionsStruct>& options);
|
2016-05-18 13:11:37 +02:00
|
|
|
std::string getLocalFileHash(const std::string& xml_dir, const std::string& filepath, const std::string& gamename = std::string());
|
2016-05-20 19:33:07 +02:00
|
|
|
void shortenStringToTerminalWidth(std::string& str);
|
2017-10-11 23:29:04 +02:00
|
|
|
std::string getJsonUIntValueAsString(const Json::Value& json);
|
2018-09-12 14:18:54 +02:00
|
|
|
std::string getStrippedString(std::string str);
|
2019-03-01 13:09:52 +01:00
|
|
|
std::string makeEtaString(const unsigned long long& iBytesRemaining, const double& dlRate);
|
|
|
|
std::string makeEtaString(const boost::posix_time::time_duration& duration);
|
2020-11-28 21:02:01 +01:00
|
|
|
std::string CurlHandleGetInfoString(CURL* curlhandle, CURLINFO info);
|
2020-09-26 21:09:38 +02:00
|
|
|
void CurlHandleSetDefaultOptions(CURL* curlhandle, const CurlConfig& conf);
|
|
|
|
CURLcode CurlGetResponse(const std::string& url, std::string& response, int max_retries = -1);
|
|
|
|
CURLcode CurlHandleGetResponse(CURL* curlhandle, std::string& response, int max_retries = -1);
|
|
|
|
curl_off_t CurlWriteMemoryCallback(char *ptr, curl_off_t size, curl_off_t nmemb, void *userp);
|
|
|
|
curl_off_t CurlWriteChunkMemoryCallback(void *contents, curl_off_t size, curl_off_t nmemb, void *userp);
|
2022-08-04 16:57:15 +02:00
|
|
|
curl_off_t CurlReadChunkMemoryCallback(void *contents, curl_off_t size, curl_off_t nmemb, ChunkMemoryStruct *userp);
|
2017-01-11 14:57:26 +01:00
|
|
|
|
|
|
|
template<typename ... Args> std::string formattedString(const std::string& format, Args ... args)
|
|
|
|
{
|
|
|
|
std::size_t sz = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; // +1 for null terminator
|
|
|
|
std::unique_ptr<char[]> buf(new char[sz]);
|
|
|
|
std::snprintf(buf.get(), sz, format.c_str(), args ...);
|
|
|
|
return std::string(buf.get(), buf.get() + sz - 1); // -1 because we don't want the null terminator
|
|
|
|
}
|
2013-03-15 21:46:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif // UTIL_H
|