[win-linux] updatesvc: add command line parameter handling

This commit is contained in:
SimplestStudio
2024-09-02 11:59:30 +03:00
parent ff711a1322
commit 7ebc18b2b1
6 changed files with 62 additions and 0 deletions

View File

@ -58,6 +58,7 @@ int main(int argc, char *argv[])
{
if (argc > 1) {
if (strcmp(argv[1], "--run-as-app") == 0) {
NS_Utils::parseCmdArgs(argc, argv);
std::locale::global(std::locale(""));
Translator lang(NS_Utils::GetAppLanguage(), "/langs/langs.iss");
CSocket socket(0, INSTANCE_SVC_PORT);

View File

@ -39,6 +39,7 @@
#include <gtk/gtk.h>
#include <string.h>
//#include <openssl/md5.h>
#include <vector>
#include <fcntl.h>
#include "../../src/defines.h"
#include "../../src/prop/defines_p.h"
@ -122,6 +123,32 @@ static bool moving_folder_content(const string &from, const string &to, bool use
namespace NS_Utils
{
std::vector<string> cmd_args;
void parseCmdArgs(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
cmd_args.push_back(argv[i]);
}
bool cmdArgContains(const string &param)
{
auto len = param.length();
return std::any_of(cmd_args.cbegin(), cmd_args.cend(), [&param, len](const string &arg) {
return arg.find(param) == 0 && (len == arg.length() || arg[len] == '=' || arg[len] == ':' || arg[len] == '|');
});
}
string cmdArgValue(const string &param)
{
auto len = param.length();
for (const auto &arg : cmd_args) {
if (arg.find(param) == 0 && len < arg.length() && (arg[len] == '=' || arg[len] == ':' || arg[len] == '|'))
return arg.substr(len + 1);
}
return "";
}
string GetLastErrorAsString()
{
char buff[LINE_MAX] = {0};

View File

@ -50,6 +50,9 @@ using std::list;
namespace NS_Utils
{
void parseCmdArgs(int argc, char *argv[]);
bool cmdArgContains(const string &param);
string cmdArgValue(const string &param);
string GetLastErrorAsString();
int ShowMessage(string str, bool showError = false);
//string GetSysLanguage();

View File

@ -98,6 +98,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[])
} else
if (lstrcmpi(argv[1], _T("--run-as-app")) == 0) {
NS_Utils::setRunAsApp();
NS_Utils::parseCmdArgs(argc, argv);
std::locale::global(std::locale(""));
Translator lang(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS);
CSocket socket(0, INSTANCE_SVC_PORT);
@ -158,6 +159,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[])
VOID WINAPI SvcMain(DWORD argc, LPTSTR *argv)
{
NS_Utils::parseCmdArgs(argc, argv);
if (argc > 1) {
if (lstrcmpi(argv[1], _T("--log")) == 0) {
NS_Logger::AllowWriteLog();

View File

@ -82,6 +82,32 @@ namespace NS_Utils
return run_as_app;
}
std::vector<wstring> cmd_args;
void parseCmdArgs(int argc, wchar_t *argv[])
{
for (int i = 0; i < argc; i++)
cmd_args.push_back(argv[i]);
}
bool cmdArgContains(const wstring &param)
{
auto len = param.length();
return std::any_of(cmd_args.cbegin(), cmd_args.cend(), [&param, len](const wstring &arg) {
return arg.find(param) == 0 && (len == arg.length() || arg[len] == L'=' || arg[len] == L':' || arg[len] == L'|');
});
}
wstring cmdArgValue(const wstring &param)
{
auto len = param.length();
for (const auto &arg : cmd_args) {
if (arg.find(param) == 0 && len < arg.length() && (arg[len] == L'=' || arg[len] == L':' || arg[len] == L'|'))
return arg.substr(len + 1);
}
return L"";
}
wstring GetLastErrorAsString()
{
DWORD errID = ::GetLastError();

View File

@ -52,6 +52,9 @@ namespace NS_Utils
{
void setRunAsApp();
bool isRunAsApp();
void parseCmdArgs(int argc, wchar_t *argv[]);
bool cmdArgContains(const wstring &param);
wstring cmdArgValue(const wstring &param);
wstring GetLastErrorAsString();
int ShowMessage(wstring str, bool showError = false);
wstring GetAppLanguage();