Pending items for setting up relays (of each class: READ, WRITE, DISCOVER, DM)

This commit is contained in:
Mike Dilger 2024-06-21 10:20:05 +12:00
parent ad7f832863
commit 8bb4ea0aaf
2 changed files with 59 additions and 0 deletions

View File

@ -50,6 +50,9 @@ impl<'a> Notification<'a> for Pending {
}
fn show(&mut self, theme: &Theme, ui: &mut Ui) -> Option<Page> {
// we allow unreadchable "_" in case gossip_lib adds to this enum we still
// want it to compile.
#[allow(unreachable_patterns)]
match self.inner {
PendingItem::RelayAuthenticationRequest { .. } => None,
PendingItem::RelayConnectionRequest { .. } => None,
@ -68,6 +71,11 @@ impl<'a> Notification<'a> for Pending {
PendingItem::PersonListNotPublishedRecently(list) => {
self.person_list_not_published_recently(theme, ui, list)
}
PendingItem::NeedReadRelays => self.need_relays(theme, ui, "READ"),
PendingItem::NeedWriteRelays => self.need_relays(theme, ui, "WRITE"),
PendingItem::NeedDiscoverRelays => self.need_relays(theme, ui, "DISCOVER"),
PendingItem::NeedDMRelays => self.need_relays(theme, ui, "DM"),
_ => None,
}
}
}
@ -301,4 +309,22 @@ impl Pending {
};
self.layout(theme, ui, description, action)
}
fn need_relays(&mut self, theme: &Theme, ui: &mut Ui, which: &'static str) -> Option<Page> {
let description = |_theme: &Theme, ui: &mut Ui| -> Option<Page> {
ui.label(format!("Your have not selected any {} relays", which));
None
};
let action = |theme: &Theme, ui: &mut Ui| -> Option<Page> {
let mut new_page = None;
ui.scope(|ui| {
super::manage_style(theme, ui.style_mut());
if ui.button("Manage Relays").clicked() {
new_page = Some(crate::ui::Page::RelaysMine);
}
});
new_page
};
self.layout(theme, ui, description, action)
}
}

View File

@ -3,6 +3,7 @@ use crate::error::{Error, ErrorKind};
use crate::globals::GLOBALS;
use crate::nip46::ParsedCommand;
use crate::people::PersonList;
use crate::relay::Relay;
use nostr_types::{EventKind, Filter, PublicKey, PublicKeyHex, RelayList, RelayUrl, Unixtime};
use parking_lot::RwLock as PRwLock;
use parking_lot::RwLockReadGuard as PRwLockReadGuard;
@ -48,6 +49,10 @@ pub enum PendingItem {
// PROBLEM: Often there is a dead relay on somebody's list and so these events pile
// up far too much.
// RetryPost(Id),
NeedReadRelays,
NeedWriteRelays,
NeedDiscoverRelays,
NeedDMRelays,
}
pub struct Pending {
@ -281,6 +286,34 @@ impl Pending {
}
}
let relay_urls = Relay::choose_relay_urls(Relay::READ, |_| true)?;
if relay_urls.is_empty() {
self.insert(PendingItem::NeedReadRelays);
} else {
self.remove(&PendingItem::NeedReadRelays);
}
let relay_urls = Relay::choose_relay_urls(Relay::WRITE, |_| true)?;
if relay_urls.is_empty() {
self.insert(PendingItem::NeedWriteRelays);
} else {
self.remove(&PendingItem::NeedWriteRelays);
}
let relay_urls = Relay::choose_relay_urls(Relay::DISCOVER, |_| true)?;
if relay_urls.is_empty() {
self.insert(PendingItem::NeedDiscoverRelays);
} else {
self.remove(&PendingItem::NeedDiscoverRelays);
}
let relay_urls = Relay::choose_relay_urls(Relay::DM, |_| true)?;
if relay_urls.is_empty() {
self.insert(PendingItem::NeedDMRelays);
} else {
self.remove(&PendingItem::NeedDMRelays);
}
{
let pending = self.pending.read();
*self.pending_hash.write() = calculate_pending_hash(&pending);