2011-04-06 13:48:02 +04:00
|
|
|
/*
|
|
|
|
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
|
2013-07-22 22:27:42 +04:00
|
|
|
* Copyright (C) by Daniel Molkentin <danimo@owncloud.com>
|
|
|
|
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
2011-04-06 13:48:02 +04:00
|
|
|
*
|
|
|
|
* 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_FOLDER_H
|
|
|
|
#define MIRALL_FOLDER_H
|
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
#include "mirall/syncresult.h"
|
|
|
|
#include "mirall/progressdispatcher.h"
|
|
|
|
#include "mirall/csyncthread.h"
|
2012-07-20 19:13:23 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
#include <QDir>
|
|
|
|
#include <QHash>
|
|
|
|
#include <QNetworkAccessManager>
|
|
|
|
#include <QNetworkProxy>
|
2011-02-17 02:21:45 +03:00
|
|
|
#include <QObject>
|
2011-03-23 01:03:43 +03:00
|
|
|
#include <QStringList>
|
2011-02-17 02:21:45 +03:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
#include <QDebug>
|
2013-08-05 19:01:08 +04:00
|
|
|
#include <QTimer>
|
2011-04-08 13:36:53 +04:00
|
|
|
|
2012-06-25 17:31:13 +04:00
|
|
|
class QFileSystemWatcher;
|
2013-08-05 15:34:36 +04:00
|
|
|
class QThread;
|
2011-02-17 02:21:45 +03:00
|
|
|
|
|
|
|
namespace Mirall {
|
|
|
|
|
|
|
|
class FolderWatcher;
|
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
typedef enum SyncFileStatus_s {
|
|
|
|
STATUS_NONE,
|
|
|
|
STATUS_EVAL,
|
|
|
|
STATUS_REMOVE,
|
|
|
|
STATUS_RENAME,
|
|
|
|
STATUS_NEW,
|
|
|
|
STATUS_CONFLICT,
|
|
|
|
STATUS_IGNORE,
|
|
|
|
STATUS_SYNC,
|
|
|
|
STATUS_STAT_ERROR,
|
|
|
|
STATUS_ERROR,
|
|
|
|
STATUS_UPDATED
|
|
|
|
} SyncFileStatus;
|
|
|
|
|
|
|
|
class ServerActionNotifier : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
ServerActionNotifier(QObject *parent = 0);
|
|
|
|
public slots:
|
|
|
|
void slotSyncFinished(const SyncResult &result);
|
|
|
|
signals:
|
|
|
|
void guiLog(const QString&, const QString&);
|
2013-07-31 00:22:43 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
private:
|
|
|
|
};
|
|
|
|
|
2011-02-17 02:21:45 +03:00
|
|
|
class Folder : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
protected:
|
|
|
|
friend class FolderMan;
|
2012-03-26 15:20:15 +04:00
|
|
|
Folder(const QString&, const QString&, const QString& , QObject*parent = 0L);
|
2013-07-22 22:27:42 +04:00
|
|
|
|
|
|
|
public:
|
|
|
|
~Folder();
|
2011-02-17 02:21:45 +03:00
|
|
|
|
2011-10-11 16:23:32 +04:00
|
|
|
typedef QHash<QString, Folder*> Map;
|
2013-02-10 14:01:24 +04:00
|
|
|
typedef QHashIterator<QString, Folder*> MapIterator;
|
2011-10-11 16:23:32 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
/**
|
|
|
|
* Get status about a single file.
|
|
|
|
*/
|
|
|
|
SyncFileStatus fileStatus( const QString& );
|
|
|
|
|
2011-04-06 11:52:02 +04:00
|
|
|
/**
|
|
|
|
* alias or nickname
|
|
|
|
*/
|
|
|
|
QString alias() const;
|
|
|
|
|
2011-02-17 17:10:06 +03:00
|
|
|
/**
|
|
|
|
* local folder path
|
|
|
|
*/
|
|
|
|
QString path() const;
|
2013-07-22 22:27:42 +04:00
|
|
|
/**
|
|
|
|
* remote folder path
|
|
|
|
*/
|
|
|
|
QString secondPath() const;
|
2011-02-17 17:10:06 +03:00
|
|
|
|
2012-08-15 19:16:44 +04:00
|
|
|
/**
|
|
|
|
* local folder path with native separators
|
|
|
|
*/
|
|
|
|
QString nativePath() const;
|
2013-07-22 22:27:42 +04:00
|
|
|
|
2011-10-13 18:41:24 +04:00
|
|
|
/**
|
|
|
|
* switch sync on or off
|
|
|
|
* If the sync is switched off, the startSync method is not going to
|
|
|
|
* be called.
|
|
|
|
*/
|
|
|
|
void setSyncEnabled( bool );
|
|
|
|
|
|
|
|
bool syncEnabled() const;
|
|
|
|
|
2011-03-27 04:26:41 +04:00
|
|
|
/**
|
|
|
|
* True if the folder is busy and can't initiate
|
|
|
|
* a synchronization
|
|
|
|
*/
|
2013-07-22 22:27:42 +04:00
|
|
|
virtual bool isBusy() const;
|
2011-09-27 10:15:30 +04:00
|
|
|
|
2011-10-13 18:41:24 +04:00
|
|
|
/**
|
|
|
|
* return the last sync result with error message and status
|
|
|
|
*/
|
2012-02-20 19:45:27 +04:00
|
|
|
SyncResult syncResult() const;
|
2012-02-19 00:21:58 +04:00
|
|
|
|
2012-11-22 15:29:50 +04:00
|
|
|
/**
|
|
|
|
* set the config file name.
|
|
|
|
*/
|
|
|
|
void setConfigFile( const QString& );
|
|
|
|
QString configFile();
|
|
|
|
|
2012-06-11 12:10:07 +04:00
|
|
|
/**
|
|
|
|
* This is called if the sync folder definition is removed. Do cleanups here.
|
|
|
|
*/
|
|
|
|
virtual void wipe();
|
|
|
|
|
2013-02-09 17:03:05 +04:00
|
|
|
signals:
|
|
|
|
void syncStateChange();
|
|
|
|
void syncStarted();
|
|
|
|
void syncFinished(const SyncResult &result);
|
|
|
|
void scheduleToSync( const QString& );
|
|
|
|
|
2011-11-04 14:41:49 +04:00
|
|
|
public slots:
|
|
|
|
void slotSyncFinished(const SyncResult &);
|
2012-04-30 10:56:56 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2012-02-20 19:45:27 +04:00
|
|
|
void slotChanged(const QStringList &pathList = QStringList() );
|
2011-11-04 14:41:49 +04:00
|
|
|
|
2012-04-30 10:56:56 +04:00
|
|
|
/**
|
|
|
|
* terminate the current sync run
|
|
|
|
*/
|
2013-07-22 22:27:42 +04:00
|
|
|
void slotTerminateSync();
|
2012-04-30 10:56:56 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
void slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool*);
|
2011-02-17 02:21:45 +03:00
|
|
|
|
2011-04-05 14:16:24 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
/**
|
|
|
|
* Starts a sync operation
|
|
|
|
*
|
|
|
|
* If the list of changed files is known, it is passed.
|
|
|
|
*/
|
|
|
|
void startSync(const QStringList &pathList = QStringList());
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void slotCSyncStarted();
|
|
|
|
void slotCSyncError(const QString& );
|
|
|
|
void slotCsyncUnavailable();
|
|
|
|
void slotCSyncFinished();
|
|
|
|
|
2013-07-31 00:22:04 +04:00
|
|
|
void slotTransmissionProgress(const Progress::Info& progress);
|
2013-02-09 17:03:05 +04:00
|
|
|
|
|
|
|
void slotPollTimerTimeout();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Triggered by a file system watcher on the local sync dir
|
|
|
|
*/
|
2013-07-22 22:27:42 +04:00
|
|
|
void slotLocalPathChanged( const QString& );
|
|
|
|
void slotThreadTreeWalkResult(const SyncFileItemVector& );
|
2013-02-09 17:03:05 +04:00
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
protected:
|
|
|
|
bool init();
|
|
|
|
|
|
|
|
void setSyncState(SyncResult::Status state);
|
|
|
|
|
|
|
|
void setIgnoredFiles();
|
|
|
|
void setProxy();
|
|
|
|
const char* proxyTypeToCStr(QNetworkProxy::ProxyType type);
|
2011-04-05 14:16:24 +04:00
|
|
|
|
2011-04-06 17:57:18 +04:00
|
|
|
/**
|
|
|
|
* Starts a sync (calling startSync)
|
|
|
|
* if the policies allow for it
|
|
|
|
*/
|
|
|
|
void evaluateSync(const QStringList &pathList);
|
|
|
|
|
2013-07-22 22:27:42 +04:00
|
|
|
void checkLocalPath();
|
2012-10-30 15:42:17 +04:00
|
|
|
|
2011-11-04 14:41:49 +04:00
|
|
|
QString _path;
|
2012-03-26 15:20:15 +04:00
|
|
|
QString _secondPath;
|
2011-11-04 14:41:49 +04:00
|
|
|
QString _alias;
|
2012-11-22 15:29:50 +04:00
|
|
|
QString _configFile;
|
2012-06-25 17:31:13 +04:00
|
|
|
QFileSystemWatcher *_pathWatcher;
|
2012-02-19 00:21:58 +04:00
|
|
|
bool _enabled;
|
2013-07-22 22:27:42 +04:00
|
|
|
FolderWatcher *_watcher;
|
|
|
|
SyncResult _syncResult;
|
|
|
|
QThread *_thread;
|
|
|
|
CSyncThread *_csync;
|
|
|
|
QStringList _errors;
|
|
|
|
bool _csyncError;
|
|
|
|
bool _csyncUnavail;
|
|
|
|
bool _wipeDb;
|
|
|
|
Progress::Kind _progressKind;
|
2013-08-05 19:01:08 +04:00
|
|
|
QTimer _pollTimer;
|
2013-07-22 22:27:42 +04:00
|
|
|
|
|
|
|
CSYNC *_csync_ctx;
|
2013-08-05 19:01:08 +04:00
|
|
|
|
2011-02-17 02:21:45 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|