summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2026-01-24 17:25:23 +0100
committerCarl Hetherington <cth@carlh.net>2026-02-16 01:20:38 +0100
commitc673db62163a853153b84e3c1cb539acf1d4f555 (patch)
treeabd26af4056eb59b837df5894b6fe78d1054ec53
parent7178de40ac9de75a8650213b22b1b94552c15f43 (diff)
Add playlist DELETE endpoint.
-rw-r--r--src/lib/http_server.cc38
-rw-r--r--src/lib/http_server.h5
2 files changed, 37 insertions, 6 deletions
diff --git a/src/lib/http_server.cc b/src/lib/http_server.cc
index 23ac8241d..17f7d3cbe 100644
--- a/src/lib/http_server.cc
+++ b/src/lib/http_server.cc
@@ -97,7 +97,7 @@ Response::send(shared_ptr<Socket> socket)
Response
-HTTPServer::get(string const& url)
+HTTPServer::get_request(string const& url)
{
if (url == "/") {
auto page = dcp::file_to_string(resources_path() / "web" / "index.html");
@@ -200,7 +200,7 @@ HTTPServer::get(string const& url)
Response
-HTTPServer::post(string const& url, string const& body)
+HTTPServer::post_request(string const& url, string const& body)
{
if (url == "/api/v1/play") {
emit(boost::bind(boost::ref(Play)));
@@ -212,6 +212,11 @@ HTTPServer::post(string const& url, string const& body)
auto response = Response(303);
response.add_header("Location", "/");
return response;
+ } else if (url == "/api/v1/playlists") {
+ ShowPlaylist playlist("New Playlist");
+ ShowPlaylistList list;
+ list.add_show_playlist(playlist);
+ return Response(200);
} else if (boost::algorithm::starts_with(url, "/api/v1/playlist/")) {
vector<string> parts;
boost::algorithm::split(parts, url, boost::is_any_of("/"));
@@ -248,6 +253,28 @@ HTTPServer::post(string const& url, string const& body)
Response
+HTTPServer::delete_request(string const& url)
+{
+ if (boost::algorithm::starts_with(url, "/api/v1/playlist/")) {
+ vector<string> parts;
+ boost::algorithm::split(parts, url, boost::is_any_of("/"));
+ if (parts.size() != 5) {
+ return Response::ERROR_404;
+ }
+ ShowPlaylistList list;
+ auto playlist_id = list.get_show_playlist_id(parts[4]);
+ if (!playlist_id) {
+ return Response::ERROR_404;
+ }
+ list.remove_show_playlist(*playlist_id);
+ return Response(200);
+ }
+
+ return Response::ERROR_404;
+}
+
+
+Response
HTTPServer::request(vector<string> const& request, string const& body)
{
vector<string> parts;
@@ -259,10 +286,13 @@ HTTPServer::request(vector<string> const& request, string const& body)
try {
if (parts[0] == "GET") {
LOG_HTTP("GET {}", parts[1]);
- return get(parts[1]);
+ return get_request(parts[1]);
} else if (parts[0] == "POST") {
LOG_HTTP("POST {}", parts[1]);
- return post(parts[1], body);
+ return post_request(parts[1], body);
+ } else if (parts[0] == "DELETE") {
+ LOG_HTTP("DELETE {}", parts[1]);
+ return delete_request(parts[1]);
}
} catch (std::exception& e) {
LOG_ERROR("Error while handling HTTP request: {}", e.what());
diff --git a/src/lib/http_server.h b/src/lib/http_server.h
index b07ec47b1..982fb4d9a 100644
--- a/src/lib/http_server.h
+++ b/src/lib/http_server.h
@@ -83,8 +83,9 @@ public:
private:
void handle(std::shared_ptr<Socket> socket) override;
Response request(std::vector<std::string> const& request, std::string const& body);
- Response get(std::string const& url);
- Response post(std::string const& url, std::string const& body);
+ Response get_request(std::string const& url);
+ Response post_request(std::string const& url, std::string const& body);
+ Response delete_request(std::string const& url);
boost::mutex _mutex;
bool _playing = false;