Add an overall progress counter to progressDispatcher

This commit is contained in:
Klaas Freitag 2013-07-19 13:05:30 +02:00
parent 5fa7e48c24
commit 992dffa032
6 changed files with 50 additions and 18 deletions

View file

@ -315,7 +315,8 @@ void CSyncThread::startSync()
// cleans up behind us and emits finished() to ease error handling
CSyncRunScopeHelper helper(_csync_ctx, this);
csync_set_progress_callback( _csync_ctx, cb_progress );
csync_set_file_progress_callback( _csync_ctx, cb_file_progress );
csync_set_overall_progress_callback( _csync_ctx, cb_overall_progress );
csync_set_module_property(_csync_ctx, "csync_context", _csync_ctx);
csync_set_userdata(_csync_ctx, this);
@ -387,8 +388,8 @@ void CSyncThread::startSync()
qDebug() << Q_FUNC_INFO << "Sync finished";
}
void CSyncThread::cb_progress(const char *remote_url, enum csync_notify_type_e kind,
long long o1, long long o2, void *userdata)
void CSyncThread::cb_file_progress(const char *remote_url, enum csync_notify_type_e kind,
long long o1, long long o2, void *userdata)
{
QString path = QUrl::fromEncoded(remote_url).toString();
CSyncThread *thread = static_cast<CSyncThread*>(userdata);
@ -396,18 +397,30 @@ void CSyncThread::cb_progress(const char *remote_url, enum csync_notify_type_e k
if (kind == CSYNC_NOTIFY_FINISHED_DOWNLOAD) {
thread->fileReceived(path);
} else if( kind == CSYNC_NOTIFY_START_UPLOAD ) {
thread->transmissionProgress( Progress::StartUpload, path, (long)0, (long)0 ); // indicate the upload start.
thread->fileTransmissionProgress( Progress::StartUpload, path, (long)0, (long)0 ); // indicate the upload start.
} else if( kind == CSYNC_NOTIFY_PROGRESS ) {
thread->transmissionProgress( Progress::Context, path, o1, o2 );
thread->fileTransmissionProgress( Progress::Context, path, o1, o2 );
} else if( kind == CSYNC_NOTIFY_FINISHED_UPLOAD ) {
thread->transmissionProgress( Progress::EndUpload, path, o2, o2 );
thread->fileTransmissionProgress( Progress::EndUpload, path, o2, o2 );
} else if( kind == CSYNC_NOTIFY_START_DOWNLOAD ) {
thread->transmissionProgress( Progress::StartDownload, path, 0, 0 );
thread->fileTransmissionProgress( Progress::StartDownload, path, 0, 0 );
} else if( kind == CSYNC_NOTIFY_FINISHED_DOWNLOAD ) {
thread->transmissionProgress( Progress::EndDownload, path, o2, o2 );
thread->fileTransmissionProgress( Progress::EndDownload, path, o2, o2 );
}
}
void CSyncThread::cb_overall_progress(const char *file_name, int file_no, int file_cnt,
long long o1, long long o2, void *userdata)
{
QString file = QUrl::fromEncoded(file_name).toString();
CSyncThread *thread = static_cast<CSyncThread*>(userdata);
if(thread) {
thread->overallTransmissionProgress( file, file_no, file_cnt, o1, o2 );
}
}
void CSyncThread::setLastAuthCookies(QList<QNetworkCookie> c)
{
_lastAuthCookies = c;

View file

@ -54,8 +54,8 @@ signals:
void csyncUnavailable();
void treeWalkResult(const SyncFileItemVector&);
void transmissionProgress( Progress::Kind, const QString&, long, long);
void fileTransmissionProgress( Progress::Kind, const QString&, long, long);
void overallTransmissionProgress( const QString& file, int file_no, int file_cnt, long long o1, long long o2 );
void csyncStateDbFile( const QString& );
void wipeDb();
@ -66,10 +66,12 @@ signals:
private:
void handleSyncError(CSYNC *ctx, const char *state);
static void cb_progress(const char *remote_url,
enum csync_notify_type_e kind,
long long o1, long long o2,
void *userdata);
static void cb_file_progress(const char *remote_url,
enum csync_notify_type_e kind,
long long o1, long long o2,
void *userdata);
static void cb_overall_progress(const char *file_name, int file_no,
int file_cnt, long long o1, long long o2, void *userdata);
static int treewalkLocal( TREE_WALK_FILE*, void *);
static int treewalkRemote( TREE_WALK_FILE*, void *);

View file

@ -316,8 +316,11 @@ void ownCloudFolder::startSync(const QStringList &pathList)
//blocking connection so the message box happens in this thread, but block the csync thread.
connect(_csync, SIGNAL(aboutToRemoveAllFiles(SyncFileItem::Direction,bool*)),
SLOT(slotAboutToRemoveAllFiles(SyncFileItem::Direction,bool*)), Qt::BlockingQueuedConnection);
connect(_csync, SIGNAL(transmissionProgress(Progress::Kind, QString,long,long)),
SLOT(slotTransmissionProgress(Progress::Kind, QString,long,long)));
connect(_csync, SIGNAL(fileTransmissionProgress(Progress::Kind, QString,long,long)),
SLOT(slotFileTransmissionProgress(Progress::Kind, QString,long,long)));
connect(_csync, SIGNAL(overallTransmissionProgress(QString, int, int, long long, long long)),
SLOT(slotOverallTransmissionProgress(QString, int, int, long long, long long)));
_thread->start();
QMetaObject::invokeMethod(_csync, "startSync", Qt::QueuedConnection);
@ -422,7 +425,7 @@ void ownCloudFolder::slotLocalPathChanged( const QString& dir )
}
}
void ownCloudFolder::slotTransmissionProgress(Progress::Kind kind, const QString& file ,long p1, long p2)
void ownCloudFolder::slotFileTransmissionProgress(Progress::Kind kind, const QString& file ,long p1, long p2)
{
if( kind == Progress::StartDownload ) {
_progressKind = Progress::Download;
@ -439,6 +442,12 @@ void ownCloudFolder::slotTransmissionProgress(Progress::Kind kind, const QString
}
}
void ownCloudFolder::slotOverallTransmissionProgress( const QString& fileName, int fileNo, int fileCnt,
long long o1, long long o2)
{
ProgressDispatcher::instance()->setOverallProgress( fileName, fileNo, fileCnt, qlonglong(o1), qlonglong(o2));
}
// This removes the csync File database if the sync folder definition is removed
// permanentely. This is needed to provide a clean startup again in case another

View file

@ -89,7 +89,8 @@ private slots:
void slotCsyncUnavailable();
void slotCSyncFinished();
void slotTransmissionProgress(Progress::Kind, const QString&,long, long);
void slotFileTransmissionProgress(Progress::Kind, const QString&,long, long);
void slotOverallTransmissionProgress( const QString&, int, int, long long, long long);
private:
void setIgnoredFiles();

View file

@ -80,4 +80,9 @@ void ProgressDispatcher::setFolderProgress( Progress::Kind kind, const QString&
emit folderProgress( kind, alias, file, p1, p2 );
}
void ProgressDispatcher::setOverallProgress( const QString& file, int fileNo, int fileCnt, qlonglong o1, qlonglong o2 )
{
emit overallProgress( file, fileNo, fileCnt, o1, o2 );
}
}

View file

@ -49,9 +49,11 @@ public:
public:
void setFolderProgress( Progress::Kind, const QString&, const QString&, long, long );
void setOverallProgress( const QString&, int, int, qlonglong, qlonglong);
signals:
void folderProgress( Progress::Kind, const QString&, const QString&, long, long );
void overallProgress(const QString&, int, int, qlonglong, qlonglong );
public slots: