From 38dcdcba2f03dde1b3122735d45340c8ccf75923 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 20 Jan 2022 15:55:06 +0100 Subject: [PATCH] fully working backend image posters --- assets/apps_linux.json | 3 ++- assets/apps_windows.json | 2 +- assets/steam.png | Bin 47373 -> 0 bytes sunshine/nvhttp.cpp | 19 ++----------------- sunshine/process.cpp | 31 ++++++++++++++++++++++--------- sunshine/process.h | 2 +- 6 files changed, 28 insertions(+), 29 deletions(-) delete mode 100644 assets/steam.png diff --git a/assets/apps_linux.json b/assets/apps_linux.json index 1cfeb3d4..632ec7b7 100644 --- a/assets/apps_linux.json +++ b/assets/apps_linux.json @@ -13,7 +13,8 @@ "name":"Steam BigPicture", "output":"steam.txt", - "detached":["setsid steam steam://open/bigpicture"] + "detached":["setsid steam steam://open/bigpicture"], + "image-path":"./asset/steam.png" } ] } diff --git a/assets/apps_windows.json b/assets/apps_windows.json index 3dd599a8..f894a518 100644 --- a/assets/apps_windows.json +++ b/assets/apps_windows.json @@ -8,7 +8,7 @@ "output":"steam.txt", "detached":["steam steam://open/bigpicture"], - "image":"steam.png" + "image_path":"./asset/steam.png" } ] } diff --git a/assets/steam.png b/assets/steam.png deleted file mode 100644 index b9d429004269d152e000cc26680d38ff71de3344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47373 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

^y>>y-vl%`TW$x23W) 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 Z1F+}O*)YkvJ?4M@+UojhRVubo{~xdJ_5=U` diff --git a/sunshine/nvhttp.cpp b/sunshine/nvhttp.cpp index 6e549fc9..ddc5dd41 100644 --- a/sunshine/nvhttp.cpp +++ b/sunshine/nvhttp.cpp @@ -761,29 +761,14 @@ void cancel(resp_https_t response, req_https_t request) { } } -#define CHECK_EXPECTED_EXTENTIONS(extention) (extention == "png" || extention == "jpg" || extention == "jpeg") void appasset(resp_https_t response, req_https_t request) { print_req(request); auto args = request->parse_query_string(); - auto appid = util::from_view(args.at("appid")) - 1; - auto app_image = proc::proc.get_app_image(appid); - if (app_image.empty()) { - app_image = "box.png"; - } + auto app_image = proc::proc.get_app_image(util::from_view(args.at("appid"))); - auto file_path = SUNSHINE_ASSETS_DIR "/" + app_image; - auto image_extention = std::filesystem::path(file_path).extension().string(); - image_extention = image_extention.substr(1, image_extention.length() - 1); - - std::error_code code; - if (!std::filesystem::exists(file_path, code) || !CHECK_EXPECTED_EXTENTIONS(image_extention)) { - response->write(SimpleWeb::StatusCode::client_error_not_found); - return; - } - - std::ifstream in(file_path, std::ios::binary); + std::ifstream in(app_image, std::ios::binary); response->write(SimpleWeb::StatusCode::success_ok, in); response->close_connection_after_response = true; } diff --git a/sunshine/process.cpp b/sunshine/process.cpp index 81ee4cd2..324b1364 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -189,19 +190,31 @@ std::vector &proc_t::get_apps() { return _apps; } +#define CHECK_EXPECTED_EXTENTIONS(extention) (extention == "png" || extention == "jpg" || extention == "jpeg") + /// Gets application image from application list. /// Returns default image if image configuration is not set. std::string proc_t::get_app_image(int app_id) { - if(app_id < 0 || app_id >= _apps.size()) { + auto app_index = app_id -1; + if(app_index < 0 || app_index >= _apps.size()) { BOOST_LOG(error) << "Couldn't find app with ID ["sv << app_id << ']'; - return "box.png"; + return SUNSHINE_ASSETS_DIR "/box.png"; } - auto app_image = _apps[app_id].image; - if (app_image.empty()) { - return "box.png"; + auto app_image_path = _apps[app_index].image_path; + if (app_image_path.empty()) { + return SUNSHINE_ASSETS_DIR "/box.png"; } - return app_image; + + auto image_extention = std::filesystem::path(app_image_path).extension().string(); + image_extention = image_extention.substr(1, image_extention.length() - 1); + + std::error_code code; + if (!std::filesystem::exists(app_image_path, code) || !CHECK_EXPECTED_EXTENTIONS(image_extention)) { + return SUNSHINE_ASSETS_DIR "/box.png"; + } + + return app_image_path; } proc_t::~proc_t() { @@ -294,7 +307,7 @@ std::optional parse(const std::string &file_name) { auto output = app_node.get_optional("output"s); auto name = parse_env_val(this_env, app_node.get("name"s)); auto cmd = app_node.get_optional("cmd"s); - auto image = app_node.get_optional("image"s); + auto image_path = app_node.get_optional("image-path"s); auto working_dir = app_node.get_optional("working-dir"s); std::vector prep_cmds; @@ -337,8 +350,8 @@ std::optional parse(const std::string &file_name) { ctx.working_dir = parse_env_val(this_env, *working_dir); } - if (image) { - ctx.image = parse_env_val(this_env, *image); + if (image_path) { + ctx.image_path = parse_env_val(this_env, *image_path); } ctx.name = std::move(name); diff --git a/sunshine/process.h b/sunshine/process.h index b45e0c04..2b3fdad8 100644 --- a/sunshine/process.h +++ b/sunshine/process.h @@ -55,7 +55,7 @@ struct ctx_t { std::string cmd; std::string working_dir; std::string output; - std::string image; + std::string image_path; }; class proc_t {