File indexing completed on 2024-05-05 05:48:56

0001 /*
0002     SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "logLine.h"
0008 
0009 #include "logMode.h"
0010 #include "logModeItemBuilder.h"
0011 #include "logViewWidgetItem.h"
0012 
0013 #include "ksystemlogConfig.h"
0014 #include "ksystemlog_debug.h"
0015 
0016 LogLine::LogLine(long internalId, const QDateTime &dateTime, const QStringList &logItems, const QString &file, LogLevel *logLevel, LogMode *logMode)
0017 {
0018     mInternalId = internalId;
0019     mTime = dateTime;
0020     mLogItems = logItems;
0021     mOriginalFile = file;
0022     mLogLevel = logLevel;
0023     mLogMode = logMode;
0024 
0025     // By default in newly created item has the recent state
0026     setRecent(true);
0027 }
0028 
0029 LogLine::~LogLine()
0030 {
0031     // logLevel is managed by Globals
0032 
0033     // item is managed by LogMode
0034     // itemBuilder is managed by LogMode
0035 }
0036 
0037 LogMode *LogLine::logMode() const
0038 {
0039     return mLogMode;
0040 }
0041 
0042 void LogLine::setLogMode(LogMode *logMode)
0043 {
0044     mLogMode = logMode;
0045 }
0046 
0047 bool LogLine::equals(const LogLine &other) const
0048 {
0049     if (logMode()->id() != other.logMode()->id()) {
0050         return false;
0051     }
0052 
0053     if (time() != other.time()) {
0054         return false;
0055     }
0056 
0057     if (logLevel()->id() != other.logLevel()->id()) {
0058         return false;
0059     }
0060 
0061     if (mLogItems != other.mLogItems) {
0062         return false;
0063     }
0064 
0065     return true;
0066 }
0067 
0068 LogLevel *LogLine::logLevel() const
0069 {
0070     return mLogLevel;
0071 }
0072 
0073 void LogLine::setLogLevel(LogLevel *level)
0074 {
0075     mLogLevel = level;
0076 }
0077 
0078 QDateTime LogLine::time() const
0079 {
0080     return mTime;
0081 }
0082 
0083 void LogLine::setLogItems(const QStringList &logItems)
0084 {
0085     mLogItems = logItems;
0086 }
0087 
0088 QStringList LogLine::logItems() const
0089 {
0090     return mLogItems;
0091 }
0092 
0093 QString LogLine::sourceFileName() const
0094 {
0095     return mOriginalFile;
0096 }
0097 
0098 bool LogLine::isOlderThan(const LogLine &other) const
0099 {
0100     if (mTime == other.time()) {
0101         return mInternalId < other.internalId();
0102     }
0103 
0104     return mTime < other.time();
0105 }
0106 
0107 bool LogLine::isNewerThan(const LogLine &other) const
0108 {
0109     if (mTime == other.time()) {
0110         return mInternalId > other.internalId();
0111     }
0112 
0113     return mTime > other.time();
0114 }
0115 
0116 bool LogLine::isSameTime(const LogLine &other) const
0117 {
0118     return mTime == other.time();
0119 }
0120 
0121 long LogLine::internalId() const
0122 {
0123     return mInternalId;
0124 }
0125 
0126 void LogLine::setRecent(bool recent)
0127 {
0128     mRecent = recent;
0129 
0130     if (mItem) {
0131         QFont currentFont = mItem->font(mItem->columnCount() - 1);
0132 
0133         // We avoid doing the same process
0134         if (mRecent != currentFont.bold()) {
0135             currentFont.setBold(recent);
0136             mItem->setFont(mItem->columnCount() - 1, currentFont);
0137         }
0138     }
0139 }
0140 
0141 QString LogLine::exportToText() const
0142 {
0143     QString exporting;
0144 
0145     if (!mItem) {
0146         qCCritical(KSYSTEMLOG) << "Trying to export text from NULL item";
0147         return exporting;
0148     }
0149 
0150     for (int i = 0; i < mItem->columnCount(); ++i) {
0151         if (i > 0) {
0152             exporting.append(QLatin1Char('\t'));
0153         }
0154 
0155         exporting.append(mItem->text(i));
0156     }
0157 
0158     return exporting;
0159 }
0160 
0161 QString LogLine::formattedText()
0162 {
0163     return mLogMode->itemBuilder()->createFormattedText(this);
0164 }
0165 
0166 void LogLine::setItem(LogViewWidgetItem *item)
0167 {
0168     mItem = item;
0169 
0170     initializeItem();
0171 }
0172 
0173 void LogLine::initializeItem()
0174 {
0175     mLogMode->itemBuilder()->prepareItem(mItem);
0176 
0177     // Call methods that change the look of the item
0178     setRecent(mRecent);
0179 
0180     if (KSystemLogConfig::colorizeLogLines()) {
0181         // Last column index = logItems.count() = (logItems.count() -1) +1 (the date column)
0182         mItem->setForeground(mLogItems.count(), QBrush(mLogLevel->color()));
0183     }
0184 
0185     mItem->toggleToolTip(KSystemLogConfig::tooltipEnabled());
0186 }