This commit is contained in:
2026-08-06 14:52:43 +07:00
parent 6d5d154486
commit 0c6d700395
4 changed files with 23 additions and 27 deletions
+16 -11
View File
@@ -9,7 +9,6 @@ use crate::backend::{Backend, BackendEvent};
/// their resolved statuses. Always derived from the local database.
pub struct RepoStore {
addr: RepoAddr,
addr_string: String,
pub announcement: Option<Announcement>,
/// `(refname, commit-id)` pairs from the latest state announcement.
pub refs: Vec<(String, String)>,
@@ -29,20 +28,27 @@ pub struct RepoStore {
impl RepoStore {
pub fn new(addr: RepoAddr, cx: &mut Context<Self>) -> Self {
let addr_string = addr.to_string();
let backend = Backend::global(cx);
let subscription = cx.subscribe(&Backend::global(cx), |this, _backend, event, cx| {
let subscription = cx.subscribe(&backend, |this, _backend, event, cx| {
let relevant = match event {
BackendEvent::NostrUpdate(update) => {
update.coordinate.as_deref() == Some(this.addr_string.as_str())
|| (update.kind == Kind::GitRepoAnnouncement
&& update.author == this.addr.owner)
let coordinate = update.coordinate.as_ref() == Some(&this.addr.coordinate());
let author = update.author == this.addr.owner;
let kind = update.kind == Kind::GitRepoAnnouncement;
coordinate || (author && kind)
}
BackendEvent::Published(event) => {
event.kind == Kind::GitRepoAnnouncement && event.pubkey == this.addr.owner
|| event.tags.iter().any(|t| {
t.kind() == "a" && t.content() == Some(this.addr_string.as_str())
})
let kind = event.kind == Kind::GitRepoAnnouncement;
let author = event.pubkey == this.addr.owner;
let coordinate = event
.tags
.coordinates()
.into_iter()
.any(|c| c == this.addr.coordinate());
coordinate || (kind && author)
}
_ => false,
};
@@ -54,7 +60,6 @@ impl RepoStore {
let mut store = Self {
addr,
addr_string,
announcement: None,
refs: Vec::new(),
head: None,
+5 -4
View File
@@ -21,15 +21,16 @@ impl RepoListStore {
/// Create a store. If `author` is `None`, all announcements are listed.
pub fn new(author: Option<PublicKey>, cx: &mut Context<Self>) -> Self {
let backend = Backend::global(cx);
let subscription = cx.subscribe(&backend, |this, _backend, event, cx| {
let git_kind = Kind::GitRepoAnnouncement;
let relevant = match event {
BackendEvent::NostrUpdate(update) => {
update.kind == Kind::GitRepoAnnouncement
&& this.author.is_none_or(|a| a == update.author)
update.kind == git_kind && this.author.is_none_or(|a| a == update.author)
}
BackendEvent::Published(event) => {
event.kind == Kind::GitRepoAnnouncement
&& this.author.is_none_or(|a| a == event.pubkey)
event.kind == git_kind && this.author.is_none_or(|a| a == event.pubkey)
}
BackendEvent::Synced | BackendEvent::SyncProgress { .. } => true,
_ => false,