diff --git a/src/mirall/csyncthread.cpp b/src/mirall/csyncthread.cpp index e2947eba9..e95584ef4 100644 --- a/src/mirall/csyncthread.cpp +++ b/src/mirall/csyncthread.cpp @@ -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(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(userdata); + + if(thread) { + thread->overallTransmissionProgress( file, file_no, file_cnt, o1, o2 ); + } + +} + void CSyncThread::setLastAuthCookies(QList c) { _lastAuthCookies = c; diff --git a/src/mirall/csyncthread.h b/src/mirall/csyncthread.h index 2ed71f8fb..83347fdac 100644 --- a/src/mirall/csyncthread.h +++ b/src/mirall/csyncthread.h @@ -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 *); diff --git a/src/mirall/owncloudfolder.cpp b/src/mirall/owncloudfolder.cpp index cd18b379c..456093dfb 100644 --- a/src/mirall/owncloudfolder.cpp +++ b/src/mirall/owncloudfolder.cpp @@ -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 diff --git a/src/mirall/owncloudfolder.h b/src/mirall/owncloudfolder.h index 14badb8f4..dc4b2f46f 100644 --- a/src/mirall/owncloudfolder.h +++ b/src/mirall/owncloudfolder.h @@ -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(); diff --git a/src/mirall/progressdispatcher.cpp b/src/mirall/progressdispatcher.cpp index 82d930c3f..4c7e3d778 100644 --- a/src/mirall/progressdispatcher.cpp +++ b/src/mirall/progressdispatcher.cpp @@ -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 ); +} + } diff --git a/src/mirall/progressdispatcher.h b/src/mirall/progressdispatcher.h index 2dc73d93a..d47610272 100644 --- a/src/mirall/progressdispatcher.h +++ b/src/mirall/progressdispatcher.h @@ -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: