From a0f327140c4068afd46b264d24f767c4dd3d0f40 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Thu, 4 Aug 2011 21:54:38 +0200 Subject: Implemented JSON list handler. --- http_json.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 http_json.cpp (limited to 'http_json.cpp') 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); +} -- cgit v1.2.3