]> git.sur5r.net Git - bacula/bacula/commitdiff
Riccardo's patch of joblog.
authorDirk H Bartley <dbartley@schupan.com>
Thu, 15 May 2008 01:45:05 +0000 (01:45 +0000)
committerDirk H Bartley <dbartley@schupan.com>
Thu, 15 May 2008 01:45:05 +0000 (01:45 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6976 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/qt-console/joblog/joblog.cpp
bacula/src/qt-console/joblog/joblog.h

index 7756d0b01227685a250515b8e660ecb9809048be..3d9c5f2f01ec0cffb8ca3ab90cc054f64ab8d46d 100644 (file)
@@ -41,7 +41,7 @@
 JobLog::JobLog(QString &jobId, QTreeWidgetItem *parentTreeWidgetItem)
 {
    setupUi(this);
-   m_name = "JobLog";
+   m_name = tr("JobLog");
    m_closeable = true;
    pgInitialize(parentTreeWidgetItem);
    QTreeWidgetItem* thisitem = mainWin->getFromHash(this);
@@ -76,56 +76,98 @@ void JobLog::getFont()
  */
 void JobLog::populateText()
 {
-   QString heading("<A href=\"#top\">Log records for job ");
-   heading += m_jobId + "</A><br>\n";
-   textEdit->insertHtml(heading);
-
    if (!m_console->preventInUseConnect())
-       return;
-   
-   QString query("");
-   query = "SELECT Time,LogText FROM Log WHERE JobId='" + m_jobId + "' ORDER by Time";
-
+      return;
+     
+   QString query;
+   query = "SELECT Time, LogText FROM Log WHERE JobId='" + m_jobId + "' order by Time";
+
+   /* This could be a log item */
+   if (mainWin->m_sqlDebug) {
+      Pmsg1(000, "Log query cmd : %s\n", query.toUtf8().data());
+   }
+  
    QStringList results;
    if (m_console->sql_cmd(query, results)) {
-      QString field;
-      QStringList fieldlist;
-      int resultcount = 0;
 
+      if (!results.size()) {
+         QMessageBox::warning(this, tr("Bat"),
+            tr("There were no results!\n"
+              "It is possible you may need to add \"catalog = all\" "
+              "to the Messages resource for this job.\n"), QMessageBox::Ok);
+        return;
+      } 
+
+      QString jobstr("JobId "); /* FIXME: should this be translated ? */
+      jobstr += m_jobId;
+
+      QString htmlbuf("<html><body><b>" + tr("Log records for job %1").arg(m_jobId) );
+      htmlbuf += "</b><table>";
+  
       /* Iterate through the lines of results. */
+      QString field;
+      QStringList fieldlist;
+      QString lastTime;
+      QString lastSvc;
       foreach (QString resultline, results) {
-         int column = 0;
          fieldlist = resultline.split("\t");
-         /* Iterate through fields in the record */
-         foreach (field, fieldlist) {
-            display_text(field);
-            if (column == 0) display_text(" ");
-            column++;
-         } /* foreach field */
-         resultcount++; 
+        
+        if (fieldlist.size() < 2)
+           continue;
+
+        htmlbuf +="<tr>";
+
+        QString curTime = fieldlist[0].trimmed();
+
+        field = fieldlist[1].trimmed();
+        int colon = field.indexOf(":");
+        if (colon > 0) {
+           /* string is like <service> <jobId xxxx>: ..." 
+            * we split at ':' then remove the jobId xxxx string (always the same) */ 
+           QString curSvc(field.left(colon).replace(jobstr,"").trimmed());
+           if (curSvc == lastSvc  && curTime == lastTime) {
+              curTime.clear();
+              curSvc.clear(); 
+           } else {
+              lastTime = curTime;
+              lastSvc = curSvc;
+           }
+           htmlbuf += "<td>" + curTime + "</td>";
+           htmlbuf += "<td><p>" + curSvc + "</p></td>";
+
+           /* rest of string is marked as pre-formatted (here trimming should
+            * be avoided, to preserve original formatting) */
+           QString msg(field.mid(colon+2));
+           if (msg.startsWith( tr("Error:")) ) { /* FIXME: should really be translated ? */
+              /* error msg, use a specific class */
+              htmlbuf += "<td><pre class=err>" + msg + "</pre></td>";
+           } else {
+              htmlbuf += "<td><pre>" + msg + "</pre></td>";
+           }
+        } else {
+           /* non standard string, place as-is */
+           if (curTime == lastTime) {
+              curTime.clear();
+           } else {
+              lastTime = curTime;
+           }
+           htmlbuf += "<td>" + curTime + "</td>";
+           htmlbuf += "<td><pre>" + field + "</pre></td>";
+        }
+
+        htmlbuf += "</tr>";
+  
       } /* foreach resultline */
-      if (resultcount == 0) {
-         /* show a message about configuration item */
-         QMessageBox::warning(this, "Bat",
-            tr("There were no results!\n"
-"It is possible you may need to add \"catalog = all\" to the Messages resource"
-" for this job.\n"), QMessageBox::Ok);
-      }
-   } /* if results from query */
-   textEdit->scrollToAnchor("top");
-}
 
-/*
- * Put text into the joblog window with an overload
- */
-void JobLog::display_text(const QString buf)
-{
-   m_cursor->movePosition(QTextCursor::End);
-   m_cursor->insertText(buf);
-}
+      htmlbuf += "</table></body></html>";
 
-void JobLog::display_text(const char *buf)
-{
-   m_cursor->movePosition(QTextCursor::End);
-   m_cursor->insertText(buf);
+      /* full text ready. Here a custom sheet is used to align columns */
+      QString logSheet("p,pre,.err {margin-left: 10px} .err {color:#FF0000;}");
+      textEdit->document()->setDefaultStyleSheet(logSheet);
+      textEdit->document()->setHtml(htmlbuf); 
+      textEdit->moveCursor(QTextCursor::Start);
+
+   } /* if results from query */
+  
 }
+  
index 56dece3bd4702efe10f49990bb11b9c8c5c798b2..47ce925dbec985c8fcd3c28b2fff8e3bc25f3155 100644 (file)
@@ -49,8 +49,6 @@ public slots:
 private slots:
 
 private:
-   void display_text(const char *buf);
-   void display_text(const QString buf);
    void populateText();
    void getFont();
    QTextCursor *m_cursor;