QuasarAppLib/params.cpp

204 lines
4.8 KiB
C++
Raw Normal View History

2018-09-29 15:56:04 +03:00
/*
2019-01-26 07:51:58 +03:00
* Copyright (C) 2018-2019 QuasarApp.
2018-09-29 15:56:04 +03:00
* Distributed under the lgplv3 software license, see the accompanying
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
#include "params.h"
#include <QVariantMap>
#include <QDebug>
2019-01-16 22:17:05 +03:00
#include <QFileInfo>
#include <iostream>
2019-08-23 21:14:32 +03:00
#include <QDateTime>
2019-01-27 19:45:30 +03:00
#ifdef Q_OS_WIN
#include "windows.h"
#else
#include <unistd.h>
2019-01-27 20:14:06 +03:00
#include <limits.h>
2019-01-27 19:45:30 +03:00
#endif
2018-09-29 15:56:04 +03:00
using namespace QuasarAppUtils;
static QVariantMap params = QVariantMap();
bool Params::isEndable(const QString& key) {
return params.contains(key);
}
2019-03-28 18:58:36 +03:00
void Params::verboseLog(const QString &log, VerboseLvl vLvl) {
2019-08-23 23:55:28 +03:00
writeLoginFile(log, vLvl);
2019-01-02 13:42:51 +03:00
if (isEndable("verbose")) {
2019-03-28 18:58:36 +03:00
auto lvl = static_cast<VerboseLvl>(getArg("verbose").toInt());
if (vLvl <= lvl) {
switch (vLvl) {
case VerboseLvl::Error: {
qCritical() << lvlToString(vLvl) + ": " + log;
2019-03-28 18:58:36 +03:00
break;
}
case VerboseLvl::Warning: {
qWarning() << lvlToString(vLvl) + ": " + log;
2019-03-28 18:58:36 +03:00
break;
}
case VerboseLvl::Info: {
qInfo() << lvlToString(vLvl) + ": " + log;
2019-03-28 18:58:36 +03:00
break;
}
default: {
qDebug() << lvlToString(vLvl) + ": " + log;
2019-03-28 18:58:36 +03:00
break;
}
}
}
2019-01-02 13:42:51 +03:00
}
}
QStringList Params::getparamsHelp() {
return
{
{""},
{ " -verbose (level 1 - 3) : Shows debug log"},
{ " -fileLog (path to file) : Sets path of log file"},
{ " : Default it is path to executable file"},
{ " : with suffix '.log' "},
{ " noWriteInFileLog : Disables loging into file"},
{ ""}
};
}
void Params::showHelp(const QStringList &help) {
for (const QString& line : help) {
std::cout << line.toStdString() << std::endl;
}
}
2019-08-23 20:41:13 +03:00
QString Params::timeString() {
return QDateTime::currentDateTime().toString();
}
QString Params::lvlToString(VerboseLvl vLvl) {
switch (vLvl) {
case VerboseLvl::Error: {
return "Error";
}
case VerboseLvl::Warning: {
return "Warning";
}
case VerboseLvl::Info: {
return "Info";
}
case VerboseLvl::Debug: {
return "Verbose log";
}
}
return "";
}
bool Params::writeLoginFile(const QString &log, VerboseLvl vLvl) {
if (!isEndable("noWriteInFileLog")) {
QString path = getStrArg("appPath") + "/" + getStrArg("appName") + ".log";
if (isEndable("fileLog")) {
QString path = getStrArg("fileLog");
}
QFile logFile(path);
2019-08-22 17:48:23 +03:00
if (logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
QTextStream stream(&logFile);
2019-08-23 20:57:59 +03:00
stream << timeString() <<"| " << lvlToString(vLvl) + ": " + log << endl;
logFile.close();
} else {
return false;
}
}
return true;
}
2019-03-28 18:58:36 +03:00
bool Params::parseParams(int argc,const char *argv[]) {
2019-09-10 18:22:13 +03:00
QStringList params;
for (int i = 1; i < argc; i++) {
params.push_back(argv[i]);
}
return parseParams(params);
}
bool Params::parseParams(const QStringList &paramsArray) {
2018-09-29 15:56:04 +03:00
params.clear();
2019-01-27 19:45:30 +03:00
#ifdef Q_OS_WIN
char buffer[MAX_PATH];
GetModuleFileNameA(nullptr, buffer, MAX_PATH);
params ["appPath"] = QFileInfo(buffer).absolutePath();
params ["appName"] = QFileInfo(buffer).fileName();
2019-01-27 19:45:30 +03:00
#else
2019-01-27 20:14:06 +03:00
char path[2048];
2019-05-10 09:56:07 +03:00
if (readlink("/proc/self/exe", path, 2048) < 0) {
qWarning() << "parseParams can't get self path!" ;
return false;
}
2019-01-27 20:14:06 +03:00
params ["appPath"] = QFileInfo(path).absolutePath();
params ["appName"] = QFileInfo(path).fileName();
2019-01-27 19:45:30 +03:00
#endif
if (!getStrArg("appPath").size()) {
return false;
}
2018-09-29 15:56:04 +03:00
2019-09-10 18:22:13 +03:00
for (int i = 0 ; i < paramsArray.size(); ++i) {
if (paramsArray[i][0] == '-') {
if (i < (paramsArray.size() - 1) && paramsArray[i + 1][0] != '-') {
params[paramsArray[i].mid(1)] = paramsArray[i + 1];
2018-09-29 15:56:04 +03:00
i++;
} else {
2019-09-10 18:22:13 +03:00
qWarning() << "Missing argument for " + paramsArray[i] ;
2018-09-29 15:56:04 +03:00
}
} else {
2019-09-10 18:22:13 +03:00
params[paramsArray[i]] = "";
2018-09-29 15:56:04 +03:00
}
}
return true;
}
2019-08-26 20:32:33 +03:00
QString Params::getStrArg(const QString& key, const QString &def) {
return params.value(key, def).toString();
2018-09-29 15:56:04 +03:00
}
2019-08-26 21:15:34 +03:00
QVariant Params::getArg(const QString& key,const QVariant& def) {
return params.value(key, def);
2018-09-29 15:56:04 +03:00
}
2019-02-02 16:01:28 +03:00
void Params::setArg(const QString &key, const QVariant &val) {
params.insert(key, val);
}
void Params::setEnable(const QString &key, bool enable) {
if (enable) {
params.insert(key, "");
} else {
params.remove(key);
}
}