mirror of
https://github.com/Sude-/lgogdownloader.git
synced 2025-02-01 21:42:31 +01:00
Add support for setting default options in config file
Added --save-config and --reset-config options
This commit is contained in:
parent
44220211d5
commit
3b4def2ebe
@ -33,6 +33,8 @@ class Config
|
||||
bool bVerifyPeer;
|
||||
bool bCheckStatus;
|
||||
bool bDuplicateHandler;
|
||||
bool bSaveConfig;
|
||||
bool bResetConfig;
|
||||
std::string sGameRegex;
|
||||
std::string sDirectory;
|
||||
std::string sXMLFile;
|
||||
|
121
main.cpp
121
main.cpp
@ -94,8 +94,11 @@ int main(int argc, char *argv[])
|
||||
std::string check_orphans_text = "Check for orphaned files (files found on local filesystem that are not found on GOG servers). Sets regular expression filter (Perl syntax) for files to check. If no argument is given then the regex defaults to '" + orphans_regex_default + "'";
|
||||
|
||||
bpo::variables_map vm;
|
||||
bpo::options_description desc("Options");
|
||||
bpo::options_description config_file_options("Configuration");
|
||||
bpo::options_description options_cli_all("Options");
|
||||
bpo::options_description options_cli_no_cfg;
|
||||
bpo::options_description options_cli_cfg;
|
||||
bpo::options_description options_cfg_only;
|
||||
bpo::options_description options_cfg_all("Configuration");
|
||||
try
|
||||
{
|
||||
bool bInsecure = false;
|
||||
@ -108,7 +111,8 @@ int main(int argc, char *argv[])
|
||||
bool bNoPatches = false;
|
||||
bool bNoLanguagePacks = false;
|
||||
bool bNoRemoteXML = false;
|
||||
desc.add_options()
|
||||
// Commandline options (no config file)
|
||||
options_cli_no_cfg.add_options()
|
||||
("help,h", "Print help message")
|
||||
("login", bpo::value<bool>(&config.bLogin)->zero_tokens()->default_value(false), "Login")
|
||||
("list", bpo::value<bool>(&config.bList)->zero_tokens()->default_value(false), "List games")
|
||||
@ -116,12 +120,19 @@ int main(int argc, char *argv[])
|
||||
("download", bpo::value<bool>(&config.bDownload)->zero_tokens()->default_value(false), "Download")
|
||||
("repair", bpo::value<bool>(&config.bRepair)->zero_tokens()->default_value(false), "Repair downloaded files\nUse --repair --download to redownload files when filesizes don't match (possibly different version). Redownload will delete the old file")
|
||||
("game", bpo::value<std::string>(&config.sGameRegex)->default_value(""), "Set regular expression filter\nfor download/list/repair (Perl syntax)\nAliases: \"all\", \"free\"")
|
||||
("create-xml", bpo::value<std::string>(&config.sXMLFile)->default_value(""), "Create GOG XML for file\n\"automatic\" to enable automatic XML creation")
|
||||
("update-check", bpo::value<bool>(&config.bUpdateCheck)->zero_tokens()->default_value(false), "Check for update notifications")
|
||||
("check-orphans", bpo::value<std::string>(&config.sOrphanRegex)->implicit_value(""), check_orphans_text.c_str())
|
||||
("status", bpo::value<bool>(&config.bCheckStatus)->zero_tokens()->default_value(false), "Show status of files\n\nOutput format:\nstatuscode gamename filename filesize filehash\n\nStatus codes:\nOK - File is OK\nND - File is not downloaded\nMD5 - MD5 mismatch, different version")
|
||||
("save-config", bpo::value<bool>(&config.bSaveConfig)->zero_tokens()->default_value(false), "Create config file with current settings")
|
||||
("reset-config", bpo::value<bool>(&config.bResetConfig)->zero_tokens()->default_value(false), "Reset config settings to default")
|
||||
;
|
||||
// Commandline options (config file)
|
||||
options_cli_cfg.add_options()
|
||||
("directory", bpo::value<std::string>(&config.sDirectory)->default_value(""), "Set download directory")
|
||||
("limit-rate", bpo::value<curl_off_t>(&config.iDownloadRate)->default_value(0), "Limit download rate to value in kB\n0 = unlimited")
|
||||
("create-xml", bpo::value<std::string>(&config.sXMLFile)->default_value(""), "Create GOG XML for file\n\"automatic\" to enable automatic XML creation")
|
||||
("xml-directory", bpo::value<std::string>(&config.sXMLDirectory), "Set directory for GOG XML files")
|
||||
("chunk-size", bpo::value<size_t>(&config.iChunkSize)->default_value(10), "Chunk size (in MB) when creating XML")
|
||||
("update-check", bpo::value<bool>(&config.bUpdateCheck)->zero_tokens()->default_value(false), "Check for update notifications")
|
||||
("platform", bpo::value<unsigned int>(&config.iInstallerType)->default_value(GlobalConstants::PLATFORM_WINDOWS), platform_text.c_str())
|
||||
("language", bpo::value<unsigned int>(&config.iInstallerLanguage)->default_value(GlobalConstants::LANGUAGE_EN), language_text.c_str())
|
||||
("no-installers", bpo::value<bool>(&bNoInstallers)->zero_tokens()->default_value(false), "Don't download/list/repair installers")
|
||||
@ -136,19 +147,19 @@ int main(int argc, char *argv[])
|
||||
("verbose", bpo::value<bool>(&config.bVerbose)->zero_tokens()->default_value(false), "Print lots of information")
|
||||
("insecure", bpo::value<bool>(&bInsecure)->zero_tokens()->default_value(false), "Don't verify authenticity of SSL certificates")
|
||||
("timeout", bpo::value<long int>(&config.iTimeout)->default_value(10), "Set timeout for connection\nMaximum time in seconds that connection phase is allowed to take")
|
||||
("check-orphans", bpo::value<std::string>(&config.sOrphanRegex)->implicit_value(""), check_orphans_text.c_str())
|
||||
("status", bpo::value<bool>(&config.bCheckStatus)->zero_tokens()->default_value(false), "Show status of files\n\nOutput format:\nstatuscode gamename filename filesize filehash\n\nStatus codes:\nOK - File is OK\nND - File is not downloaded\nMD5 - MD5 mismatch, different version")
|
||||
;
|
||||
|
||||
bpo::store(bpo::parse_command_line(argc, argv, desc), vm);
|
||||
bpo::notify(vm);
|
||||
|
||||
// Read token and secret from config file
|
||||
config_file_options.add_options()
|
||||
// Options read from config file
|
||||
options_cfg_only.add_options()
|
||||
("token", bpo::value<std::string>(&config.sToken)->default_value(""), "oauth token")
|
||||
("secret", bpo::value<std::string>(&config.sSecret)->default_value(""), "oauth secret")
|
||||
;
|
||||
|
||||
options_cli_all.add(options_cli_no_cfg).add(options_cli_cfg);
|
||||
options_cfg_all.add(options_cfg_only).add(options_cli_cfg);
|
||||
|
||||
bpo::store(bpo::parse_command_line(argc, argv, options_cli_all), vm);
|
||||
bpo::notify(vm);
|
||||
|
||||
if (boost::filesystem::exists(config.sConfigFilePath))
|
||||
{
|
||||
std::ifstream ifs(config.sConfigFilePath.c_str());
|
||||
@ -159,7 +170,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
bpo::store(bpo::parse_config_file(ifs, config_file_options), vm);
|
||||
bpo::store(bpo::parse_config_file(ifs, options_cfg_all), vm);
|
||||
bpo::notify(vm);
|
||||
ifs.close();
|
||||
}
|
||||
@ -168,7 +179,7 @@ int main(int argc, char *argv[])
|
||||
if (vm.count("help"))
|
||||
{
|
||||
std::cout << config.sVersionString << std::endl
|
||||
<< desc << std::endl;
|
||||
<< options_cli_all << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -240,6 +251,84 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (config.bLogin)
|
||||
return result;
|
||||
else if (config.bSaveConfig)
|
||||
{
|
||||
std::ofstream ofs(config.sConfigFilePath.c_str());
|
||||
if (ofs)
|
||||
{
|
||||
std::cout << "Saving config: " << config.sConfigFilePath << std::endl;
|
||||
for (bpo::variables_map::iterator it = vm.begin(); it != vm.end(); ++it)
|
||||
{
|
||||
std::string option = it->first;
|
||||
std::string option_value_string;
|
||||
const bpo::variable_value& option_value = it->second;
|
||||
|
||||
try
|
||||
{
|
||||
if (options_cfg_all.find(option, false).long_name() == option)
|
||||
{
|
||||
if (!option_value.empty())
|
||||
{
|
||||
const std::type_info& type = option_value.value().type() ;
|
||||
if ( type == typeid(std::string) )
|
||||
option_value_string = option_value.as<std::string>();
|
||||
else if ( type == typeid(int) )
|
||||
option_value_string = std::to_string(option_value.as<int>());
|
||||
else if ( type == typeid(size_t) )
|
||||
option_value_string = std::to_string(option_value.as<size_t>());
|
||||
else if ( type == typeid(unsigned int) )
|
||||
option_value_string = std::to_string(option_value.as<unsigned int>());
|
||||
else if ( type == typeid(long int) )
|
||||
option_value_string = std::to_string(option_value.as<long int>());
|
||||
else if ( type == typeid(bool) )
|
||||
{
|
||||
if (option_value.as<bool>() == true)
|
||||
option_value_string = "true";
|
||||
else
|
||||
option_value_string = "false";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!option_value_string.empty())
|
||||
{
|
||||
std::cout << option << " = " << option_value_string << std::endl;
|
||||
ofs << option << " = " << option_value_string << std::endl;
|
||||
}
|
||||
}
|
||||
ofs.close();
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Failed to create config: " << config.sConfigFilePath << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if (config.bResetConfig)
|
||||
{
|
||||
std::ofstream ofs(config.sConfigFilePath.c_str());
|
||||
if (ofs)
|
||||
{
|
||||
if (!config.sToken.empty() && !config.sSecret.empty())
|
||||
{
|
||||
ofs << "token = " << config.sToken << std::endl;
|
||||
ofs << "secret = " << config.sSecret << std::endl;
|
||||
}
|
||||
ofs.close();
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Failed to create config: " << config.sConfigFilePath << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if (config.bUpdateCheck) // Update check has priority over download and list
|
||||
downloader.updateCheck();
|
||||
else if (config.bRepair) // Repair file
|
||||
@ -255,7 +344,7 @@ int main(int argc, char *argv[])
|
||||
else
|
||||
{ // Show help message
|
||||
std::cout << config.sVersionString << std::endl
|
||||
<< desc << std::endl;
|
||||
<< options_cli_all << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user