diff options
Diffstat (limited to 'xbmc/application/AppParamParser.cpp')
-rw-r--r-- | xbmc/application/AppParamParser.cpp | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/xbmc/application/AppParamParser.cpp b/xbmc/application/AppParamParser.cpp new file mode 100644 index 0000000..ca9cd2a --- /dev/null +++ b/xbmc/application/AppParamParser.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "AppParamParser.h" + +#include "CompileInfo.h" +#include "FileItem.h" +#include "ServiceBroker.h" +#include "application/AppParams.h" +#include "utils/StringUtils.h" +#include "utils/SystemInfo.h" +#include "utils/log.h" + +#include <iostream> +#include <stdlib.h> +#include <string> + +namespace +{ + +constexpr const char* versionText = + R"""({0} Media Center {1} +Copyright (C) {2} Team {0} - http://kodi.tv +)"""; + +constexpr const char* helpText = + R"""(Usage: {0} [OPTION]... [FILE]... + +Arguments: + -fs Runs {1} in full screen + --standalone {1} runs in a stand alone environment without a window + manager and supporting applications. For example, that + enables network settings. + -p or --portable {1} will look for configurations in install folder instead of ~/.{0} + --debug Enable debug logging + --version Print version information + --test Enable test mode. [FILE] required. + --settings=<filename> Loads specified file after advancedsettings.xml replacing any settings specified + specified file must exist in special://xbmc/system/ +)"""; + +} // namespace + +CAppParamParser::CAppParamParser() : m_params(std::make_shared<CAppParams>()) +{ +} + +void CAppParamParser::Parse(const char* const* argv, int nArgs) +{ + std::vector<std::string> args; + args.reserve(nArgs); + + for (int i = 0; i < nArgs; i++) + { + args.emplace_back(argv[i]); + if (i > 0) + ParseArg(argv[i]); + } + + if (nArgs > 1) + { + // testmode is only valid if at least one item to play was given + if (m_params->GetPlaylist().IsEmpty()) + m_params->SetTestMode(false); + } + + // Record raw paramerters + m_params->SetRawArgs(std::move(args)); +} + +void CAppParamParser::DisplayVersion() +{ + std::cout << StringUtils::Format(versionText, CSysInfo::GetAppName(), CSysInfo::GetVersion(), + CCompileInfo::GetCopyrightYears()); + exit(0); +} + +void CAppParamParser::DisplayHelp() +{ + std::string lcAppName = CSysInfo::GetAppName(); + StringUtils::ToLower(lcAppName); + + std::cout << StringUtils::Format(helpText, lcAppName, CSysInfo::GetAppName()); +} + +void CAppParamParser::ParseArg(const std::string &arg) +{ + if (arg == "-fs" || arg == "--fullscreen") + m_params->SetStartFullScreen(true); + else if (arg == "-h" || arg == "--help") + { + DisplayHelp(); + exit(0); + } + else if (arg == "-v" || arg == "--version") + DisplayVersion(); + else if (arg == "--standalone") + m_params->SetStandAlone(true); + else if (arg == "-p" || arg == "--portable") + m_params->SetPlatformDirectories(false); + else if (arg == "--debug") + m_params->SetLogLevel(LOG_LEVEL_DEBUG); + else if (arg == "--test") + m_params->SetTestMode(true); + else if (arg.substr(0, 11) == "--settings=") + m_params->SetSettingsFile(arg.substr(11)); + else if (arg.length() != 0 && arg[0] != '-') + { + const CFileItemPtr item = std::make_shared<CFileItem>(arg); + item->SetPath(arg); + m_params->GetPlaylist().Add(item); + } +} |