mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-09 21:17:03 +03:00
feat: add timeout and chunking to proxy label fetching
This commit is contained in:
@@ -53,17 +53,36 @@ function createConfigSection(section, map, network) {
|
||||
o.rows = 5;
|
||||
o.ucisection = s.section;
|
||||
o.load = function (section_id) {
|
||||
return fs.exec('/etc/init.d/podkop', ['get_proxy_label', section_id]).then(res => {
|
||||
if (res.stdout) {
|
||||
try {
|
||||
const decodedLabel = decodeURIComponent(res.stdout.trim());
|
||||
this.description = _('Current config: ') + decodedLabel;
|
||||
} catch (e) {
|
||||
console.error('Error decoding label:', e);
|
||||
this.description = _('Current config: ') + res.stdout.trim();
|
||||
}
|
||||
}
|
||||
return this.super('load', section_id);
|
||||
return new Promise((resolve, reject) => {
|
||||
const timeout = setTimeout(() => {
|
||||
console.error('Label fetch timeout');
|
||||
resolve(this.super('load', section_id));
|
||||
}, 5000); // 5 second timeout
|
||||
|
||||
fs.exec('/etc/init.d/podkop', ['get_proxy_label', section_id])
|
||||
.then(res => {
|
||||
clearTimeout(timeout);
|
||||
if (res.stdout) {
|
||||
try {
|
||||
const chunks = res.stdout.trim().split('\n');
|
||||
const fullLabel = chunks.join('');
|
||||
const decodedLabel = decodeURIComponent(fullLabel);
|
||||
this.description = _('Current config: ') + decodedLabel;
|
||||
} catch (e) {
|
||||
console.error('Error processing label:', e);
|
||||
// If decoding fails, try to display the raw chunks
|
||||
const chunks = res.stdout.trim().split('\n');
|
||||
const fullLabel = chunks.join('');
|
||||
this.description = _('Current config: ') + fullLabel;
|
||||
}
|
||||
}
|
||||
resolve(this.super('load', section_id));
|
||||
})
|
||||
.catch(error => {
|
||||
clearTimeout(timeout);
|
||||
console.error('Error fetching label:', error);
|
||||
resolve(this.super('load', section_id));
|
||||
});
|
||||
});
|
||||
};
|
||||
o.validate = function (section_id, value) {
|
||||
|
||||
@@ -1840,11 +1840,19 @@ get_proxy_label() {
|
||||
local section="$1"
|
||||
local proxy_string
|
||||
local label=""
|
||||
local chunk_size=50
|
||||
local start=0
|
||||
|
||||
config_get proxy_string "$section" "proxy_string"
|
||||
if [ -n "$proxy_string" ]; then
|
||||
label=$(echo "$proxy_string" | sed -n 's/.*#\(.*\)$/\1/p')
|
||||
echo "$label"
|
||||
if [ -n "$label" ]; then
|
||||
# Split label into chunks and output one at a time
|
||||
while [ $start -lt ${#label} ]; do
|
||||
echo "${label:$start:$chunk_size}"
|
||||
start=$((start + chunk_size))
|
||||
done
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user