From 56199d3dfba2c2454c1226fac5d98e84ecf11cd1 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Tue, 23 Mar 2010 22:07:17 +0000 Subject: Save System Trace on exit and allow easy retrieval after restart. The System Trace isn't preserved when quitting Rockbox Utility. Change this so the last trace is saved in the cache folder, and add a button to the trace window to allow easy saving it. Should help in cases where users have problems but restart Rockbox Utility before saving the trace. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25313 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/rbutilqt.cpp | 1 + rbutil/rbutilqt/systrace.cpp | 47 ++++++++++++++++++++++----- rbutil/rbutilqt/systrace.h | 5 +-- rbutil/rbutilqt/systracefrm.ui | 74 ++++++++++++++++++++++++------------------ 4 files changed, 86 insertions(+), 41 deletions(-) (limited to 'rbutil') diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index 292a0026b1..ececb782d4 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp @@ -149,6 +149,7 @@ void RbUtilQt::shutdown(void) // object destruction -- the trace object could already be destroyed. // Fixes segfaults on exit. qInstallMsgHandler(0); + SysTrace::save(); this->close(); } diff --git a/rbutil/rbutilqt/systrace.cpp b/rbutil/rbutilqt/systrace.cpp index 1aed5c05b5..1b9de6b713 100644 --- a/rbutil/rbutilqt/systrace.cpp +++ b/rbutil/rbutilqt/systrace.cpp @@ -21,6 +21,7 @@ #include "systrace.h" #include "ui_systracefrm.h" +#include "rbsettings.h" QString SysTrace::debugbuffer; @@ -32,7 +33,8 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent) refresh(); connect(ui.buttonClose, SIGNAL(clicked()), this, SLOT(close())); - connect(ui.buttonSave, SIGNAL(clicked()), this, SLOT(save())); + connect(ui.buttonSave, SIGNAL(clicked()), this, SLOT(saveCurrentTrace())); + connect(ui.buttonSavePrevious, SIGNAL(clicked()), this, SLOT(savePreviousTrace())); connect(ui.buttonRefresh, SIGNAL(clicked()), this, SLOT(refresh())); } @@ -41,22 +43,51 @@ void SysTrace::refresh(void) int pos = ui.textTrace->verticalScrollBar()->value(); ui.textTrace->setHtml("
" + debugbuffer + "
"); ui.textTrace->verticalScrollBar()->setValue(pos); + QString oldlog = RbSettings::value(RbSettings::CachePath).toString() + + "/rbutil-trace.log"; + ui.buttonSavePrevious->setEnabled(QFileInfo(oldlog).isFile()); } -void SysTrace::save(void) + +void SysTrace::save(QString filename) { - QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"), - QDir::homePath(), "*.log"); - if(fp == "") - return; - - QFile fh(fp); + if(filename.isEmpty()) + filename = RbSettings::value(RbSettings::CachePath).toString() + + "/rbutil-trace.log"; + // append save date to the trace. Append it directly instead of using + // qDebug() as the handler might have been unregistered. + debugbuffer.append("[SysTrace] saving trace at "); + debugbuffer.append(QDateTime::currentDateTime().toString(Qt::ISODate)); + debugbuffer.append("\n"); + QFile fh(filename); if(!fh.open(QIODevice::WriteOnly)) return; fh.write(debugbuffer.toUtf8(), debugbuffer.size()); fh.close(); } +void SysTrace::saveCurrentTrace(void) +{ + QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"), + QDir::homePath(), "*.log"); + if(!fp.isEmpty()) + save(fp); +} + + +void SysTrace::savePreviousTrace(void) +{ + QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"), + QDir::homePath(), "*.log"); + if(fp.isEmpty()) + return; + + QString oldlog = RbSettings::value(RbSettings::CachePath).toString() + + "/rbutil-trace.log"; + QFile::copy(oldlog, fp); + return; +} + void SysTrace::debug(QtMsgType type, const char* msg) { (void)type; diff --git a/rbutil/rbutilqt/systrace.h b/rbutil/rbutilqt/systrace.h index a8253ce9e6..4e6206a886 100644 --- a/rbutil/rbutilqt/systrace.h +++ b/rbutil/rbutilqt/systrace.h @@ -31,14 +31,15 @@ class SysTrace : public QDialog public: SysTrace(QWidget *parent); static void debug(QtMsgType type, const char* msg); - static QString getTrace() {return debugbuffer;} + static void save(QString filename = ""); private: Ui::SysTraceFrm ui; static QString debugbuffer; private slots: - void save(void); + void saveCurrentTrace(void); + void savePreviousTrace(void); void refresh(void); }; diff --git a/rbutil/rbutilqt/systracefrm.ui b/rbutil/rbutilqt/systracefrm.ui index 7a83eecb80..eb8bb6dac6 100644 --- a/rbutil/rbutilqt/systracefrm.ui +++ b/rbutil/rbutilqt/systracefrm.ui @@ -1,7 +1,8 @@ - + + SysTraceFrm - - + + 0 0 @@ -9,29 +10,29 @@ 550 - + System Trace - - - - + + + + System State trace - + true - - + + - - - + + + Qt::Horizontal - + 487 26 @@ -39,43 +40,54 @@ - - - + + + &Close - - + + :/icons/process-stop.png:/icons/process-stop.png - - - + + + &Save - - + + :/icons/document-save.png:/icons/document-save.png - - - + + + &Refresh - - + + :/icons/view-refresh.png:/icons/view-refresh.png + + + + Save &previous + + + + :/icons/document-save.png:/icons/document-save.png + + + - + -- cgit v1.2.3