66 cJSON * json = cJSON_CreateObject();
68 cJSON_AddItemToObject(json,
"id", cJSON_CreateString(
p->id().c_str() ));
69 cJSON_AddItemToObject(json,
"name", cJSON_CreateString(
p->name().c_str() ));
70 cJSON_AddItemToObject(json,
"description", cJSON_CreateString(
p->description().c_str() ));
71 cJSON_AddItemToObject(json,
"installed", cJSON_CreateBool(
p->isInstalled() ));
72 cJSON_AddItemToObject(json,
"thumbnails",
StringListToJson(
p->thumbnailUrls() ));
74 cJSON_AddItemToObject(json,
"revision", cJSON_CreateNumber(
p->revision() ));
75 cJSON_AddItemToObject(json,
"fileSize", cJSON_CreateNumber(
p->fileSizeBytes() ));
76 cJSON_AddItemToObject(json,
"author", cJSON_CreateString(
p->getLocalisedProp(
"author").c_str() ));
77 cJSON_AddItemToObject(json,
"ratingFdm", cJSON_CreateString(
p->getLocalisedProp(
"rating/FDM").c_str() ));
78 cJSON_AddItemToObject(json,
"ratingCockpit", cJSON_CreateString(
p->getLocalisedProp(
"rating/cockpit").c_str() ));
79 cJSON_AddItemToObject(json,
"ratingModel", cJSON_CreateString(
p->getLocalisedProp(
"rating/model").c_str() ));
80 cJSON_AddItemToObject(json,
"ratingSystems", cJSON_CreateString(
p->getLocalisedProp(
"rating/systems").c_str() ));
96 cJSON * json = cJSON_CreateObject();
98 cJSON_AddItemToObject(json,
"id", cJSON_CreateString( c->id().c_str() ));
99 std::string s = c->installRoot().utf8Str();
100 cJSON_AddItemToObject(json,
"installRoot", cJSON_CreateString( s.c_str() ));
101 cJSON_AddItemToObject(json,
"url", cJSON_CreateString( c->url().c_str() ));
102 cJSON_AddItemToObject(json,
"description", cJSON_CreateString( c->description().c_str() ));
104 cJSON_AddItemToObject(json,
"needingUpdate",
PackageListToJson(c->packagesNeedingUpdate()) );
105 cJSON_AddItemToObject(json,
"installed",
PackageListToJson(c->installedPackages()) );
113 cJSON * json = cJSON_CreateObject();
116 std::string
p = packageRoot->path().utf8Str();
117 cJSON_AddItemToObject(json,
"path", cJSON_CreateString(
p.c_str() ));
119 }
else if(
command ==
"version" ) {
121 cJSON_AddItemToObject(json,
"version", cJSON_CreateString( packageRoot->applicationVersion().c_str() ));
123 }
else if(
command ==
"refresh" ) {
124 packageRoot->refresh(
true);
125 cJSON_AddItemToObject(json,
"refresh", cJSON_CreateString(
"OK" ));
127 }
else if(
command ==
"catalogs" ) {
129 cJSON * jsonArray = cJSON_CreateArray();
130 simgear::pkg::CatalogList catalogList = packageRoot->catalogs();
131 for( simgear::pkg::CatalogList::iterator it = catalogList.begin(); it != catalogList.end(); ++it ) {
134 cJSON_AddItemToObject(json,
"catalogs", jsonArray );
136 }
else if(
command ==
"packageById" ) {
138 simgear::pkg::PackageRef
p = packageRoot->getPackageById(args);
141 }
else if(
command ==
"catalogById" ) {
143 simgear::pkg::CatalogRef
p = packageRoot->getCatalogById(args);
146 }
else if(
command ==
"search" ) {
148 SGPropertyNode_ptr query(
new SGPropertyNode);
149 simgear::pkg::PackageList packageList = packageRoot->packagesMatching(query);
152 }
else if(
command ==
"install" ) {
154 simgear::pkg::PackageRef
package = packageRoot->getPackageById(args);
155 if( NULL == package ) {
156 SG_LOG(SG_NETWORK,SG_WARN,
"Can't install package '" << args <<
"', package not found" );
157 cJSON_Delete( json );
160 package->existingInstall();
163 SG_LOG( SG_NETWORK,SG_WARN,
"Unhandled pkg command : '" <<
command <<
"'" );
164 cJSON_Delete( json );
168 char * jsonString = cJSON_PrintUnformatted( json );
169 string reply(jsonString);
171 cJSON_Delete( json );
185 response.
Header[
"Content-Type"] =
"application/json; charset=UTF-8";
186 response.
Header[
"Access-Control-Allow-Origin"] =
"*";
187 response.
Header[
"Access-Control-Allow-Methods"] =
"OPTIONS, GET, POST";
188 response.
Header[
"Access-Control-Allow-Headers"] =
"Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token";
190 if( request.
Method ==
"OPTIONS" ){
194 simgear::pkg::Root* packageRoot =
globals->packageRoot();
195 if( NULL == packageRoot ) {
196 SG_LOG( SG_NETWORK,SG_WARN,
"NO PackageRoot" );
206 SG_LOG(SG_NETWORK,SG_INFO,
"Request is for command '" <<
command <<
"' with arg='" << argString <<
"'" );
208 if( request.
Method ==
"GET" ){
209 }
else if( request.
Method ==
"POST" ) {
211 SG_LOG(SG_NETWORK,SG_INFO,
"PkgUriHandler: invalid request method '" << request.
Method <<
"'" );
212 response.
Header[
"Allow"] =
"OPTIONS, GET, POST";
219 if( response.
Content.empty() ) {