Merge pull request #25808 from CastagnaIT/fix_url_parse
[xbmc.git] / xbmc / platform / linux / AppParamParserLinux.cpp
blobec83e5f470f307d5825dc876919f6ef783f32a81
1 /*
2 * Copyright (C) 2005-2021 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "AppParamParserLinux.h"
11 #include "CompileInfo.h"
12 #include "application/AppParams.h"
13 #include "utils/StringUtils.h"
15 #include <algorithm>
16 #include <array>
17 #include <iostream>
18 #include <vector>
20 namespace
22 std::vector<std::string> availableWindowSystems = CCompileInfo::GetAvailableWindowSystems();
23 std::array<std::string, 1> availableLogTargets = {"console"};
24 std::vector<std::string> availableAudioBackends = CCompileInfo::GetAvailableAudioBackends();
25 std::vector<std::string> availableGlInterfaces = CCompileInfo::GetAvailableGlInterfaces();
27 constexpr const char* windowingText =
28 R"""(
29 Selected window system not available: {}
30 Available window systems: {}
31 )""";
33 constexpr const char* loggingText =
34 R"""(
35 Selected logging target not available: {}
36 Available log targest: {}
37 )""";
39 constexpr const char* audioBackendsText =
40 R"""(
41 Selected audio backend not available: {}
42 Available audio backends: {}
43 )""";
45 constexpr const char* glInterfaceText =
46 R"""(
47 Selected GL interface not available: {}
48 Available GL interfaces: {}
49 )""";
51 constexpr const char* helpText =
52 R"""(
53 Linux Specific Arguments:
54 --windowing=<system> Select which windowing method to use.
55 Available window systems are: {}
56 --logging=<target> Select which log target to use (log file will always be used in conjunction).
57 Available log targets are: {}
58 --audio-backend=<backend> Select which audio backend to use.
59 Available audio backends are: {}
60 --gl-interface=<interface> Select which GL interface to use (X11 only).
61 Available GL interfaces are: {}
62 )""";
64 } // namespace
66 CAppParamParserLinux::CAppParamParserLinux() : CAppParamParser()
70 CAppParamParserLinux::~CAppParamParserLinux() = default;
72 void CAppParamParserLinux::ParseArg(const std::string& arg)
74 CAppParamParser::ParseArg(arg);
76 if (arg.substr(0, 12) == "--windowing=")
78 if (std::find(availableWindowSystems.begin(), availableWindowSystems.end(), arg.substr(12)) !=
79 availableWindowSystems.end())
80 GetAppParams()->SetWindowing(arg.substr(12));
81 else
83 std::cout << StringUtils::Format(windowingText, arg.substr(12),
84 StringUtils::Join(availableWindowSystems, ", "));
85 exit(0);
88 else if (arg.substr(0, 10) == "--logging=")
90 if (std::find(availableLogTargets.begin(), availableLogTargets.end(), arg.substr(10)) !=
91 availableLogTargets.end())
93 GetAppParams()->SetLogTarget(arg.substr(10));
95 else
97 std::cout << StringUtils::Format(loggingText, arg.substr(10),
98 StringUtils::Join(availableLogTargets, ", "));
99 exit(0);
102 else if (arg.find("--audio-backend=") != std::string::npos)
104 const auto argValue = arg.substr(16);
105 const auto it =
106 std::find(availableAudioBackends.cbegin(), availableAudioBackends.cend(), argValue);
107 if (it != availableAudioBackends.cend())
109 GetAppParams()->SetAudioBackend(argValue);
111 else
113 std::cout << StringUtils::Format(audioBackendsText, argValue,
114 StringUtils::Join(availableAudioBackends, ", "));
116 exit(0);
119 else if (arg.find("--gl-interface=") != std::string::npos)
121 const auto argValue = arg.substr(15);
122 const auto it =
123 std::find(availableGlInterfaces.cbegin(), availableGlInterfaces.cend(), argValue);
124 if (it != availableGlInterfaces.cend())
126 GetAppParams()->SetGlInterface(argValue);
128 else
130 std::cout << StringUtils::Format(glInterfaceText, argValue,
131 StringUtils::Join(availableGlInterfaces, ", "));
133 exit(0);
138 void CAppParamParserLinux::DisplayHelp()
140 CAppParamParser::DisplayHelp();
142 std::cout << StringUtils::Format(helpText, StringUtils::Join(availableWindowSystems, ", "),
143 StringUtils::Join(availableLogTargets, ", "),
144 StringUtils::Join(availableAudioBackends, ", "),
145 StringUtils::Join(availableGlInterfaces, ", "));