From 685bf395be87c46ead7b8ee269560902d82fff2e Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 6 May 2013 18:41:56 +0200 Subject: [PATCH] propagator-ng: resume uploads Currently i think it corrupt the files --- src/mirall/owncloudpropagator.cpp | 33 ++++++++++++++++--------------- src/mirall/progressdatabase.h | 2 +- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/mirall/owncloudpropagator.cpp b/src/mirall/owncloudpropagator.cpp index 7d1db4666..f54b2ef91 100644 --- a/src/mirall/owncloudpropagator.cpp +++ b/src/mirall/owncloudpropagator.cpp @@ -210,20 +210,17 @@ csync_instructions_e OwncloudPropagator::uploadFile(const SyncFileItem &item) Q_ASSERT(trans); state = hbf_splitlist(trans.data(), file.handle()); - //FIXME TODO -#if 0 - /* Reuse chunk info that was stored in database if existing. */ - if (dav_session.chunk_info && dav_session.chunk_info->transfer_id) { - DEBUG_WEBDAV("Existing chunk info %d %d ", dav_session.chunk_info->start_id, dav_session.chunk_info->transfer_id); - trans->start_id = dav_session.chunk_info->start_id; - trans->transfer_id = dav_session.chunk_info->transfer_id; + if (const ProgressDatabase::UploadInfo* progressInfo = _progressDb->getUploadInfo(item._file)) { + if (progressInfo->mtime == item._modtime) { + trans->start_id = progressInfo->chunk; + trans->transfer_id = progressInfo->transferid; + } + _progressDb->remove(item._file); } - if (state == HBF_SUCCESS && _progresscb) { - ne_set_notifier(dav_session.ctx, ne_notify_status_cb, write_ctx); - _progresscb(write_ctx->url, CSYNC_NOTIFY_START_UPLOAD, 0 , 0, dav_session.userdata); - } -#endif + //TODO + //ne_set_notifier(dav_session.ctx, ne_notify_status_cb, write_ctx); + if( state == HBF_SUCCESS ) { //chunked_total_size = trans->stat_size; /* Transfer all the chunks through the HTTP session using PUT. */ @@ -245,10 +242,14 @@ csync_instructions_e OwncloudPropagator::uploadFile(const SyncFileItem &item) if( finished ) { _errorString = hbf_error_string(state); _httpStatusCode = hbf_fail_http_code(trans.data()); -// if (dav_session.chunk_info) { -// dav_session.chunk_info->start_id = trans->start_id; -// dav_session.chunk_info->transfer_id = trans->transfer_id; -// } + + if (trans->start_id > 0) { + ProgressDatabase::UploadInfo pi; + pi.chunk = trans->start_id; + pi.transferid = trans->transfer_id; + pi.mtime = item._modtime; + _progressDb->setUploadInfo(item._file, pi); + } return CSYNC_INSTRUCTION_ERROR; } } diff --git a/src/mirall/progressdatabase.h b/src/mirall/progressdatabase.h index 69997383a..dd1f39f16 100644 --- a/src/mirall/progressdatabase.h +++ b/src/mirall/progressdatabase.h @@ -33,7 +33,7 @@ public: struct UploadInfo { int chunk; int transferid; - quint64 size; + quint64 size; //currently unused time_t mtime; }; typedef QHash UploadInfoHash;