Browse Source

Added support for modification time in xnat

Andreas Fetzer 11 years ago
parent
commit
27c8beffc9

+ 15 - 0
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -25,6 +25,7 @@
 #include "ctkXnatSession.h"
 #include "ctkXnatDataModel.h"
 
+#include <QDateTime>
 #include <QDebug>
 #include <QVariant>
 
@@ -103,6 +104,20 @@ QString ctkXnatObject::childDataType() const
   return "Resources";
 }
 
+QDateTime ctkXnatObject::lastModifiedTime() const
+{
+  return this->session()->lastModified(this->resourceUri());
+}
+
+void ctkXnatObject::setLastModifiedTime(const QDateTime &lastModifiedTime)
+{
+  Q_D(ctkXnatObject);
+  if (d->lastModifedTime < lastModifiedTime)
+  {
+    d->lastModifedTime = lastModifiedTime;
+  }
+}
+
 //----------------------------------------------------------------------------
 QString ctkXnatObject::property(const QString& name) const
 {

+ 6 - 0
Libs/XNAT/Core/ctkXnatObject.h

@@ -76,6 +76,12 @@ public:
   /// Sets the value of the property with the given name.
   void setProperty(const QString& name, const QVariant& value);
 
+  /// Gets the last modification time from the server
+  QDateTime lastModifiedTime() const;
+
+  /// Sets the last modfication time on the server
+  void setLastModifiedTime(const QDateTime& lastModifiedTime);
+
   /// Gets the properties of the object.
   const QMap<QString, QString>& properties() const;
 

+ 3 - 0
Libs/XNAT/Core/ctkXnatObjectPrivate.h

@@ -22,6 +22,7 @@
 #ifndef CTKXNATOBJECTPRIVATE_H
 #define CTKXNATOBJECTPRIVATE_H
 
+#include <QDateTime>
 #include <QMap>
 #include <QString>
 
@@ -48,6 +49,8 @@ private:
 
   QList<ctkXnatObject*> children;
 
+  QDateTime lastModifedTime;
+
   bool fetched;
 
   ctkXnatObject* parent;

+ 16 - 1
Libs/XNAT/Core/ctkXnatSession.cpp

@@ -37,11 +37,12 @@
 #include "ctkXnatSubject.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
+#include <QDateTime>
 #include <QDebug>
 #include <QScopedPointer>
 #include <QStringBuilder>
 #include <QNetworkCookie>
-#include <QDateTime>
+#include <QNetworkRequest>
 
 #include <ctkXnatAPI_p.h>
 #include <qRestResult.h>
@@ -285,6 +286,14 @@ QList<ctkXnatObject*> ctkXnatSessionPrivate::results(qRestResult* restResult, QS
       object->setProperty(it.key().toLatin1().data(), it.value());
     }
 
+    QVariant lastModifiedHeader = restResult->rawHeader("Last-Modified");
+    QDateTime lastModifiedTime;
+    if (lastModifiedHeader.isValid())
+    {
+      lastModifiedTime = lastModifiedHeader.toDateTime();
+    }
+    object->setProperty("Last-Modified", lastModifiedTime);
+
     results.push_back(object);
   }
   return results;
@@ -551,6 +560,12 @@ void ctkXnatSession::remove(ctkXnatObject* object)
   }
 }
 
+const QDateTime ctkXnatSession::lastModified(const QString& resourceUri)
+{
+  Q_D(ctkXnatSession);
+  return d->xnat->head(resourceUri, QNetworkRequest::LastModifiedHeader).toDateTime();
+}
+
 //----------------------------------------------------------------------------
 //void ctkXnatSession::create(ctkXnatSubject* subject)
 //{

+ 2 - 0
Libs/XNAT/Core/ctkXnatSession.h

@@ -189,6 +189,8 @@ public:
   void download(ctkXnatScanResource* scanResource, const QString& zipFileName);
   void download(ctkXnatReconstructionResource* reconstructionResource, const QString& zipFileName);
 
+  const QDateTime lastModified(const QString& resourceUri);
+
 //  void downloadReconstruction(ctkXnatReconstruction* reconstruction, const QString& zipFilename);
 
 //  void downloadReconstructionResourceFiles(ctkXnatReconstructionResource* reconstructionResource, const QString& zipFilename);