summaryrefslogtreecommitdiff
path: root/http_json.cpp
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2011-08-04 21:54:38 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2011-08-04 21:54:38 +0200
commita0f327140c4068afd46b264d24f767c4dd3d0f40 (patch)
tree13c0ccf3e9a56d91fa61c0252d32168b90a78260 /http_json.cpp
parentca1fc859f27560c7988f078cff89f40f1b6e2c0f (diff)
Implemented JSON list handler.HEADmaster
Diffstat (limited to 'http_json.cpp')
-rw-r--r--http_json.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/http_json.cpp b/http_json.cpp
new file mode 100644
index 0000000..d769e5e
--- /dev/null
+++ b/http_json.cpp
@@ -0,0 +1,34 @@
+#include "http_json.h"
+#include "json.h"
+#include "music.h"
+
+void HTTP::JSON::operator()(Connection::p connection) {
+ std::string directory;
+ if(connection->args.find("directory") != connection->args.end()) {
+ directory = connection->args["directory"];
+ } else {
+ directory = "/";
+ }
+
+ ::JSON::Array results;
+
+ MusicDirectory::p dir = music::get_directory(directory);
+ for(MusicDirectory::PathListings::iterator it = dir->directories.begin(); it != dir->directories.end(); it++) {
+ ::JSON::Object obj;
+ obj["type"] = std::string("dir");
+ // relative path
+ obj["name"] = it->string().substr(music::root_directory.string().size());
+ results.push_back(obj);
+ }
+ for(MusicDirectory::PathListings::iterator it = dir->tracks.begin(); it != dir->tracks.end(); it++) {
+ ::JSON::Object obj;
+ obj["type"] = std::string("file");
+ obj["name"] = it->string().substr(music::root_directory.string().size());
+ obj["size"] = (int)fs::file_size(*it);
+ results.push_back(obj);
+ }
+
+ std::stringstream ss;
+ ss << results;
+ connection->send_data(ss);
+}