diff options
| author | Carl Hetherington <cth@carlh.net> | 2026-01-24 17:25:23 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2026-02-16 01:20:38 +0100 |
| commit | c673db62163a853153b84e3c1cb539acf1d4f555 (patch) | |
| tree | abd26af4056eb59b837df5894b6fe78d1054ec53 | |
| parent | 7178de40ac9de75a8650213b22b1b94552c15f43 (diff) | |
Add playlist DELETE endpoint.
| -rw-r--r-- | src/lib/http_server.cc | 38 | ||||
| -rw-r--r-- | src/lib/http_server.h | 5 |
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; |
