2011-02-17 02:21:45 +03:00
|
|
|
#include <QAction>
|
|
|
|
#include <QDebug>
|
|
|
|
#include <QDesktopServices>
|
|
|
|
#include <QIcon>
|
|
|
|
#include <QMutexLocker>
|
2011-04-05 14:16:24 +04:00
|
|
|
#include <QTimer>
|
2011-02-17 02:21:45 +03:00
|
|
|
#include <QUrl>
|
|
|
|
|
|
|
|
#include "mirall/constants.h"
|
|
|
|
#include "mirall/folder.h"
|
|
|
|
#include "mirall/folderwatcher.h"
|
|
|
|
|
2011-04-05 14:16:24 +04:00
|
|
|
#define DEFAULT_POLL_INTERVAL_SEC 30
|
|
|
|
|
2011-02-17 02:21:45 +03:00
|
|
|
namespace Mirall {
|
|
|
|
|
2011-04-06 11:52:02 +04:00
|
|
|
Folder::Folder(const QString &alias, const QString &path, QObject *parent)
|
2011-02-17 02:21:45 +03:00
|
|
|
: QObject(parent),
|
2011-04-05 14:16:24 +04:00
|
|
|
_path(path),
|
|
|
|
_pollTimer(new QTimer(this)),
|
2011-04-06 11:52:02 +04:00
|
|
|
_pollInterval(DEFAULT_POLL_INTERVAL_SEC),
|
|
|
|
_alias(alias)
|
2011-02-17 02:21:45 +03:00
|
|
|
{
|
2011-02-17 13:27:05 +03:00
|
|
|
_openAction = new QAction(QIcon(FOLDER_ICON), path, this);
|
2011-02-17 17:10:06 +03:00
|
|
|
_openAction->setIconVisibleInMenu(true);
|
|
|
|
_openAction->setIcon(QIcon(FOLDER_ICON));
|
|
|
|
|
2011-02-17 13:27:05 +03:00
|
|
|
QObject::connect(_openAction, SIGNAL(triggered(bool)), SLOT(slotOpenFolder()));
|
2011-02-17 02:21:45 +03:00
|
|
|
|
2011-04-06 12:40:15 +04:00
|
|
|
_pollTimer->setSingleShot(true);
|
2011-04-05 14:16:24 +04:00
|
|
|
_pollTimer->setInterval(pollInterval() * 1000);
|
|
|
|
QObject::connect(_pollTimer, SIGNAL(timeout()), this, SLOT(slotPollTimerTimeout()));
|
|
|
|
_pollTimer->start();
|
|
|
|
|
2011-02-17 02:21:45 +03:00
|
|
|
_watcher = new Mirall::FolderWatcher(path, this);
|
2011-03-23 01:03:43 +03:00
|
|
|
QObject::connect(_watcher, SIGNAL(folderChanged(const QStringList &)),
|
|
|
|
SLOT(slotChanged(const QStringList &)));
|
2011-03-28 01:29:45 +04:00
|
|
|
|
|
|
|
QObject::connect(this, SIGNAL(syncStarted()),
|
|
|
|
SLOT(slotSyncStarted()));
|
|
|
|
QObject::connect(this, SIGNAL(syncFinished()),
|
|
|
|
SLOT(slotSyncFinished()));
|
|
|
|
|
2011-02-17 02:21:45 +03:00
|
|
|
}
|
|
|
|
|
2011-02-17 13:27:05 +03:00
|
|
|
QAction * Folder::openAction() const
|
2011-02-17 02:21:45 +03:00
|
|
|
{
|
2011-02-17 13:27:05 +03:00
|
|
|
return _openAction;
|
2011-02-17 02:21:45 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
Folder::~Folder()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2011-04-06 11:52:02 +04:00
|
|
|
QString Folder::alias() const
|
|
|
|
{
|
|
|
|
return _alias;
|
|
|
|
}
|
|
|
|
|
2011-02-17 17:10:06 +03:00
|
|
|
QString Folder::path() const
|
|
|
|
{
|
|
|
|
return _path;
|
|
|
|
}
|
|
|
|
|
2011-04-05 14:16:24 +04:00
|
|
|
int Folder::pollInterval() const
|
|
|
|
{
|
|
|
|
return _pollInterval;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Folder::setPollInterval(int seconds)
|
|
|
|
{
|
|
|
|
_pollInterval = seconds;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Folder::slotPollTimerTimeout()
|
|
|
|
{
|
2011-04-06 12:40:15 +04:00
|
|
|
qDebug() << "* Polling" << alias() << "for changes. Ignoring all pending events until now";
|
2011-04-05 14:16:24 +04:00
|
|
|
_watcher->clearPendingEvents();
|
2011-04-06 12:40:15 +04:00
|
|
|
qDebug() << "* " << root() << "Poll timer disabled";
|
|
|
|
_pollTimer->stop();
|
2011-04-05 14:16:24 +04:00
|
|
|
startSync(QStringList());
|
|
|
|
}
|
|
|
|
|
2011-03-23 01:03:43 +03:00
|
|
|
void Folder::slotChanged(const QStringList &pathList)
|
2011-02-17 02:21:45 +03:00
|
|
|
{
|
2011-03-25 20:25:56 +03:00
|
|
|
startSync(pathList);
|
2011-02-17 02:21:45 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void Folder::slotOpenFolder()
|
|
|
|
{
|
|
|
|
QDesktopServices::openUrl(QUrl(_path));
|
|
|
|
}
|
|
|
|
|
2011-02-17 17:10:06 +03:00
|
|
|
void Folder::slotSyncStarted()
|
|
|
|
{
|
2011-03-27 04:26:41 +04:00
|
|
|
// disable events until syncing is done
|
|
|
|
_watcher->setEventsEnabled(false);
|
2011-02-17 17:10:06 +03:00
|
|
|
_openAction->setIcon(QIcon(FOLDER_SYNC_ICON));
|
|
|
|
}
|
|
|
|
|
|
|
|
void Folder::slotSyncFinished()
|
|
|
|
{
|
2011-03-27 04:26:41 +04:00
|
|
|
_watcher->setEventsEnabled(true);
|
2011-02-17 17:10:06 +03:00
|
|
|
_openAction->setIcon(QIcon(FOLDER_ICON));
|
2011-04-06 12:40:15 +04:00
|
|
|
// reenable the poll timer
|
|
|
|
qDebug() << "* " << root() << "Poll timer enabled";
|
|
|
|
_pollTimer->start();
|
2011-02-17 17:10:06 +03:00
|
|
|
}
|
2011-02-17 02:21:45 +03:00
|
|
|
|
|
|
|
} // namespace Mirall
|
|
|
|
|
|
|
|
#include "folder.moc"
|