diff OrthancServer/DatabaseWrapper.cpp @ 204:7f4acf490179

changes api
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 28 Nov 2012 11:27:57 +0100
parents 9283552c25df
children 6ab754744446
line wrap: on
line diff
--- a/OrthancServer/DatabaseWrapper.cpp	Tue Nov 27 17:50:24 2012 +0100
+++ b/OrthancServer/DatabaseWrapper.cpp	Wed Nov 28 11:27:57 2012 +0100
@@ -515,6 +515,43 @@
   }
 
 
+  void DatabaseWrapper::GetChanges(Json::Value& target,
+                                   int64_t since,
+                                   unsigned int maxResults)
+  {
+    SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT * FROM Changes WHERE seq>? ORDER BY seq LIMIT ?");
+    s.BindInt(0, since);
+    s.BindInt(1, maxResults + 1);
+
+    Json::Value changes = Json::arrayValue;
+    int64_t last = 0;
+
+    while (changes.size() < maxResults && s.Step())
+    {
+      int64_t seq = s.ColumnInt(0);
+      ChangeType changeType = static_cast<ChangeType>(s.ColumnInt(1));
+      int64_t internalId = s.ColumnInt(2);
+      ResourceType resourceType = static_cast<ResourceType>(s.ColumnInt(3));
+      const std::string& date = s.ColumnString(4);
+
+      Json::Value item = Json::objectValue;
+      item["Seq"] = static_cast<int>(seq);
+      item["ChangeType"] = ToString(changeType);
+      item["ResourceType"] = ToString(resourceType);
+      item["ID"] = GetPublicId(internalId);
+      item["Date"] = date;
+      last = seq;
+
+      changes.append(item);
+    }
+
+    target = Json::objectValue;
+    target["Changes"] = changes;
+    target["PendingChanges"] = (changes.size() == maxResults && s.Step());
+    target["LastSeq"] = static_cast<int>(last);
+  }
+
+
   void DatabaseWrapper::LogExportedInstance(const std::string& remoteModality,
                                             DicomInstanceHasher& hasher,
                                             const boost::posix_time::ptime& date)