mirror of
https://github.com/therealaleph/MasterHttpRelayVPN-RUST.git
synced 2026-05-18 06:44:35 +03:00
v0.4.3: expose multi-script-ID support in the UI
The backend already supported a comma-separated list of Apps Script IDs with round-robin dispatch and automatic 10-minute sidelining on quota errors (429 / 403 / 'quota' in body). But the UI label just said 'Apps Script ID' (singular), so users didn't realize multiple IDs are allowed. - Rename the label to 'Apps Script ID(s)' - Hover tooltip explaining comma-separated input and quota auto-failover - Placeholder hint 'id1, id2, id3 …' - Live count line under the field when 2+ IDs are entered Requested by a user in Farsi: 'add the ability to set multiple script IDs; switch to the next when one hits its limit'. The feature existed, this just surfaces it.
This commit is contained in:
Generated
+1
-1
@@ -1360,7 +1360,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mhrv-rs"
|
name = "mhrv-rs"
|
||||||
version = "0.4.2"
|
version = "0.4.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mhrv-rs"
|
name = "mhrv-rs"
|
||||||
version = "0.4.2"
|
version = "0.4.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting"
|
description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
+19
-1
@@ -291,11 +291,29 @@ impl eframe::App for App {
|
|||||||
.num_columns(2)
|
.num_columns(2)
|
||||||
.spacing([10.0, 6.0])
|
.spacing([10.0, 6.0])
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
ui.label("Apps Script ID");
|
ui.label("Apps Script ID(s)")
|
||||||
|
.on_hover_text(
|
||||||
|
"One deployment ID, or several separated by commas.\n\
|
||||||
|
With multiple IDs the proxy round-robins between them and\n\
|
||||||
|
automatically sidelines any ID that hits its daily quota (429)\n\
|
||||||
|
or other rate limits for 10 minutes before retrying it."
|
||||||
|
);
|
||||||
ui.add(egui::TextEdit::singleline(&mut self.form.script_id)
|
ui.add(egui::TextEdit::singleline(&mut self.form.script_id)
|
||||||
|
.hint_text("id1, id2, id3 …")
|
||||||
.desired_width(f32::INFINITY));
|
.desired_width(f32::INFINITY));
|
||||||
ui.end_row();
|
ui.end_row();
|
||||||
|
|
||||||
|
let id_count = self.form.script_id
|
||||||
|
.split(',')
|
||||||
|
.map(|s| s.trim())
|
||||||
|
.filter(|s| !s.is_empty())
|
||||||
|
.count();
|
||||||
|
if id_count > 1 {
|
||||||
|
ui.label("");
|
||||||
|
ui.small(format!("{} IDs — round-robin with auto-failover on quota", id_count));
|
||||||
|
ui.end_row();
|
||||||
|
}
|
||||||
|
|
||||||
ui.label("Auth key");
|
ui.label("Auth key");
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
let te = egui::TextEdit::singleline(&mut self.form.auth_key)
|
let te = egui::TextEdit::singleline(&mut self.form.auth_key)
|
||||||
|
|||||||
Reference in New Issue
Block a user