RelayEntry: Hide "force disconnect" button when relay is not currently connected

This commit is contained in:
Bu5hm4nn 2023-08-08 11:19:52 -10:00
parent eb6ca10158
commit 4ee91da38a
2 changed files with 30 additions and 9 deletions

View File

@ -122,6 +122,7 @@ pub(super) fn relay_scroll_list(app: &mut GossipUi, ui: &mut Ui, relays: Vec<DbR
for db_relay in relays {
let db_url = db_relay.url.clone();
// is THIS entry being edited?
let edit = if let Some(edit_url) = &app.relays.edit {
if edit_url == &db_url {
@ -133,6 +134,8 @@ pub(super) fn relay_scroll_list(app: &mut GossipUi, ui: &mut Ui, relays: Vec<DbR
} else {
false
};
// retrieve an updated copy of this relay when editing
let db_relay = if has_edit_target {
if let Some(entry) = GLOBALS.all_relays.get(&db_url) {
entry.clone() // update
@ -142,10 +145,19 @@ pub(super) fn relay_scroll_list(app: &mut GossipUi, ui: &mut Ui, relays: Vec<DbR
} else {
db_relay // don't update
};
// is this relay currently connected?
let is_connected = if let Some(_) = GLOBALS.connected_relays.get(&db_url) {
true
} else {
false
};
let enabled = edit || !is_editing;
let mut widget = RelayEntry::new(db_relay, app);
widget.set_edit(edit);
widget.set_enabled(enabled);
widget.set_connected(is_connected);
if let Some(ref assignment) = GLOBALS.relay_picker.get_relay_assignment(&db_url) {
widget.set_user_count(assignment.pubkeys.len());
}

View File

@ -136,6 +136,7 @@ pub struct RelayEntry {
db_relay: DbRelay,
view: RelayEntryView,
enabled: bool,
connected: bool,
user_count: Option<usize>,
usage: UsageBits,
accent: Color32,
@ -155,6 +156,7 @@ impl RelayEntry {
db_relay,
view: RelayEntryView::List,
enabled: true,
connected: false,
user_count: None,
usage,
accent,
@ -180,6 +182,10 @@ impl RelayEntry {
self.user_count = Some(count);
}
pub fn set_connected(&mut self, connected: bool) {
self.connected = connected;
}
// pub fn view(&self) -> RelayEntryView {
// self.view.clone()
// }
@ -312,7 +318,7 @@ impl RelayEntry {
let pos = rect.left_bottom() + vec2(TEXT_LEFT, -10.0 -OUTER_MARGIN_BOTTOM -line_height);
let id = self.make_id("remove_button");
let text = "Remove from personal list";
let response = draw_link_at(ui, id, pos, text.into(), Align::Min, self.enabled, true);
let mut response = draw_link_at(ui, id, pos, text.into(), Align::Min, self.enabled, true);
if response.clicked() {
// TODO remove relay
let _ = GLOBALS.to_overlord.send(
@ -320,15 +326,18 @@ impl RelayEntry {
);
}
let pos = pos + vec2(200.0, 0.0);
let id = self.make_id("disconnect_button");
let text = "Force disconnect";
let response = response | draw_link_at(ui, id, pos, text.into(), Align::Min, self.enabled, true);
if response.clicked() {
let _ = GLOBALS.to_overlord.send(
ToOverlordMessage::DropRelay(self.db_relay.url.to_owned()),
);
if self.connected {
let pos = pos + vec2(200.0, 0.0);
let id = self.make_id("disconnect_button");
let text = "Force disconnect";
response |= draw_link_at(ui, id, pos, text.into(), Align::Min, self.enabled, true);
if response.clicked() {
let _ = GLOBALS.to_overlord.send(
ToOverlordMessage::DropRelay(self.db_relay.url.to_owned()),
);
}
}
// pass the response back so the page knows the edit view should close
response
}