forked from markus/S_New4
v3.8.0: add subfuncktion: simple log system
This commit is contained in:
parent
53807b53f6
commit
a38491d587
@ -26,7 +26,8 @@ SOURCES += \
|
|||||||
pageManager.cpp \
|
pageManager.cpp \
|
||||||
parameterManager.cpp \
|
parameterManager.cpp \
|
||||||
programManager.cpp \
|
programManager.cpp \
|
||||||
accountManager.cpp
|
accountManager.cpp \
|
||||||
|
logger.cpp
|
||||||
|
|
||||||
# Default rules for deployment.
|
# Default rules for deployment.
|
||||||
qnx: target.path = /tmp/$${TARGET}/bin
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
@ -37,4 +38,5 @@ HEADERS += \
|
|||||||
pageManager.h \
|
pageManager.h \
|
||||||
parameterManager.h \
|
parameterManager.h \
|
||||||
programManager.h \
|
programManager.h \
|
||||||
accountManager.h
|
accountManager.h \
|
||||||
|
logger.h
|
||||||
|
84
src/logger.cpp
Normal file
84
src/logger.cpp
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#include "logger.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Logger::Logger(std::string logFilePath)
|
||||||
|
: filePath(logFilePath)
|
||||||
|
{
|
||||||
|
if(openFile(filePath))
|
||||||
|
exit(234);
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger::~Logger()
|
||||||
|
{
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Logger::getFilePath()
|
||||||
|
{
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Logger::logCommandLine(std::string logText)
|
||||||
|
{
|
||||||
|
std::time_t now = std::time(nullptr);
|
||||||
|
struct tm *tm_now = localtime(&now);
|
||||||
|
std::string date(std::to_string(tm_now->tm_mday) + "." + std::to_string(tm_now->tm_mon +1) + "."
|
||||||
|
+ std::to_string(1900 + tm_now->tm_year) + " - " + std::to_string(tm_now->tm_hour) + ":" + std::to_string(tm_now->tm_min));
|
||||||
|
return writetoFile(date + ": \"" + logText + "\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
int Logger::logSubLine(std::string line)
|
||||||
|
{
|
||||||
|
return writetoFile("\t\t" + line);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Logger::getLogText()
|
||||||
|
{
|
||||||
|
return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
|
||||||
|
}
|
||||||
|
|
||||||
|
int Logger::clearFile()
|
||||||
|
{
|
||||||
|
//close it
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
//open it empty + close it
|
||||||
|
std::ofstream ofs;
|
||||||
|
ofs.open(filePath, std::ofstream::out | std::ofstream::trunc);
|
||||||
|
if(!ofs.is_open()) {
|
||||||
|
perror("Open File for clearing failed");
|
||||||
|
return 35;
|
||||||
|
}
|
||||||
|
ofs.close();
|
||||||
|
|
||||||
|
//reopen it
|
||||||
|
return openFile(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Logger::writetoFile(std::string t)
|
||||||
|
{
|
||||||
|
file << t << std::endl;
|
||||||
|
return file.good();
|
||||||
|
}
|
||||||
|
|
||||||
|
int Logger::openFile(std::string path)
|
||||||
|
{
|
||||||
|
file.open(path, std::ios::in | std::ios::out | std::ios::app);
|
||||||
|
if(!file.is_open()) {
|
||||||
|
//Exestiert nicht => Erstelle Datei
|
||||||
|
std::ofstream ofs(path);
|
||||||
|
if(!ofs.is_open()) {
|
||||||
|
perror((" => Error: Konnte LogDatei nicht erstellen: '" + path + "'").c_str());
|
||||||
|
return (5656);
|
||||||
|
} else {
|
||||||
|
ofs.close();
|
||||||
|
}
|
||||||
|
file.open(path);
|
||||||
|
if(!file.is_open()) {
|
||||||
|
perror((" => Error: Konnte LogDatei nicht öffnen: '" + path + "'").c_str());
|
||||||
|
return (5657);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
31
src/logger.h
Normal file
31
src/logger.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#ifndef LOGGER_H
|
||||||
|
#define LOGGER_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <streambuf>
|
||||||
|
#include <ctime> // std::time, localtime ...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Logger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Logger(std::string logFilePath);
|
||||||
|
~Logger();
|
||||||
|
std::string getFilePath();
|
||||||
|
std::fstream file;
|
||||||
|
|
||||||
|
int logCommandLine(std::string logText);
|
||||||
|
int logSubLine(std::string line);
|
||||||
|
std::string getLogText();
|
||||||
|
int clearFile();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string filePath;
|
||||||
|
int writetoFile(std::string t);
|
||||||
|
int openFile(std::string path);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // LOGGER_H
|
@ -38,6 +38,7 @@ int setPaths(Settings &settings)
|
|||||||
settings.cookieFilePath = CacheDir + "S_New4_cookies";
|
settings.cookieFilePath = CacheDir + "S_New4_cookies";
|
||||||
settings.accountNumberPath = CacheDir + "Account_Number";
|
settings.accountNumberPath = CacheDir + "Account_Number";
|
||||||
settings.lastUpdateDateFilePath = CacheDir + "LastUpdateDate";
|
settings.lastUpdateDateFilePath = CacheDir + "LastUpdateDate";
|
||||||
|
settings.logFilePath = CacheDir + "LogFile";
|
||||||
|
|
||||||
settings.accountFilePath = SettingsDir + "Accounts";
|
settings.accountFilePath = SettingsDir + "Accounts";
|
||||||
settings.serienListPath = SettingsDir + "SerienListe";
|
settings.serienListPath = SettingsDir + "SerienListe";
|
||||||
@ -69,7 +70,19 @@ int manageParameter(Settings &settings, int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> res = compare("help\n--help\ndefault\nurl\n--version\nsearch\ninfo\nclean\nnews\n--update\n--remove", argv[1]);
|
//LogCommand...
|
||||||
|
Logger logger(settings.logFilePath);
|
||||||
|
std::string command;
|
||||||
|
for (int i = 0; i < argc; ++i)
|
||||||
|
if(argv[i])
|
||||||
|
command += std::string(argv[i]) + " ";
|
||||||
|
if(command.length() > 0)
|
||||||
|
command.pop_back();
|
||||||
|
logger.logCommandLine(command);
|
||||||
|
|
||||||
|
//Find out right subProgramm
|
||||||
|
|
||||||
|
std::vector<std::string> res = compare("help\n--help\ndefault\nurl\n--version\nsearch\ninfo\nclean\nnews\n--update\n--remove\nlog", argv[1]);
|
||||||
if(res.size() != 1) {
|
if(res.size() != 1) {
|
||||||
if(res.size() == 0)
|
if(res.size() == 0)
|
||||||
std::cout << " => Error: Keine Unteroption für " << argv[1] << " gefunden." << std::endl;
|
std::cout << " => Error: Keine Unteroption für " << argv[1] << " gefunden." << std::endl;
|
||||||
@ -118,6 +131,12 @@ int manageParameter(Settings &settings, int argc, char **argv)
|
|||||||
} else if (isSame(argv, "--remove")) {
|
} else if (isSame(argv, "--remove")) {
|
||||||
return unterOption_RemoveSettings_or_CacheDir(&settings, argc, argv);
|
return unterOption_RemoveSettings_or_CacheDir(&settings, argc, argv);
|
||||||
|
|
||||||
|
} else if (isSame(argv, "log")) {
|
||||||
|
if(unterOption_printLogFile(&settings, argc, argv) != -1)
|
||||||
|
return 49;
|
||||||
|
logger.logCommandLine(command);
|
||||||
|
return -1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
std::cout << " => Error: Invalid option '" << argv[1] << "', but not detected in compare-Function" << std::endl;
|
std::cout << " => Error: Invalid option '" << argv[1] << "', but not detected in compare-Function" << std::endl;
|
||||||
return 3;
|
return 3;
|
||||||
@ -353,6 +372,7 @@ int unterOption_help(Settings &settings)
|
|||||||
<< "\t\"info\"\t\tModus um Infos einer Serien zu bekommen." << std::endl
|
<< "\t\"info\"\t\tModus um Infos einer Serien zu bekommen." << std::endl
|
||||||
<< "\t\"clean\"\t\tModus um Cookie-Files zu löschen." << std::endl
|
<< "\t\"clean\"\t\tModus um Cookie-Files zu löschen." << std::endl
|
||||||
<< "\t\"news\"\t\tModus um neusten 75 Folgen auf s.to zu sehen." << std::endl
|
<< "\t\"news\"\t\tModus um neusten 75 Folgen auf s.to zu sehen." << std::endl
|
||||||
|
<< "\t\"log\"\t\tModus um Log Datei zu sehen / bearbeiten." << std::endl
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
std::cout << "Verzeichnisse:" << std::endl
|
std::cout << "Verzeichnisse:" << std::endl
|
||||||
@ -1436,3 +1456,65 @@ bool isSame(char **argv, std::string FunktionName)
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int unterOption_printLogFile(Settings *settings, int argc, char **argv)
|
||||||
|
{
|
||||||
|
settings->modus = Modus::PRINT_LOG_FILE_MODUS;
|
||||||
|
|
||||||
|
int c = 0;
|
||||||
|
const option long_opts[] = {
|
||||||
|
{"help", no_argument, nullptr, 'h'},
|
||||||
|
{"print", no_argument, nullptr, 'p'},
|
||||||
|
{"clear", no_argument, nullptr, 'c'},
|
||||||
|
{nullptr, no_argument, nullptr, 0}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool printMode = false, ClearMode = false;
|
||||||
|
|
||||||
|
while( ( c = getopt_long (argc, argv, "hpc", long_opts, nullptr) ) != -1 ) {
|
||||||
|
switch(c) {
|
||||||
|
|
||||||
|
case 'h':
|
||||||
|
unterOption_printLogFile(settings->programName);
|
||||||
|
return -1;
|
||||||
|
case 'p':
|
||||||
|
printMode = true;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
ClearMode = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
std::cout << "Aufruf: " << settings->programName << " log [OPTION]..." << std::endl;
|
||||||
|
std::cout << "\"" << settings->programName << " log --help\" liefert weitere Informationen." << std::endl;
|
||||||
|
return 21;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!printMode && !ClearMode) {
|
||||||
|
std::cout << " => Error: Fehlende Parameter: -p / -c." << std::endl;
|
||||||
|
std::cout << "\"" << settings->programName << " log --help\" liefert weitere Informationen." << std::endl;
|
||||||
|
return 34;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(printMode)
|
||||||
|
std::cout << Logger(settings->logFilePath).getLogText() << std::endl;
|
||||||
|
if(ClearMode)
|
||||||
|
if(Logger(settings->logFilePath).clearFile())
|
||||||
|
return 12;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void unterOption_printLogFile(std::string programName)
|
||||||
|
{
|
||||||
|
std::cout << "Aufruf: " << programName << " log [OPTION]..." << std::endl << std::endl;
|
||||||
|
|
||||||
|
std::cout << "Beschreibung:" << std::endl
|
||||||
|
<< " Mit dieser Unterfunktion kann man die Log Datei sehen/bearbeiten." << std::endl << std::endl;
|
||||||
|
|
||||||
|
std::cout << "OPTIONEN:" << std::endl
|
||||||
|
<< " -p, --print" << std::endl
|
||||||
|
<< " Mit dieser Option wird das LogFile ausgegeben." << std::endl
|
||||||
|
<< " -c, --clear" << std::endl
|
||||||
|
<< " Mit dieser Option wird das LogFile geleert." << std::endl;
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <unistd.h> // readlink()
|
#include <unistd.h> // readlink()
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -32,7 +33,8 @@ enum Modus {
|
|||||||
INFO_MODUS = 3,
|
INFO_MODUS = 3,
|
||||||
NEWS_MODUS = 4,
|
NEWS_MODUS = 4,
|
||||||
UPDATE_MODUS = 5,
|
UPDATE_MODUS = 5,
|
||||||
REMOVE_SETTINGS_AND_CACHE_MODUS = 6
|
REMOVE_SETTINGS_AND_CACHE_MODUS = 6,
|
||||||
|
PRINT_LOG_FILE_MODUS
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,12 +78,13 @@ struct Settings {
|
|||||||
lastUpdateDateFilePath = "",
|
lastUpdateDateFilePath = "",
|
||||||
configDir="",
|
configDir="",
|
||||||
cacheDir="",
|
cacheDir="",
|
||||||
|
logFilePath="",
|
||||||
|
|
||||||
defaultsFilePath = "",
|
defaultsFilePath = "",
|
||||||
proxy_ip = "127.0.0.1",
|
proxy_ip = "127.0.0.1",
|
||||||
languages = "GerDub,GerSub,Eng,",
|
languages = "GerDub,GerSub,Eng,",
|
||||||
genaueHoster = "",
|
genaueHoster = "",
|
||||||
version = "3.7.8",
|
version = "3.8.0",
|
||||||
defaultFileVersion="1.7",
|
defaultFileVersion="1.7",
|
||||||
outputFilePath = "",
|
outputFilePath = "",
|
||||||
default_checkPath = "",
|
default_checkPath = "",
|
||||||
@ -149,6 +152,9 @@ void unterOption_update_help(std::string programName);
|
|||||||
int unterOption_RemoveSettings_or_CacheDir(Settings * settings, int argc, char **argv);
|
int unterOption_RemoveSettings_or_CacheDir(Settings * settings, int argc, char **argv);
|
||||||
void unterOption_RemoveSettings_or_CacheDire_help(std::string programName);
|
void unterOption_RemoveSettings_or_CacheDire_help(std::string programName);
|
||||||
|
|
||||||
|
int unterOption_printLogFile(Settings * settings, int argc, char **argv);
|
||||||
|
void unterOption_printLogFile(std::string programName);
|
||||||
|
|
||||||
int setS5ProxytoSettings(Settings &settings, std::string optarg);
|
int setS5ProxytoSettings(Settings &settings, std::string optarg);
|
||||||
|
|
||||||
|
|
||||||
|
@ -423,9 +423,8 @@ int ProgramManager::defaultModus(Settings *settings)
|
|||||||
//Finde die anzahl der staffel heraus:
|
//Finde die anzahl der staffel heraus:
|
||||||
//download html von der startpage einer serie
|
//download html von der startpage einer serie
|
||||||
Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl);
|
Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl);
|
||||||
if(tmp_reply.html == "-1") {
|
if(tmp_reply.html == "-1" || tmp_reply.html == "") {
|
||||||
if(settings->debugMode)
|
std::cerr << " => Error: Konnte Seitenquelltext nicht herunterladen." << std::endl;
|
||||||
std::cerr << ">>> Debug In " << __FUNCTION__ << ": getServerRequest failed, when download startpage." << std::endl;
|
|
||||||
return 32;
|
return 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user