mirror of
https://github.com/LizardByte/Sunshine.git
synced 2025-02-20 15:40:56 +00:00
Automatically treat launcher-type apps as detached
This commit is contained in:
parent
cfd78b5ce7
commit
ed95b50f7a
@ -254,6 +254,7 @@ Application List
|
||||
- ``image-path`` - The full path to the cover art image to use.
|
||||
- ``name`` - The name of the application/game
|
||||
- ``output`` - The file where the output of the command is stored
|
||||
- ``auto-detach`` - Specifies whether the app should be treated as detached if it exits quickly
|
||||
- ``prep-cmd`` - A list of commands to be run before/after the application
|
||||
|
||||
- If any of the prep-commands fail, starting the application is aborted
|
||||
|
@ -227,6 +227,8 @@ namespace proc {
|
||||
}
|
||||
}
|
||||
|
||||
_app_launch_time = std::chrono::steady_clock::now();
|
||||
|
||||
fg.disable();
|
||||
|
||||
return 0;
|
||||
@ -237,9 +239,17 @@ namespace proc {
|
||||
if (placebo || _process.running()) {
|
||||
return _app_id;
|
||||
}
|
||||
else if (_app.auto_detach && _process.native_exit_code() == 0 &&
|
||||
std::chrono::steady_clock::now() - _app_launch_time < 5s) {
|
||||
BOOST_LOG(info) << "App exited gracefully within 5 seconds of launch. Treating the app as a detached command."sv;
|
||||
BOOST_LOG(info) << "Adjust this behavior in the Applications tab or apps.json if this is not what you want."sv;
|
||||
placebo = true;
|
||||
return _app_id;
|
||||
}
|
||||
|
||||
// Perform cleanup actions now if needed
|
||||
if (_process) {
|
||||
BOOST_LOG(info) << "App exited with code ["sv << _process.native_exit_code() << ']';
|
||||
terminate();
|
||||
}
|
||||
|
||||
@ -548,6 +558,7 @@ namespace proc {
|
||||
auto image_path = app_node.get_optional<std::string>("image-path"s);
|
||||
auto working_dir = app_node.get_optional<std::string>("working-dir"s);
|
||||
auto elevated = app_node.get_optional<bool>("elevated"s);
|
||||
auto auto_detach = app_node.get_optional<bool>("auto-detach"s);
|
||||
|
||||
std::vector<proc::cmd_t> prep_cmds;
|
||||
if (!exclude_global_prep.value_or(false)) {
|
||||
@ -606,6 +617,7 @@ namespace proc {
|
||||
}
|
||||
|
||||
ctx.elevated = elevated.value_or(false);
|
||||
ctx.auto_detach = auto_detach.value_or(true);
|
||||
|
||||
auto possible_ids = calculate_app_id(name, ctx.image_path, i++);
|
||||
if (ids.count(std::get<0>(possible_ids)) == 0) {
|
||||
|
@ -52,6 +52,7 @@ namespace proc {
|
||||
std::string image_path;
|
||||
std::string id;
|
||||
bool elevated;
|
||||
bool auto_detach;
|
||||
};
|
||||
|
||||
class proc_t {
|
||||
@ -93,6 +94,7 @@ namespace proc {
|
||||
boost::process::environment _env;
|
||||
std::vector<ctx_t> _apps;
|
||||
ctx_t _app;
|
||||
std::chrono::steady_clock::time_point _app_launch_time;
|
||||
|
||||
// If no command associated with _app_id, yet it's still running
|
||||
bool placebo {};
|
||||
|
@ -229,6 +229,25 @@
|
||||
permissions to run properly.
|
||||
</div>
|
||||
</div>
|
||||
<!-- auto-detach -->
|
||||
<div class="mb-3 form-check">
|
||||
<label for="autoDetach" class="form-check-label"
|
||||
>Continue streaming if the application exits quickly</label
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input"
|
||||
id="autoDetach"
|
||||
v-model="editForm['auto-detach']"
|
||||
true-value="true"
|
||||
false-value="false"
|
||||
/>
|
||||
<div class="form-text">
|
||||
This will attempt to automatically detect launcher-type apps that close
|
||||
quickly after launching another program or instance of themselves. When
|
||||
a launcher-type app is detected, it is treated as a detached app.
|
||||
</div>
|
||||
</div>
|
||||
<!-- Image path -->
|
||||
<div class="mb-3">
|
||||
<label for="appImagePath" class="form-label">Image</label>
|
||||
@ -379,6 +398,7 @@
|
||||
index: -1,
|
||||
"exclude-global-prep-cmd": false,
|
||||
elevated: false,
|
||||
"auto-detach": true,
|
||||
"prep-cmd": [],
|
||||
detached: [],
|
||||
"image-path": ""
|
||||
@ -398,6 +418,9 @@
|
||||
if(this.editForm["elevated"] === undefined && this.platform === 'windows'){
|
||||
this.$set(this.editForm, "elevated", false);
|
||||
}
|
||||
if(this.editForm["auto-detach"] === undefined){
|
||||
this.$set(this.editForm, "auto-detach", true);
|
||||
}
|
||||
this.showEditForm = true;
|
||||
},
|
||||
showDeleteForm(id) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user