From 0f72564140d0a8398d5874a814fdc93aa5d64381 Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <torsten@ลง3r.de>
Date: Tue, 3 Mar 2015 17:10:16 +0100
Subject: [PATCH] Use the pagedPathForHistory in the FlightHistoryUriHandler

---
 src/Network/http/FlightHistoryUriHandler.cxx | 35 +++++++++++++++++---
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/Network/http/FlightHistoryUriHandler.cxx b/src/Network/http/FlightHistoryUriHandler.cxx
index c4654ee88..615b04996 100644
--- a/src/Network/http/FlightHistoryUriHandler.cxx
+++ b/src/Network/http/FlightHistoryUriHandler.cxx
@@ -25,6 +25,7 @@
 #include <Aircraft/FlightHistory.hxx>
 #include <Main/fg_props.hxx>
 #include <sstream>
+#include <boost/lexical_cast.hpp>
 
 using std::string;
 using std::stringstream;
@@ -45,7 +46,17 @@ namespace http {
 }
 */
 
-static string FlightHistoryToJson(const SGGeodVec & history) {
+static const char * errorPage =
+		"<html><head><title>Flight History</title></head><body>"
+		"<h1>Flight History</h1>"
+		"Supported formats:"
+		"<ul>"
+		"<li><a href='track.json'>JSON</a></li>"
+		"<li><a href='track.kml'>KML</a></li>"
+		"</ul>"
+		"</body></html>";
+
+static string FlightHistoryToJson(const SGGeodVec & history, size_t last_seen ) {
 	cJSON * feature = cJSON_CreateObject();
 	cJSON_AddItemToObject(feature, "type", cJSON_CreateString("Feature"));
 
@@ -54,6 +65,8 @@ static string FlightHistoryToJson(const SGGeodVec & history) {
 
 	cJSON * properties = cJSON_CreateObject();
 	cJSON_AddItemToObject(feature, "properties", properties );
+	cJSON_AddItemToObject(properties, "type", cJSON_CreateString("FlightHistory"));
+	cJSON_AddItemToObject(properties, "last", cJSON_CreateNumber(last_seen));
 
 	cJSON_AddItemToObject(lineString, "type", cJSON_CreateString("LineString"));
 	cJSON * coordinates = cJSON_CreateArray();
@@ -272,14 +285,26 @@ bool FlightHistoryUriHandler::handleRequest(const HTTPRequest & request,
 				history->pathForHistory(minEdgeLengthM), request);
 
 	} else if (requestPath == "track.json") {
+		size_t count = -1;
+		try {
+		  count = boost::lexical_cast<size_t>(request.RequestVariables.get("count"));
+		}
+		catch( ... ) {
+		}
+		size_t last = 0;
+		try {
+			last = boost::lexical_cast<size_t>(request.RequestVariables.get("last"));
+		}
+		catch( ... ) {
+		}
+
 		response.Header["Content-Type"] = "application/json; charset=UTF-8";
-		response.Content = FlightHistoryToJson(
-				history->pathForHistory(minEdgeLengthM));
+		PagedPathForHistory_ptr h = history->pagedPathForHistory( count, last );
+		response.Content = FlightHistoryToJson( h->path, h->last_seen );
 
 	} else {
 		response.Header["Content-Type"] = "text/html";
-		response.StatusCode = 404;
-		response.Content = "<html><head><title>Not found!</title></head><body>404</body></html>";
+		response.Content = errorPage;
 	}
 
 	return true;