#ifndef _TR_SESSION_HPP_ #define _TR_SESSION_HPP_ #include #include namespace tr { namespace session { template void get(torrent_session &session, response resp, request req) { auto http_response = http::response(); if (session.is_valid()) { const auto settings = session.get_settings(); http_response.set_body({ {"paused", session.is_paused()}, {"port", session.listen_port()}, {"dht_enabled", session.is_dht_running()}, {"down_limit", settings.get_int(settings.download_rate_limit)}, {"up_limit", settings.get_int(settings.upload_rate_limit)}, {"torrents", session.get_torrents().size()}, //TODO Optimize // { "default_download_dir", default_download_dir.filename().string() }, // { "root_dir", root_dir.string() }, }); } else { auto response_code = http::code(http::service_unavailable); http_response.set_body({{"code", response_code.first}, {"status", response_code.second}}); http_response.set_status(response_code.first); } *resp << http_response; } template void patch(torrent_session &session, response resp, request req) { auto http_response = http::response(); if (!session.is_valid()) { auto response_code = http::code(http::service_unavailable); http_response.set_body({{"code", response_code.first}, {"status", response_code.second}}); http_response.set_status(response_code.first); } else { const auto json = util::json::parse(req->content); if (json.is_object() && !json.is_null()) { if (util::json::get("paused", json, session.is_paused())) session.pause(); else session.resume(); auto settings = session.get_settings(); const auto new_listen_port = util::json::get("port", json, session.listen_port()); if (new_listen_port != session.listen_port()) settings.set_str(settings.listen_interfaces, "0.0.0.0:" + std::to_string(new_listen_port)); const auto new_dht_enabled = util::json::get("dht_enabled", json, session.is_dht_running()); if (new_dht_enabled != session.is_dht_running()) settings.set_bool(settings.enable_dht, new_dht_enabled); auto old_limit = settings.get_int(settings.download_rate_limit); auto new_limit = util::json::get("down_limit", json, old_limit); if (new_limit != old_limit) settings.set_int(settings.download_rate_limit, new_limit); old_limit = settings.get_int(settings.upload_rate_limit); new_limit = util::json::get("up_limit", json, old_limit); if (new_limit != old_limit) settings.set_int(settings.upload_rate_limit, new_limit); session.apply_settings(settings); auto response_code = http::code(http::accepted); http_response.set_body({{"code", response_code.first}, {"status", response_code.second}}); http_response.set_status(response_code.first); } else { auto response_code = http::code(http::bad_request); http_response.set_body({{"code", response_code.first}, {"status", response_code.second}}); http_response.set_status(response_code.first); } } *resp << http_response; } } } #endif