Greetings Riccardo Both patches have been applied to the head of svn.
Dirk
On Wed, 2008-05-14 at 08:08 +0200, rghetta wrote:
> Hello,
> this patch improves joblog formatting.
> Notable features:
>
> - messages are grouped by time and source
> - columns are properly aligned
> - messages starting with "Error :" shown in red
>
> The resulting display is imho much more readable.
>
> Ciao,
> Riccardo
> plain text document attachment (joblog.patch)
> Index: trunkbase/trunk/bacula/src/qt-console/joblog/joblog.cpp
> ===================================================================
> --- trunkbase.orig/trunk/bacula/src/qt-console/joblog/joblog.cpp
> +++ trunkbase/trunk/bacula/src/qt-console/joblog/joblog.cpp
> @@ -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: trunkbase/trunk/bacula/src/qt-console/joblog/joblog.h
> ===================================================================
> --- trunkbase.orig/trunk/bacula/src/qt-console/joblog/joblog.h
> +++ trunkbase/trunk/bacula/src/qt-console/joblog/joblog.h
> @@ -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;
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________ Bacula-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/bacula-devel
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ Bacula-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bacula-devel
