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 b9d42900..00000000 Binary files a/assets/steam.png and /dev/null differ 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 {