LCOV - code coverage report
Current view: top level - src/esys/repo/tui - capturelogger.cpp (source / functions) Hit Total Coverage
Test: esysrepo_coverage.info Lines: 0 68 0.0 %
Date: 2026-08-01 10:43:40 Functions: 0 16 0.0 %

          Line data    Source code
       1             : /*!
       2             :  * \file esys/repo/tui/capturelogger.cpp
       3             :  * \brief
       4             :  *
       5             :  * \cond
       6             :  * __legal_b__
       7             :  *
       8             :  * Copyright (c) 2026 Michel Gillet
       9             :  * Distributed under the MIT License.
      10             :  * (See accompanying file LICENSE.txt or
      11             :  * copy at https://opensource.org/licenses/MIT)
      12             :  *
      13             :  * __legal_e__
      14             :  * \endcond
      15             :  *
      16             :  */
      17             : 
      18             : #include "esys/repo/esysrepo_prec.h"
      19             : #include "esys/repo/tui/capturelogger.h"
      20             : 
      21             : #include <sstream>
      22             : 
      23             : namespace esys::repo::tui
      24             : {
      25             : 
      26             : namespace
      27             : {
      28             : 
      29           0 : const char *level_tag(log::Level level)
      30             : {
      31           0 :     switch (level)
      32             :     {
      33             :         case log::Level::CRITICAL: return "critical";
      34           0 :         case log::Level::ERROR: return "error";
      35           0 :         case log::Level::WARN: return "warn";
      36           0 :         case log::Level::INFO: return "info";
      37           0 :         case log::Level::DEBUG: return "debug";
      38           0 :         case log::Level::TRACE: return "trace";
      39           0 :         case log::Level::OFF: return "off";
      40             :     }
      41           0 :     return "info";
      42             : }
      43             : 
      44             : } // namespace
      45             : 
      46           0 : CaptureLogger::CaptureLogger(std::shared_ptr<log::Logger_if> inner, std::shared_ptr<LogBuffer> buffer,
      47           0 :                              std::function<void()> on_line)
      48           0 :     : m_inner(std::move(inner))
      49           0 :     , m_buffer(std::move(buffer))
      50           0 :     , m_on_line(std::move(on_line))
      51             : {
      52           0 : }
      53             : 
      54           0 : CaptureLogger::~CaptureLogger() = default;
      55             : 
      56           0 : void CaptureLogger::capture(const char *tag, const std::string &msg)
      57             : {
      58           0 :     if (m_buffer == nullptr) return;
      59             : 
      60           0 :     std::istringstream iss(msg);
      61           0 :     std::string line;
      62           0 :     bool any = false;
      63           0 :     while (std::getline(iss, line))
      64             :     {
      65           0 :         if (!line.empty() && line.back() == '\r') line.pop_back();
      66           0 :         m_buffer->push(std::string("[") + tag + "] " + line);
      67           0 :         any = true;
      68             :     }
      69           0 :     if (!any) m_buffer->push(std::string("[") + tag + "] ");
      70           0 :     if (m_on_line) m_on_line();
      71           0 : }
      72             : 
      73           0 : void CaptureLogger::trace(const std::string &msg)
      74             : {
      75           0 :     capture("trace", msg);
      76           0 :     if (m_inner) m_inner->trace(msg);
      77           0 : }
      78             : 
      79           0 : void CaptureLogger::debug(int level, const std::string &msg)
      80             : {
      81           0 :     capture("debug", msg);
      82           0 :     if (m_inner) m_inner->debug(level, msg);
      83           0 : }
      84             : 
      85           0 : void CaptureLogger::info(const std::string &msg)
      86             : {
      87           0 :     capture("info", msg);
      88           0 :     if (m_inner) m_inner->info(msg);
      89           0 : }
      90             : 
      91           0 : void CaptureLogger::warn(const std::string &msg)
      92             : {
      93           0 :     capture("warn", msg);
      94           0 :     if (m_inner) m_inner->warn(msg);
      95           0 : }
      96             : 
      97           0 : void CaptureLogger::error(const std::string &msg)
      98             : {
      99           0 :     capture("error", msg);
     100           0 :     if (m_inner) m_inner->error(msg);
     101           0 : }
     102             : 
     103           0 : void CaptureLogger::critical(const std::string &msg)
     104             : {
     105           0 :     capture("critical", msg);
     106           0 :     if (m_inner) m_inner->critical(msg);
     107           0 : }
     108             : 
     109           0 : void CaptureLogger::log(log::Level level, const std::string &msg)
     110             : {
     111           0 :     capture(level_tag(level), msg);
     112           0 :     if (m_inner) m_inner->log(level, msg);
     113           0 : }
     114             : 
     115           0 : void CaptureLogger::log(const std::string &msg, log::Level level, int debug_level)
     116             : {
     117           0 :     capture(level_tag(level), msg);
     118           0 :     if (m_inner) m_inner->log(msg, level, debug_level);
     119           0 : }
     120             : 
     121           0 : void CaptureLogger::lock_console()
     122             : {
     123           0 :     if (m_inner) m_inner->lock_console();
     124           0 : }
     125             : 
     126           0 : void CaptureLogger::unlock_console()
     127             : {
     128           0 :     if (m_inner) m_inner->unlock_console();
     129           0 : }
     130             : 
     131           0 : std::shared_ptr<log::Logger_if> CaptureLogger::get_inner() const
     132             : {
     133           0 :     return m_inner;
     134             : }
     135             : 
     136             : } // namespace esys::repo::tui

Generated by: LCOV version 1.14