Merge remote-tracking branch 'origin/master'
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -40,7 +40,7 @@
|
||||
# build directories
|
||||
build/
|
||||
cmake-*/
|
||||
docs/*-doxyconfig*
|
||||
docs/doxyconfig*
|
||||
|
||||
# npm
|
||||
node_modules/
|
||||
|
||||
@@ -10,25 +10,15 @@ build:
|
||||
tools:
|
||||
python: "miniconda-latest"
|
||||
commands:
|
||||
# because we are overriding the build commands, we need to setup the environment ourselves
|
||||
- cat third-party/doxyconfig/environment.yml
|
||||
- conda env create --quiet --name ${READTHEDOCS_VERSION} --file third-party/doxyconfig/environment.yml
|
||||
- npm install "@fortawesome/fontawesome-free"
|
||||
- mkdir -p ${READTHEDOCS_OUTPUT}html/assets/fontawesome/css
|
||||
- mkdir -p ${READTHEDOCS_OUTPUT}html/assets/fontawesome/js
|
||||
- cp node_modules/@fortawesome/fontawesome-free/css/all.min.css ${READTHEDOCS_OUTPUT}html/assets/fontawesome/css
|
||||
- cp node_modules/@fortawesome/fontawesome-free/js/all.min.js ${READTHEDOCS_OUTPUT}html/assets/fontawesome/js
|
||||
- cp -r node_modules/@fortawesome/fontawesome-free/webfonts ${READTHEDOCS_OUTPUT}html/assets/fontawesome/
|
||||
- |
|
||||
wget "https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/favicon.ico" \
|
||||
-O ${READTHEDOCS_OUTPUT}lizardbyte.ico
|
||||
- |
|
||||
wget "https://raw.githubusercontent.com/LizardByte/.github/master/branding/logos/logo-128x128.png" \
|
||||
-O ${READTHEDOCS_OUTPUT}lizardbyte.png
|
||||
- cp ./third-party/doxyconfig/Doxyfile ./docs/Doxyfile-doxyconfig
|
||||
- cp ./third-party/doxyconfig/header.html ./docs/header-doxyconfig.html
|
||||
- cat ./docs/Doxyfile >> ./docs/Doxyfile-doxyconfig
|
||||
- cd docs && doxygen Doxyfile-doxyconfig
|
||||
if [ -f readthedocs_build.sh ]; then
|
||||
doxyconfig_dir="."
|
||||
else
|
||||
doxyconfig_dir="./third-party/doxyconfig"
|
||||
fi
|
||||
chmod +x "${doxyconfig_dir}/readthedocs_build.sh"
|
||||
export DOXYCONFIG_DIR="${doxyconfig_dir}"
|
||||
"${doxyconfig_dir}/readthedocs_build.sh"
|
||||
|
||||
# using conda, we can get newer doxygen and graphviz than ubuntu provide
|
||||
# https://github.com/readthedocs/readthedocs.org/issues/8151#issuecomment-890359661
|
||||
|
||||
@@ -409,21 +409,6 @@ namespace config {
|
||||
boost::asio::ip::host_name(), // sunshine_name,
|
||||
"sunshine_state.json"s, // file_state
|
||||
{}, // external_ip
|
||||
{
|
||||
"352x240"s,
|
||||
"480x360"s,
|
||||
"858x480"s,
|
||||
"1280x720"s,
|
||||
"1920x1080"s,
|
||||
"2560x1080"s,
|
||||
"2560x1440"s,
|
||||
"3440x1440"s,
|
||||
"1920x1200"s,
|
||||
"3840x2160"s,
|
||||
"3840x1600"s,
|
||||
}, // supported resolutions
|
||||
|
||||
{ 10, 30, 60, 90, 120 }, // supported fps
|
||||
};
|
||||
|
||||
input_t input {
|
||||
@@ -1046,8 +1031,6 @@ namespace config {
|
||||
path_f(vars, "credentials_file", config::sunshine.credentials_file);
|
||||
|
||||
string_f(vars, "external_ip", nvhttp.external_ip);
|
||||
list_string_f(vars, "resolutions"s, nvhttp.resolutions);
|
||||
list_int_f(vars, "fps"s, nvhttp.fps);
|
||||
list_prep_cmd_f(vars, "global_prep_cmd", config::sunshine.prep_cmds);
|
||||
|
||||
string_f(vars, "audio_sink", audio.sink);
|
||||
|
||||
@@ -117,8 +117,6 @@ namespace config {
|
||||
std::string file_state;
|
||||
|
||||
std::string external_ip;
|
||||
std::vector<std::string> resolutions;
|
||||
std::vector<int> fps;
|
||||
};
|
||||
|
||||
struct input_t {
|
||||
|
||||
@@ -734,31 +734,6 @@ namespace nvhttp {
|
||||
}
|
||||
tree.put("root.ServerCodecModeSupport", codec_mode_flags);
|
||||
|
||||
pt::ptree display_nodes;
|
||||
for (auto &resolution : config::nvhttp.resolutions) {
|
||||
auto pred = [](auto ch) { return ch == ' ' || ch == '\t' || ch == 'x'; };
|
||||
|
||||
auto middle = std::find_if(std::begin(resolution), std::end(resolution), pred);
|
||||
if (middle == std::end(resolution)) {
|
||||
BOOST_LOG(warning) << resolution << " is not in the proper format for a resolution: WIDTHxHEIGHT"sv;
|
||||
continue;
|
||||
}
|
||||
|
||||
auto width = util::from_chars(&*std::begin(resolution), &*middle);
|
||||
auto height = util::from_chars(&*(middle + 1), &*std::end(resolution));
|
||||
for (auto fps : config::nvhttp.fps) {
|
||||
pt::ptree display_node;
|
||||
display_node.put("Width", width);
|
||||
display_node.put("Height", height);
|
||||
display_node.put("RefreshRate", fps);
|
||||
|
||||
display_nodes.add_child("DisplayMode", display_node);
|
||||
}
|
||||
}
|
||||
|
||||
if (!config::nvhttp.resolutions.empty()) {
|
||||
tree.add_child("root.SupportedDisplayMode", display_nodes);
|
||||
}
|
||||
auto current_appid = proc::proc.running();
|
||||
tree.put("root.PairStatus", pair_status);
|
||||
tree.put("root.currentgame", current_appid);
|
||||
|
||||
@@ -53,8 +53,6 @@
|
||||
v-if="currentTab === 'av'"
|
||||
:config="config"
|
||||
:platform="platform"
|
||||
:resolutions="resolutions"
|
||||
:fps="fps"
|
||||
>
|
||||
</audio-video>
|
||||
|
||||
@@ -132,8 +130,6 @@
|
||||
saved: false,
|
||||
restarted: false,
|
||||
config: null,
|
||||
fps: [],
|
||||
resolutions: [],
|
||||
currentTab: "general",
|
||||
global_prep_cmd: [],
|
||||
tabs: [ // TODO: Move the options to each Component instead, encapsulate.
|
||||
@@ -180,8 +176,6 @@
|
||||
"auto_capture_sink": "enabled",
|
||||
"adapter_name": "",
|
||||
"output_name": "",
|
||||
"resolutions": "[352x240,480x360,858x480,1280x720,1920x1080,2560x1080,2560x1440,3440x1440,1920x1200,3840x2160,3840x1600]",
|
||||
"fps": "[10,30,60,90,120]",
|
||||
"min_fps_factor": 1,
|
||||
},
|
||||
},
|
||||
@@ -326,16 +320,6 @@
|
||||
});
|
||||
});
|
||||
|
||||
this.fps = JSON.parse(this.config.fps);
|
||||
//Resolutions should be fixed because are not valid JSON
|
||||
let res = this.config.resolutions.substring(
|
||||
1,
|
||||
this.config.resolutions.length - 1
|
||||
);
|
||||
let resolutions = [];
|
||||
res.split(",").forEach((r) => resolutions.push(r.trim()));
|
||||
this.resolutions = resolutions;
|
||||
|
||||
this.config.global_prep_cmd = this.config.global_prep_cmd || [];
|
||||
this.global_prep_cmd = JSON.parse(this.config.global_prep_cmd);
|
||||
});
|
||||
@@ -345,16 +329,6 @@
|
||||
this.$forceUpdate()
|
||||
},
|
||||
serialize() {
|
||||
let nl = this.config === "windows" ? "\r\n" : "\n";
|
||||
this.config.resolutions =
|
||||
"[" +
|
||||
nl +
|
||||
" " +
|
||||
this.resolutions.join("," + nl + " ") +
|
||||
nl +
|
||||
"]";
|
||||
// remove quotes from values in fps
|
||||
this.config.fps = JSON.stringify(this.fps).replace(/"/g, "");
|
||||
this.config.global_prep_cmd = JSON.stringify(this.global_prep_cmd);
|
||||
},
|
||||
save() {
|
||||
@@ -370,19 +344,11 @@
|
||||
Object.keys(tab.options).forEach(optionKey => {
|
||||
let delete_value = false
|
||||
|
||||
if (["resolutions", "fps", "global_prep_cmd"].includes(optionKey)) {
|
||||
if (["global_prep_cmd"].includes(optionKey)) {
|
||||
let config_value, default_value
|
||||
|
||||
if (optionKey === "resolutions") {
|
||||
let regex = /([\d]+x[\d]+)/g
|
||||
|
||||
// Use a regular expression to find each value and replace it with a quoted version
|
||||
config_value = JSON.parse(config[optionKey].replace(regex, '"$1"')).toString()
|
||||
default_value = JSON.parse(tab.options[optionKey].replace(regex, '"$1"')).toString()
|
||||
} else {
|
||||
config_value = JSON.parse(config[optionKey])
|
||||
default_value = JSON.parse(tab.options[optionKey])
|
||||
}
|
||||
|
||||
if (config_value === default_value) {
|
||||
delete_value = true
|
||||
|
||||
@@ -11,8 +11,6 @@ import DisplayModesSettings from "./audiovideo/DisplayModesSettings.vue";
|
||||
const props = defineProps([
|
||||
'platform',
|
||||
'config',
|
||||
'resolutions',
|
||||
'fps',
|
||||
'min_fps_factor',
|
||||
])
|
||||
|
||||
@@ -97,8 +95,6 @@ const config = ref(props.config)
|
||||
<DisplayModesSettings
|
||||
:platform="platform"
|
||||
:config="config"
|
||||
:resolutions="resolutions"
|
||||
:fps="fps"
|
||||
:min_fps_factor="min_fps_factor"
|
||||
/>
|
||||
|
||||
|
||||
@@ -6,14 +6,10 @@ import PlatformLayout from '../../../PlatformLayout.vue'
|
||||
const props = defineProps([
|
||||
'platform',
|
||||
'config',
|
||||
'resolutions',
|
||||
'fps',
|
||||
'min_fps_factor',
|
||||
])
|
||||
|
||||
const config = ref(props.config)
|
||||
const resolutions = ref(props.resolutions)
|
||||
const fps = ref(props.fps)
|
||||
|
||||
const resIn = ref("")
|
||||
const fpsIn = ref("")
|
||||
@@ -21,50 +17,6 @@ const fpsIn = ref("")
|
||||
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<!-- Advertised Resolutions -->
|
||||
<div id="resolutions" class="resolutions-container">
|
||||
<label>{{ $t('config.resolutions') }}</label>
|
||||
<div class="resolutions d-flex flex-wrap">
|
||||
<div class="p-2 ms-item m-2 d-flex justify-content-between" v-for="(r,i) in resolutions" :key="r">
|
||||
<span class="px-2">{{r}}</span>
|
||||
<span style="cursor: pointer" @click="resolutions.splice(i,1)">×</span>
|
||||
</div>
|
||||
</div>
|
||||
<form @submit.prevent="resolutions.push(resIn);resIn = '';" class="d-flex align-items-center">
|
||||
<input type="text" v-model="resIn" required pattern="[0-9]+x[0-9]+" style="
|
||||
width: 12ch;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
" class="form-control" />
|
||||
<button style="border-top-left-radius: 0; border-bottom-left-radius: 0" class="btn btn-success">
|
||||
+
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Advertised FPS -->
|
||||
<div id="fps" class="fps-container">
|
||||
<label>{{ $t('config.fps') }}</label>
|
||||
<div class="fps d-flex flex-wrap">
|
||||
<div class="p-2 ms-item m-2 d-flex justify-content-between" v-for="(f,i) in fps" :key="f">
|
||||
<span class="px-2">{{f}}</span>
|
||||
<span style="cursor: pointer" @click="fps.splice(i,1)">×</span>
|
||||
</div>
|
||||
</div>
|
||||
<form @submit.prevent="fps.push(fpsIn);fpsIn = '';" class="d-flex align-items-center">
|
||||
<input type="text" v-model="fpsIn" required pattern="[0-9]+" style="
|
||||
width: 6ch;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
" class="form-control" />
|
||||
<button style="border-top-left-radius: 0; border-bottom-left-radius: 0" class="btn btn-success">
|
||||
+
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="form-text mb-3">{{ $t('config.res_fps_desc') }}</div>
|
||||
|
||||
<!--min_fps_factor-->
|
||||
<div class="mb-3">
|
||||
<label for="qp" class="form-label">{{ $t('config.min_fps_factor') }}</label>
|
||||
|
||||
@@ -164,7 +164,6 @@
|
||||
"file_apps_desc": "The file where current apps of Apollo are stored.",
|
||||
"file_state": "State File",
|
||||
"file_state_desc": "The file where current state of Apollo is stored",
|
||||
"fps": "Advertised FPS",
|
||||
"gamepad": "Emulated Gamepad Type",
|
||||
"gamepad_auto": "Automatic selection options",
|
||||
"gamepad_desc": "Choose which type of gamepad to emulate on the host",
|
||||
@@ -285,8 +284,6 @@
|
||||
"qsv_preset_veryfast": "fastest (lowest quality)",
|
||||
"qsv_slow_hevc": "Allow Slow HEVC Encoding",
|
||||
"qsv_slow_hevc_desc": "This can enable HEVC encoding on older Intel GPUs, at the cost of higher GPU usage and worse performance.",
|
||||
"res_fps_desc": "The display modes advertised by Apollo. Some versions of Moonlight, such as Moonlight-nx (Switch), rely on these lists to ensure that the requested resolutions and fps are supported. This setting does not change how the screen stream is sent to Moonlight.",
|
||||
"resolutions": "Advertised Resolutions",
|
||||
"restart_note": "Apollo is restarting to apply changes.",
|
||||
"sunshine_name": "Apollo Name",
|
||||
"sunshine_name_desc": "The name displayed by Moonlight. If not specified, the PC's hostname is used",
|
||||
|
||||
2
third-party/doxyconfig
vendored
2
third-party/doxyconfig
vendored
Submodule third-party/doxyconfig updated: 671b494f3c...6d145dab2e
Reference in New Issue
Block a user