summaryrefslogtreecommitdiff
path: root/http_json.cpp
blob: d769e5e42fe72866b57c38add2de94e6e9b684e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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);
}