[Pkg-owncloud-commits] [owncloud-client] 95/103: Support old server which do not have the x-oc-mtime support

Sandro Knauß hefee-guest at moszumanska.debian.org
Wed Apr 30 18:09:03 UTC 2014


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit 9193286fc11a6a135d6f6891906ffe1ae764032e
Author: Olivier Goffart <ogoffart at woboq.com>
Date:   Tue Apr 29 16:47:07 2014 +0200

    Support old server which do not have the x-oc-mtime support
    
    Owncloud 4.5
    Or owncloud 5 with chunking
    
    Fixes https://github.com/owncloud/core/issues/8392
---
 src/mirall/propagator_qnam.cpp | 18 ++++++++++++++----
 src/mirall/propagator_qnam.h   |  2 +-
 src/mirall/propagatorjobs.cpp  | 10 ++++++++++
 src/mirall/propagatorjobs.h    |  9 +++++++++
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/mirall/propagator_qnam.cpp b/src/mirall/propagator_qnam.cpp
index c53e4cb..67afa00 100644
--- a/src/mirall/propagator_qnam.cpp
+++ b/src/mirall/propagator_qnam.cpp
@@ -19,6 +19,7 @@
 #include "syncjournalfilerecord.h"
 #include "utility.h"
 #include "filesystem.h"
+#include "propagatorjobs.h"
 #include <QNetworkAccessManager>
 #include <QFileInfo>
 #include <cmath>
@@ -299,15 +300,24 @@ void PropagateUploadFileQNAM::slotPutFinished()
     }
 
     _item._etag = parseEtag(job->reply()->rawHeader("ETag"));
+    _item._responseTimeStamp = job->responseTimestamp();
 
     if (job->reply()->rawHeader("X-OC-MTime") != "accepted") {
-        //FIXME
-//             updateMTimeAndETag(uri.data(), _item._modtime);
-        done(SyncFileItem::NormalError, tr("No X-OC-MTime extension,  ownCloud 5 is required"));
+        // X-OC-MTime is supported since owncloud 5.0.   But not when chunking.
+        // Normaly Owncloud 6 always put X-OC-MTime
+        qDebug() << "Server do not support X-OC-MTime";
+        PropagatorJob *newJob = new UpdateMTimeAndETagJob(_propagator, _item);
+        QObject::connect(newJob, SIGNAL(completed(SyncFileItem)), this, SLOT(finalize()));
+        QMetaObject::invokeMethod(newJob, "start");
         return;
     }
+    finalize();
+}
+
+
+void PropagateUploadFileQNAM::finalize()
+{
     _item._requestDuration = _duration.elapsed();
-    _item._responseTimeStamp = _job->responseTimestamp();
 
     _propagator->_journal->setFileRecord(SyncJournalFileRecord(_item, _propagator->_localDir + _item._file));
     // Remove from the progress database:
diff --git a/src/mirall/propagator_qnam.h b/src/mirall/propagator_qnam.h
index 15d5bea..d5fa451 100644
--- a/src/mirall/propagator_qnam.h
+++ b/src/mirall/propagator_qnam.h
@@ -91,7 +91,7 @@ private slots:
     void slotUploadProgress(qint64,qint64);
     void abort();
     void startNextChunk();
-
+    void finalize();
 };
 
 
diff --git a/src/mirall/propagatorjobs.cpp b/src/mirall/propagatorjobs.cpp
index d9fbb02..660aec3 100644
--- a/src/mirall/propagatorjobs.cpp
+++ b/src/mirall/propagatorjobs.cpp
@@ -322,5 +322,15 @@ bool PropagateNeonJob::updateErrorFromSession(int neon_code, ne_request* req, in
     return false;
 }
 
+void UpdateMTimeAndETagJob::start()
+{
+    QScopedPointer<char, QScopedPointerPodDeleter> uri2(
+        ne_path_escape((_propagator->_remoteDir + _item._renameTarget).toUtf8()));
+    if (!updateMTimeAndETag(uri2.data(), _item._modtime))
+        return;
+    done(SyncFileItem::Success);
+}
+
+
 
 }
diff --git a/src/mirall/propagatorjobs.h b/src/mirall/propagatorjobs.h
index 6505206..3b77e24 100644
--- a/src/mirall/propagatorjobs.h
+++ b/src/mirall/propagatorjobs.h
@@ -108,4 +108,13 @@ public:
 };
 
 
+// To support older owncloud in the
+class UpdateMTimeAndETagJob : public PropagateNeonJob{
+    Q_OBJECT
+public:
+    UpdateMTimeAndETagJob (OwncloudPropagator* propagator, const SyncFileItem& item)  : PropagateNeonJob(propagator, item) {}
+    void start();
+};
+
+
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list