diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:29:28 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:29:28 +0200 |
commit | 75c07011b7c4d06acd7b45dabdcd60ab9d80f385 (patch) | |
tree | 8853c3978dd152ef377e652239448b1352320206 /lib/generate_logfile.h | |
parent | 5.22 (diff) | |
download | FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.gz FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.bz2 FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.zip |
5.23
Diffstat (limited to 'lib/generate_logfile.h')
-rw-r--r-- | lib/generate_logfile.h | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/lib/generate_logfile.h b/lib/generate_logfile.h deleted file mode 100644 index ff97b63a..00000000 --- a/lib/generate_logfile.h +++ /dev/null @@ -1,181 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef GEN_LOGFILE_H_93172643216748973216458732165415 -#define GEN_LOGFILE_H_93172643216748973216458732165415 - -#include <zen/error_log.h> -#include <zen/file_io.h> -#include <zen/serialize.h> -#include <zen/format_unit.h> -#include "ffs_paths.h" - - -namespace zen -{ -struct SummaryInfo -{ - std::wstring jobName; //may be empty - std::wstring finalStatus; - int itemsSynced; - Int64 dataSynced; - int itemsTotal; - Int64 dataTotal; - long totalTime; //unit: [sec] -}; - -void saveLogToFile(const SummaryInfo& summary, //throw FileError - const ErrorLog& log, - FileOutput& fileOut); - -void saveToLastSyncsLog(const SummaryInfo& summary, //throw FileError - const ErrorLog& log, - size_t maxBytesToWrite); - - - - - -//####################### implementation ####################### -namespace -{ -std::wstring generateLogHeader(const SummaryInfo& s) -{ - assert(s.itemsSynced <= s.itemsTotal); - assert(s.dataSynced <= s.dataTotal); - - std::wstring output; - - //write header - std::wstring headerLine = formatTime<std::wstring>(FORMAT_DATE); - if (!s.jobName.empty()) - headerLine += L" - " + s.jobName; - headerLine += L": " + s.finalStatus; - - //assemble results box - std::vector<std::wstring> results; - results.push_back(headerLine); - results.push_back(L""); - - const wchar_t tabSpace[] = L" "; - - std::wstring itemsProc = tabSpace + _("Items processed:") + L" " + toGuiString(s.itemsSynced); //show always, even if 0! - if (s.itemsSynced != 0 || s.dataSynced != 0) //[!] don't show 0 bytes processed if 0 items were processed - itemsProc += + L" (" + filesizeToShortString(s.dataSynced) + L")"; - results.push_back(itemsProc); - - if (s.itemsTotal != 0 || s.dataTotal != 0) //=: sync phase was reached and there were actual items to sync - { - if (s.itemsSynced != s.itemsTotal || - s.dataSynced != s.dataTotal) - results.push_back(tabSpace + _("Items remaining:") + L" " + toGuiString(s.itemsTotal - s.itemsSynced) + L" (" + filesizeToShortString(s.dataTotal - s.dataSynced) + L")"); - } - - results.push_back(tabSpace + _("Total time:") + L" " + copyStringTo<std::wstring>(wxTimeSpan::Seconds(s.totalTime).Format())); - - //calculate max width, this considers UTF-16 only, not true Unicode...but maybe good idea? those 2-char-UTF16 codes are usually wider than fixed width chars anyway! - size_t sepLineLen = 0; - std::for_each(results.begin(), results.end(), [&](const std::wstring& str) { sepLineLen = std::max(sepLineLen, str.size()); }); - - output.resize(output.size() + sepLineLen + 1, L'_'); - output += L'\n'; - - std::for_each(results.begin(), results.end(), [&](const std::wstring& str) { output += L'|'; output += str; output += L'\n'; }); - - output += L'|'; - output.resize(output.size() + sepLineLen, L'_'); - output += L'\n'; - - return output; -} -} - - -inline -void saveLogToFile(const SummaryInfo& summary, //throw FileError - const ErrorLog& log, - FileOutput& fileOut) -{ - Utf8String header = utfCvrtTo<Utf8String>(generateLogHeader(summary)); - replace(header, '\n', LINE_BREAK); //don't replace line break any earlier - header += LINE_BREAK; //make sure string is not empty! - - fileOut.write(&*header.begin(), header.size()); //throw FileError - - //write log items one after the other instead of creating one big string: memory allocation might fail; think 1 million entries! - for (auto iter = log.begin(); iter != log.end(); ++iter) - { - Utf8String msg = replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(*iter)), '\n', LINE_BREAK); - msg += LINE_BREAK; //make sure string is not empty! - - fileOut.write(&*msg.begin(), msg.size()); //throw FileError - } -} - - -inline -void saveToLastSyncsLog(const SummaryInfo& summary, //throw FileError - const ErrorLog& log, - size_t maxBytesToWrite) //log may be *huge*, e.g. 1 million items; LastSyncs.log *must not* create performance problems! -{ - const Zstring filename = getConfigDir() + Zstr("LastSyncs.log"); - - Utf8String newStream = utfCvrtTo<Utf8String>(generateLogHeader(summary)); - replace(newStream, '\n', LINE_BREAK); //don't replace line break any earlier - newStream += LINE_BREAK; - - //check size of "newStream": memory allocation might fail - think 1 million entries! - for (auto iter = log.begin(); iter != log.end(); ++iter) - { - newStream += replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(*iter)), '\n', LINE_BREAK); - newStream += LINE_BREAK; - - if (newStream.size() > maxBytesToWrite) - { - newStream += "[...]"; - newStream += LINE_BREAK; - break; - } - } - - //fill up the rest of permitted space by appending old log - if (newStream.size() < maxBytesToWrite) - { - Utf8String oldStream; - try - { - oldStream = loadBinStream<Utf8String>(filename); //throw FileError - } - catch (FileError&) {} - - if (!oldStream.empty()) - { - newStream += LINE_BREAK; - newStream += LINE_BREAK; - newStream += oldStream; //impliticly limited by "maxBytesToWrite"! - - //truncate size if required - if (newStream.size() > maxBytesToWrite) - { - //but do not cut in the middle of a row - auto iter = std::search(newStream.cbegin() + maxBytesToWrite, newStream.cend(), std::begin(LINE_BREAK), std::end(LINE_BREAK) - 1); - if (iter != newStream.cend()) - { - newStream.resize(iter - newStream.cbegin()); - newStream += LINE_BREAK; - - newStream += "[...]"; - newStream += LINE_BREAK; - } - } - } - } - - saveBinStream(filename, newStream); //throw FileError -} -} - -#endif //GEN_LOGFILE_H_93172643216748973216458732165415 |