From 7e23cbf95d125fc6325d73b6bee9551a1dd6fb79 Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 21 Mar 2013 17:57:15 +0100 Subject: Implement auto refresh Since inotify isn't completely implemented for cifs mounts, implement auto refresh for FileView. Default is 5 seconds. --- configurationdialog.cpp | 22 ++++++++++++++++++++++ configurationdialog.h | 2 ++ smdirmodel.cpp | 12 ++++++++++++ smdirmodel.h | 1 + smdirwatcher.cpp | 2 ++ 5 files changed, 39 insertions(+) diff --git a/configurationdialog.cpp b/configurationdialog.cpp index d963d3c..12198e3 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -140,9 +140,27 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : S archiveLayout->addWidget(mIconizeCovers); archiveBox->setLayout(archiveLayout); + //auto refresh + QGroupBox *autoRefreshBox = new QGroupBox(tr("Auto Refresh")); + QVBoxLayout *autoRefreshLayout = new QVBoxLayout; + mAutoRefresh = new QCheckBox(tr("Automatically refresh directory")); + autoRefreshLayout->addWidget(mAutoRefresh); + QLabel *refreshL1 = new QLabel(tr("Refresh every (s)")); + mAutoRefreshValue = new QSpinBox; + mAutoRefreshValue->setMinimum(5); + mAutoRefreshValue->setValue(5); + QHBoxLayout *autoSpinLayout = new QHBoxLayout; + autoSpinLayout->addWidget(refreshL1); + autoSpinLayout->addWidget(mAutoRefreshValue); + QVBoxLayout *autoRefreshBoxL = new QVBoxLayout; + autoRefreshBoxL->addWidget(mAutoRefresh); + autoRefreshBoxL->addLayout(autoSpinLayout); + autoRefreshBox->setLayout(autoRefreshBoxL); + //misc - assemble miscLayout->addWidget(hoverBox); miscLayout->addWidget(archiveBox); + miscLayout->addWidget(autoRefreshBox); miscWidget->setLayout(miscLayout); mTab->addTab(miscWidget, tr("Misc. settings")); @@ -431,6 +449,8 @@ void ConfigurationDialog::readSettings(){ mAutoAddCovers->setChecked(s.value("ui/autoaddcovers", false).toBool()); mIconizeCovers->setChecked(s.value("ui/iconizecovers", false).toBool()); mCursorOffset->setValue(s.value("ui/cursoroffset", SmGlobals::instance()->cursorSize().height()).toInt()); + mAutoRefresh->setChecked(s.value("ui/autorefresh", false).toBool()); + mAutoRefreshValue->setValue(s.value("ui/autorefreshvalue", 5).toInt()); //read paths mArchiveDir->setText(s.value("paths/archivedir").toString()); @@ -521,6 +541,8 @@ void ConfigurationDialog::writeSettings(){ s.setValue("ui/autoaddcovers", (mAutoAddCovers->checkState() == Qt::Checked)); s.setValue("ui/iconizecovers", (mIconizeCovers->checkState() == Qt::Checked)); s.setValue("ui/cursoroffset", mCursorOffset->value()); + s.setValue("ui/autorefresh", (mAutoRefresh->checkState() == Qt::Checked)); + s.setValue("ui/autorefreshvalue", mAutoRefreshValue->value()); //write pictures QString curPos = mInfoBox->currentText(); diff --git a/configurationdialog.h b/configurationdialog.h index f090e2c..cc074de 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -79,10 +79,12 @@ class ConfigurationDialog : public SmDialog { QCheckBox *mHoverMovies; QCheckBox *mAutoAddCovers; QCheckBox *mIconizeCovers; + QCheckBox *mAutoRefresh; QSpinBox *mHoverOpacity; QSpinBox *mCursorOffset; QSpinBox *mPVWidth; QSpinBox *mPVHeight; + QSpinBox *mAutoRefreshValue; QLabel *mClipboardColor; QLabel *mBaseColor; QLabel *mAlternateBaseColor; diff --git a/smdirmodel.cpp b/smdirmodel.cpp index d24fdef..ea44ccd 100644 --- a/smdirmodel.cpp +++ b/smdirmodel.cpp @@ -22,6 +22,7 @@ SmDirModel::SmDirModel(const QStringList &headers, QObject *parent) : SmTreeMode mRunTimer->setInterval(2000); connect(mRunTimer, SIGNAL(timeout()), mWatch, SLOT(start())); mRunTimer->start(); + mRefreshTimer = new QTimer(this); readSettings(); mCollector = mWatch->collector(); @@ -154,9 +155,20 @@ void SmDirModel::readSettings(){ mIcons.insert("image", QIcon(icons.value(iconName))); iconName = s.value("ui/othericon").toString(); mIcons.insert("other", QIcon(icons.value(iconName))); + bool autorefresh = s.value("ui/autorefresh", false).toBool(); + if(autorefresh){ + mRefreshTimer->stop(); + mRefreshTimer->disconnect(); + int interval = s.value("ui/autorefreshvalue").toInt(); + interval *= 1000; + mRefreshTimer->setInterval(interval); + mRefreshTimer->start(); + connect(mRefreshTimer, SIGNAL(timeout()), this, SLOT(refresh())); + } } void SmDirModel::refresh(){ + setDir(mCurrentDir); } void SmDirModel::populate(SmTreeItem *root){ diff --git a/smdirmodel.h b/smdirmodel.h index 2db790b..9c311e0 100644 --- a/smdirmodel.h +++ b/smdirmodel.h @@ -55,6 +55,7 @@ class SmDirModel : public SmTreeModel { QString mCurrentDir; QString mCur; QTimer *mRunTimer; + QTimer *mRefreshTimer; QMap mIcons; QMutex *mCollectorMx; SmDataColletor *mCollector; diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index 8b72aab..069ebfe 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -37,6 +37,8 @@ SmDirWatcher::SmDirWatcher(QObject *parent) : QThread(parent), mFd(0), mDescr(0) } SmDirWatcher::~SmDirWatcher(){ + mCollector->terminate(); + mCollector->wait(); if(mFd && mDescr){ inotify_rm_watch(mFd, mDescr); } -- cgit v1.2.3-70-g09d2