nextcloud-desktop/src/mirall/folderwatcher.h

139 lines
3.1 KiB
C
Raw Normal View History

2011-04-06 13:48:02 +04:00
/*
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
2011-02-17 02:21:45 +03:00
#ifndef MIRALL_FOLDERWATCHER_H
#define MIRALL_FOLDERWATCHER_H
#include "config.h"
2012-05-21 18:48:49 +04:00
#include "mirall/folder.h"
#include <QList>
2011-02-17 02:21:45 +03:00
#include <QObject>
#include <QString>
#include <QStringList>
#include <QTime>
2012-02-16 01:36:52 +04:00
#include <QHash>
2011-02-17 02:21:45 +03:00
class QTimer;
2012-05-21 18:48:49 +04:00
namespace Mirall {
2012-12-04 21:15:37 +04:00
class FolderWatcherPrivate;
2011-02-17 02:21:45 +03:00
2011-03-21 00:17:23 +03:00
/**
* Watches a folder and sub folders for changes
*
* Will notify changed files relative to the root()
* directory.
*
* If too many changes happen in a short time interval,
* it will accumulate and be fired together later.
2011-03-21 00:17:23 +03:00
*/
2011-02-17 02:21:45 +03:00
class FolderWatcher : public QObject
{
Q_OBJECT
public:
2011-03-21 00:17:23 +03:00
/**
* @param root Path of the root of the folder
*/
FolderWatcher(const QString &root, QObject *parent = 0L);
2011-02-17 02:21:45 +03:00
~FolderWatcher();
2011-03-21 00:18:38 +03:00
/**
* Root path being monitored
*/
QString root() const;
2011-03-21 00:18:38 +03:00
/**
* Set a file name to load a file with ignore patterns.
*/
void setIgnoreListFile( const QString& );
/**
* Add an ignore pattern that will not be
* notified
*
* You can use wildcards
*/
void addIgnore(const QString &pattern);
/**
* If true, folderChanged() events are sent
* at least as often as eventInterval() seconds.
*/
bool eventsEnabled() const;
/**
* Enabled or disables folderChanged() events.
* If disabled, events are accumulated and emptied
* the next time a folderChanged() event happens.
*/
void setEventsEnabled(bool enabled);
/**
* Clear all pending events
*/
void clearPendingEvents();
/**
* The minimum amounts of seconds that will separate
* folderChanged() intervals
*/
int eventInterval() const;
/**
* Sets minimum amounts of seconds that will separate
* folderChanged() intervals
*/
void setEventInterval(int seconds);
QStringList ignores() const;
2011-02-17 02:21:45 +03:00
signals:
2011-03-21 00:17:23 +03:00
/**
* Emitted when one of the paths is changed
*/
void folderChanged(const QStringList &pathList);
2011-03-21 00:17:23 +03:00
protected:
void setProcessTimer();
2011-02-17 02:21:45 +03:00
protected slots:
// called when the manually process timer triggers
void slotProcessTimerTimeout();
2012-12-06 19:26:27 +04:00
void changeDetected(const QString &f);
protected:
QHash<QString, int> _pendingPathes;
2012-12-04 20:46:44 +04:00
2011-02-17 02:21:45 +03:00
private:
bool _eventsEnabled;
int _eventInterval;
2012-12-04 21:15:37 +04:00
FolderWatcherPrivate *_d;
QString _root;
// paths pending to notified
2012-02-16 01:36:52 +04:00
// QStringList _pendingPaths;
QTimer *_processTimer;
QStringList _ignores;
// for the initial synchronization, without
// any file changed
bool _initialSyncDone;
friend class FolderWatcherPrivate;
2011-02-17 02:21:45 +03:00
};
}
#endif