From 3981ca08404989307f8c52b787e11963f60a7472 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Tue, 18 Jan 2022 22:06:20 +0100 Subject: [PATCH 01/16] applist image attribute --- assets/apps_windows.json | 3 ++- assets/steam.png | Bin 0 -> 47373 bytes sunshine/nvhttp.cpp | 31 +++++++++++++++++++++++++++++-- sunshine/process.cpp | 13 +++++++++++++ sunshine/process.h | 2 ++ 5 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 assets/steam.png diff --git a/assets/apps_windows.json b/assets/apps_windows.json index f2a2a7ec..3dd599a8 100644 --- a/assets/apps_windows.json +++ b/assets/apps_windows.json @@ -7,7 +7,8 @@ "name":"Steam BigPicture", "output":"steam.txt", - "detached":["steam steam://open/bigpicture"] + "detached":["steam steam://open/bigpicture"], + "image":"steam.png" } ] } diff --git a/assets/steam.png b/assets/steam.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d429004269d152e000cc26680d38ff71de3344 GIT binary patch literal 47373 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

^y>>y-vl%`TW$x23W) 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 Z1F+}O*)YkvJ?4M@+UojhRVubo{~xdJ_5=U` literal 0 HcmV?d00001 diff --git a/sunshine/nvhttp.cpp b/sunshine/nvhttp.cpp index f167778a..28ecb8ea 100644 --- a/sunshine/nvhttp.cpp +++ b/sunshine/nvhttp.cpp @@ -761,12 +761,39 @@ 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); - std::ifstream in(SUNSHINE_ASSETS_DIR "/box.png"); - response->write(SimpleWeb::StatusCode::success_ok, in); + auto args = request->parse_query_string(); + auto appid = util::from_view(args.at("appid")) - 1; + auto app_image = proc::proc.get_app_image(appid); + + BOOST_LOG(debug) << "/appasset: ["sv << app_image << "] -- image"sv; + + if (app_image.empty()) { + app_image = "steam.png"; + } + auto file_path = SUNSHINE_ASSETS_DIR "/" + app_image; + + BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] -- image path"sv; + // check if files exists + std::error_code code; + auto image_extention = std::filesystem::path(file_path).extension().string(); + image_extention = image_extention.substr(1, image_extention.length() - 1); + if (!std::filesystem::exists(file_path, code) || !CHECK_EXPECTED_EXTENTIONS(image_extention)) { + BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] [extention="sv << image_extention << "] -- file not found"sv; + response->write(SimpleWeb::StatusCode::client_error_not_found); + return; + } + + SimpleWeb::CaseInsensitiveMultimap header; + header.emplace("Content-Type", "image/" + image_extention); + std::ifstream in(file_path); + response->write(SimpleWeb::StatusCode::success_ok, in, header); response->close_connection_after_response = true; + BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] [extention="sv << image_extention << "] -- sent"sv; } void start() { diff --git a/sunshine/process.cpp b/sunshine/process.cpp index f68593c0..2215fa5b 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -189,6 +189,14 @@ std::vector &proc_t::get_apps() { return _apps; } +std::string proc_t::get_app_image(int app_id) { + if(app_id < 0 || app_id >= _apps.size()) { + BOOST_LOG(error) << "Couldn't find app with ID ["sv << app_id << ']'; + return {}; + } + return _apps[app_id].image; +} + proc_t::~proc_t() { terminate(); } @@ -279,6 +287,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 working_dir = app_node.get_optional("working-dir"s); std::vector prep_cmds; @@ -321,6 +330,10 @@ 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); + } + ctx.name = std::move(name); ctx.prep_cmds = std::move(prep_cmds); ctx.detached = std::move(detached); diff --git a/sunshine/process.h b/sunshine/process.h index 86016b64..b45e0c04 100644 --- a/sunshine/process.h +++ b/sunshine/process.h @@ -55,6 +55,7 @@ struct ctx_t { std::string cmd; std::string working_dir; std::string output; + std::string image; }; class proc_t { @@ -78,6 +79,7 @@ public: const std::vector &get_apps() const; std::vector &get_apps(); + std::string get_app_image(int app_id); void terminate(); From 4a50fcafd87df4ae686b785550ee1d581c630b34 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 20 Jan 2022 14:31:16 +0100 Subject: [PATCH 02/16] send image as a binary stream --- sunshine/nvhttp.cpp | 20 ++++++-------------- sunshine/process.cpp | 11 +++++++++-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/sunshine/nvhttp.cpp b/sunshine/nvhttp.cpp index 28ecb8ea..6e549fc9 100644 --- a/sunshine/nvhttp.cpp +++ b/sunshine/nvhttp.cpp @@ -769,31 +769,23 @@ void appasset(resp_https_t response, req_https_t 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); - - BOOST_LOG(debug) << "/appasset: ["sv << app_image << "] -- image"sv; - if (app_image.empty()) { - app_image = "steam.png"; + app_image = "box.png"; } - auto file_path = SUNSHINE_ASSETS_DIR "/" + app_image; - BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] -- image path"sv; - // check if files exists - std::error_code code; + 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)) { - BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] [extention="sv << image_extention << "] -- file not found"sv; response->write(SimpleWeb::StatusCode::client_error_not_found); return; } - SimpleWeb::CaseInsensitiveMultimap header; - header.emplace("Content-Type", "image/" + image_extention); - std::ifstream in(file_path); - response->write(SimpleWeb::StatusCode::success_ok, in, header); + std::ifstream in(file_path, std::ios::binary); + response->write(SimpleWeb::StatusCode::success_ok, in); response->close_connection_after_response = true; - BOOST_LOG(debug) << "/appasset: ["sv << file_path << "] [extention="sv << image_extention << "] -- sent"sv; } void start() { diff --git a/sunshine/process.cpp b/sunshine/process.cpp index 2215fa5b..81ee4cd2 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -189,12 +189,19 @@ std::vector &proc_t::get_apps() { return _apps; } +/// 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()) { BOOST_LOG(error) << "Couldn't find app with ID ["sv << app_id << ']'; - return {}; + return "box.png"; } - return _apps[app_id].image; + + auto app_image = _apps[app_id].image; + if (app_image.empty()) { + return "box.png"; + } + return app_image; } proc_t::~proc_t() { From 38dcdcba2f03dde1b3122735d45340c8ccf75923 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 20 Jan 2022 15:55:06 +0100 Subject: [PATCH 03/16] 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 { From a9bbadf8ad85d30009e60de413646467ac86d18f Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 20 Jan 2022 16:15:44 +0100 Subject: [PATCH 04/16] WebUI image path configuration added --- assets/web/apps.html | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/assets/web/apps.html b/assets/web/apps.html index c87dbc89..1e72584e 100644 --- a/assets/web/apps.html +++ b/assets/web/apps.html @@ -166,6 +166,22 @@ If not set, Sunshine will default to the parent directory of the command + +

+ + +
+ Application icon/picture/image path that will be sent to client. + Only full path are working, so no relative path. + If not set, Sunshine will send default box image. +
+
diff --git a/sunshine/nvhttp.cpp b/sunshine/nvhttp.cpp index 55e83d78..8afdb35a 100644 --- a/sunshine/nvhttp.cpp +++ b/sunshine/nvhttp.cpp @@ -766,11 +766,11 @@ void appasset(resp_https_t response, req_https_t request) { print_req(request); auto args = request->parse_query_string(); - auto [ app_image, image_content_type ] = proc::proc.get_app_image(util::from_view(args.at("appid"))); + auto app_image = proc::proc.get_app_image(util::from_view(args.at("appid"))); std::ifstream in(app_image, std::ios::binary); SimpleWeb::CaseInsensitiveMultimap headers; - headers.emplace("Content-Type", "image/" + image_content_type); + headers.emplace("Content-Type", "image/png"); response->write(SimpleWeb::StatusCode::success_ok, in, headers); response->close_connection_after_response = true; } diff --git a/sunshine/process.cpp b/sunshine/process.cpp index 9e217d10..386c43c7 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -193,28 +193,28 @@ std::vector &proc_t::get_apps() { /// Gets application image from application list. /// Returns default image if image configuration is not set. /// returns http content-type header compatible image type -std::tuple proc_t::get_app_image(int app_id) { +std::string proc_t::get_app_image(int app_id) { 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 { SUNSHINE_ASSETS_DIR "/box.png", "png" }; + return SUNSHINE_ASSETS_DIR "/box.png"; } auto app_image_path = _apps[app_index].image_path; if (app_image_path.empty()) { - return { SUNSHINE_ASSETS_DIR "/box.png", "png" }; + return SUNSHINE_ASSETS_DIR "/box.png"; } - auto image_extention = std::filesystem::path(app_image_path).extension().string(); - image_extention = image_extention.substr(1, image_extention.length() - 1); + auto image_extension = std::filesystem::path(app_image_path).extension().string(); + image_extension = image_extension.substr(1, image_extension.length() - 1); std::error_code code; - if (!std::filesystem::exists(app_image_path, code) || !CHECK_EXPECTED_PICTURE_EXTENTIONS(image_extention)) { - return { SUNSHINE_ASSETS_DIR "/box.png", "png" }; + if (!std::filesystem::exists(app_image_path, code) || image_extension != "png") { + return SUNSHINE_ASSETS_DIR "/box.png"; } // return only "content-type" http header compatible image type. - return { app_image_path, image_extention == "jpg" ? "jpeg" : image_extention }; + return app_image_path; } proc_t::~proc_t() { diff --git a/sunshine/process.h b/sunshine/process.h index 00fdbe80..2b3fdad8 100644 --- a/sunshine/process.h +++ b/sunshine/process.h @@ -16,8 +16,6 @@ #include "utility.h" -#define CHECK_EXPECTED_PICTURE_EXTENTIONS(extention) (extention == "png" || extention == "jpg" || extention == "jpeg") - namespace proc { using file_t = util::safe_ptr_v2; @@ -81,7 +79,7 @@ public: const std::vector &get_apps() const; std::vector &get_apps(); - std::tuple get_app_image(int app_id); + std::string get_app_image(int app_id); void terminate(); From f4344ade53df7d8a8bef7241730640eda028e4d1 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Tue, 25 Jan 2022 21:13:54 +0100 Subject: [PATCH 09/16] tolower on extension --- sunshine/process.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sunshine/process.cpp b/sunshine/process.cpp index 386c43c7..dc7fee71 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include "main.h" #include "utility.h" @@ -206,7 +207,7 @@ std::string proc_t::get_app_image(int app_id) { } auto image_extension = std::filesystem::path(app_image_path).extension().string(); - image_extension = image_extension.substr(1, image_extension.length() - 1); + boost::to_lower(image_extension); std::error_code code; if (!std::filesystem::exists(app_image_path, code) || image_extension != "png") { From 59959d639766051a200412ca98ee61fa7dae2b23 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Tue, 1 Feb 2022 23:14:05 +0100 Subject: [PATCH 10/16] extension bugfix and default app_windows.json image-path fixed --- assets/apps_windows.json | 2 +- sunshine/process.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/apps_windows.json b/assets/apps_windows.json index f894a518..c653d04a 100644 --- a/assets/apps_windows.json +++ b/assets/apps_windows.json @@ -8,7 +8,7 @@ "output":"steam.txt", "detached":["steam steam://open/bigpicture"], - "image_path":"./asset/steam.png" + "image-path":"./asset/steam.png" } ] } diff --git a/sunshine/process.cpp b/sunshine/process.cpp index dc7fee71..f94b84fd 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -210,7 +210,7 @@ std::string proc_t::get_app_image(int app_id) { boost::to_lower(image_extension); std::error_code code; - if (!std::filesystem::exists(app_image_path, code) || image_extension != "png") { + if (!std::filesystem::exists(app_image_path, code) || image_extension != ".png") { return SUNSHINE_ASSETS_DIR "/box.png"; } From 398bf9819eb9a69cadd2d6cb3a1899b8a742855a Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Wed, 2 Feb 2022 23:02:49 +0100 Subject: [PATCH 11/16] steam.png added --- assets/apps_windows.json | 2 +- assets/steam.png | Bin 0 -> 25012 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/steam.png diff --git a/assets/apps_windows.json b/assets/apps_windows.json index c653d04a..419f2be4 100644 --- a/assets/apps_windows.json +++ b/assets/apps_windows.json @@ -8,7 +8,7 @@ "output":"steam.txt", "detached":["steam steam://open/bigpicture"], - "image-path":"./asset/steam.png" + "image-path":"./assets/steam.png" } ] } diff --git a/assets/steam.png b/assets/steam.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d4a44dcbe524b5eaeec940edb0f30041995343 GIT binary patch literal 25012 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¨x9QO_=pbNR@JY^Ix@*xsRoSmo)5wKn1CL@N!#f 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 Date: Wed, 2 Feb 2022 23:04:25 +0100 Subject: [PATCH 12/16] apps page image path documentation update --- assets/web/apps.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/web/apps.html b/assets/web/apps.html index fb6380ee..524020a1 100644 --- a/assets/web/apps.html +++ b/assets/web/apps.html @@ -177,8 +177,7 @@ v-model="editForm['image-path']" />
- Application icon/picture/image path that will be sent to client. - Only full path are working, so no relative path. Image must be a PNG. + Application icon/picture/image path that will be sent to client. Image must be a PNG file. If not set, Sunshine will send default box image.
From a9ebdf67851745eefe60042cc4ffee4948bf9e62 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 3 Feb 2022 09:58:57 +0100 Subject: [PATCH 13/16] fixed apps_linux typo --- assets/apps_linux.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/apps_linux.json b/assets/apps_linux.json index 632ec7b7..552dabe2 100644 --- a/assets/apps_linux.json +++ b/assets/apps_linux.json @@ -14,7 +14,7 @@ "output":"steam.txt", "detached":["setsid steam steam://open/bigpicture"], - "image-path":"./asset/steam.png" + "image-path":"./assets/steam.png" } ] } From 3b2c70422a7c143eb8c499ad42ecf67b673c8fed Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 3 Feb 2022 22:02:36 +0100 Subject: [PATCH 14/16] remove double quotes from path --- assets/web/apps.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/web/apps.html b/assets/web/apps.html index 524020a1..9c21fe63 100644 --- a/assets/web/apps.html +++ b/assets/web/apps.html @@ -223,6 +223,7 @@ index: -1, "prep-cmd": [], detached: [], + "image-path": "" }; this.editForm.index = -1; this.showEditForm = true; @@ -253,6 +254,7 @@ }); }, save() { + this.editForm["image-path"] = this.editForm["image-path"].toString().replace(/"/g, ''); fetch("/api/apps", { method: "POST", body: JSON.stringify(this.editForm), @@ -272,4 +274,4 @@ .monospace { font-family: monospace; } - + \ No newline at end of file From cf859b7c132b25994e6e8798d417fae71b98b202 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Thu, 3 Feb 2022 22:15:13 +0100 Subject: [PATCH 15/16] NOTICE file added with Steam trademarks notice --- CMakeLists.txt | 1 + NOTICE | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 NOTICE diff --git a/CMakeLists.txt b/CMakeLists.txt index 0115a264..7890a5ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -364,6 +364,7 @@ endif() list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_ASSETS_DIR="${SUNSHINE_ASSETS_DIR}") list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_CONFIG_DIR="${SUNSHINE_CONFIG_DIR}") list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_DEFAULT_DIR="${SUNSHINE_DEFAULT_DIR}") +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/NOTICE" "NOTICE") add_executable(sunshine ${SUNSHINE_TARGET_FILES}) target_link_libraries(sunshine ${SUNSHINE_EXTERNAL_LIBRARIES}) target_compile_definitions(sunshine PUBLIC ${SUNSHINE_DEFINITIONS}) diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..7ad027d7 --- /dev/null +++ b/NOTICE @@ -0,0 +1,3 @@ +©2018 Valve Corporation. Steam and the Steam logo are trademarks and/or +registered trademarks of Valve Corporation in the U.S. and/or other countries. All +rights reserved. \ No newline at end of file From b5896c8f2668086ecf93fee71e0ea23b17827c71 Mon Sep 17 00:00:00 2001 From: Christophe Fajardo Date: Sun, 6 Feb 2022 21:28:03 +0100 Subject: [PATCH 16/16] remove NOTICE from CMakeLists.txt --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7890a5ae..0115a264 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -364,7 +364,6 @@ endif() list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_ASSETS_DIR="${SUNSHINE_ASSETS_DIR}") list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_CONFIG_DIR="${SUNSHINE_CONFIG_DIR}") list(APPEND SUNSHINE_DEFINITIONS SUNSHINE_DEFAULT_DIR="${SUNSHINE_DEFAULT_DIR}") -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/NOTICE" "NOTICE") add_executable(sunshine ${SUNSHINE_TARGET_FILES}) target_link_libraries(sunshine ${SUNSHINE_EXTERNAL_LIBRARIES}) target_compile_definitions(sunshine PUBLIC ${SUNSHINE_DEFINITIONS})