OSDN Git Service

Bump program version + updated changelog.
[x264-launcher/x264-launcher.git] / src / model_logFile.cpp
index c5fb702..bd8de1d 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Simple x264 Launcher
-// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2017 LoRd_MuldeR <MuldeR2@GMX.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 #include <QApplication>
 #include <QClipboard>
 #include <QDir>
+#include <QTextStream>
+#include <QDateTime>
+
+static const QLatin1String FMT_TIMESTAMP("[yyyy-MM-dd][HH:mm:ss] ");
 
 LogFileModel::LogFileModel(const QString &sourceName, const QString &outputName, const QString &configName)
 {
-       m_lines << "Job not started yet." << QString();
-       m_lines << QString("Scheduled source: %1").arg(QDir::toNativeSeparators(sourceName));
-       m_lines << QString("Scheduled output: %1").arg(QDir::toNativeSeparators(outputName));
-       m_lines << QString("Scheduled config: %1").arg(configName);
+       const qint64 timeStamp = QDateTime::currentMSecsSinceEpoch();
+       m_lines << qMakePair(timeStamp, QString("Job not started yet."));
+       m_lines << qMakePair(timeStamp, QString());
+       m_lines << qMakePair(timeStamp, QString("Scheduled source: %1").arg(QDir::toNativeSeparators(sourceName)));
+       m_lines << qMakePair(timeStamp, QString("Scheduled output: %1").arg(QDir::toNativeSeparators(outputName)));
+       m_lines << qMakePair(timeStamp, QString("Scheduled config: %1").arg(configName));
        m_firstLine = true;
 }
 
@@ -75,7 +81,16 @@ QVariant LogFileModel::data(const QModelIndex &index, int role) const
        {
                if(index.row() >= 0 && index.row() < m_lines.count() && index.column() == 0)
                {
-                       return m_lines.at(index.row());
+                       if (role == Qt::ToolTipRole)
+                       {
+                               const LogEntry &entry = m_lines.at(index.row());
+                               const QString timeStamp = QDateTime::fromMSecsSinceEpoch(entry.first).toString(FMT_TIMESTAMP);
+                               return timeStamp + entry.second;
+                       }
+                       else
+                       {
+                               return m_lines.at(index.row()).second;
+                       }
                }
        }
 
@@ -86,17 +101,57 @@ QVariant LogFileModel::data(const QModelIndex &index, int role) const
 // Public API
 ///////////////////////////////////////////////////////////////////////////////
 
-void LogFileModel::copyToClipboard(void)
+void LogFileModel::copyToClipboard(void) const
 {
-       QClipboard *clipboard = QApplication::clipboard();
-       clipboard->setText(m_lines.join("\r\n"));
+       QClipboard *const clipboard = QApplication::clipboard();
+       QStringList buffer;
+       for (QList<LogEntry>::ConstIterator iter = m_lines.constBegin(); iter != m_lines.constEnd(); iter++)
+       {
+               const QString timeStamp = QDateTime::fromMSecsSinceEpoch(iter->first).toString(FMT_TIMESTAMP);
+               buffer << (timeStamp + iter->second);
+       }
+       clipboard->setText(buffer.join("\r\n"));
+}
+
+bool LogFileModel::saveToLocalFile(const QString &fileName) const
+{
+       QFile file(fileName);
+       if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
+       {
+               return false;
+       }
+
+       QTextStream stream(&file);
+       stream.setCodec("UTF-8");
+       stream.setGenerateByteOrderMark(true);
+
+       for(QList<LogEntry>::ConstIterator iter = m_lines.constBegin(); iter != m_lines.constEnd(); iter++)
+       {
+               const QString timeStamp = QDateTime::fromMSecsSinceEpoch(iter->first).toString(FMT_TIMESTAMP);
+               stream << timeStamp << iter->second << QLatin1String("\r\n");
+               if(stream.status() != QTextStream::Status::Ok)
+               {
+                       file.close();
+                       return false;
+               }
+       }
+
+       stream.flush();
+       if(stream.status() != QTextStream::Status::Ok)
+       {
+               file.close();
+               return false;
+       }
+
+       file.close();
+       return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Slots
 ///////////////////////////////////////////////////////////////////////////////
 
-void LogFileModel::addLogMessage(const QUuid &jobId, const QString &text)
+void LogFileModel::addLogMessage(const QUuid &jobId, const qint64 &timeStamp, const QString &text)
 {
        beginInsertRows(QModelIndex(), m_lines.count(), m_lines.count());
 
@@ -106,10 +161,10 @@ void LogFileModel::addLogMessage(const QUuid &jobId, const QString &text)
                m_lines.clear();
        }
 
-       QStringList lines = text.split("\n");
-       for(int i = 0; i < lines.count(); i++)
+       const QStringList lines = text.split("\n");
+       for(QStringList::ConstIterator iter = lines.constBegin(); iter != lines.constEnd(); iter++)
        {
-               m_lines.append(lines.at(i));
+               m_lines << qMakePair(timeStamp, (*iter));
        }
 
        endInsertRows();