diff options
author | Arno <am@disconnect.de> | 2013-03-21 17:57:15 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-03-21 17:57:15 +0100 |
commit | 7e23cbf95d125fc6325d73b6bee9551a1dd6fb79 (patch) | |
tree | b36674dd33bf8850aba4488deb1bab11f2ed1151 | |
parent | ce402f298b2f9733b614fbf1bde99a052d0ab5c0 (diff) | |
download | SheMov-7e23cbf95d125fc6325d73b6bee9551a1dd6fb79.tar.gz SheMov-7e23cbf95d125fc6325d73b6bee9551a1dd6fb79.tar.bz2 SheMov-7e23cbf95d125fc6325d73b6bee9551a1dd6fb79.zip |
Implement auto refresh
Since inotify isn't completely implemented for cifs mounts, implement
auto refresh for FileView. Default is 5 seconds.
-rw-r--r-- | configurationdialog.cpp | 22 | ||||
-rw-r--r-- | configurationdialog.h | 2 | ||||
-rw-r--r-- | smdirmodel.cpp | 12 | ||||
-rw-r--r-- | smdirmodel.h | 1 | ||||
-rw-r--r-- | smdirwatcher.cpp | 2 |
5 files changed, 39 insertions, 0 deletions
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<QString, QIcon> 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); } |