diff options
Diffstat (limited to 'src/lib/repo_ref.rs')
| -rw-r--r-- | src/lib/repo_ref.rs | 97 |
1 files changed, 40 insertions, 57 deletions
diff --git a/src/lib/repo_ref.rs b/src/lib/repo_ref.rs index aa7a1d2..2ef4b8c 100644 --- a/src/lib/repo_ref.rs +++ b/src/lib/repo_ref.rs | |||
| @@ -43,67 +43,50 @@ impl TryFrom<nostr::Event> for RepoRef { | |||
| 43 | } | 43 | } |
| 44 | let mut r = Self::default(); | 44 | let mut r = Self::default(); |
| 45 | 45 | ||
| 46 | if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("d")) { | 46 | for tag in event.tags.iter() { |
| 47 | r.identifier = t.as_slice()[1].clone(); | 47 | match tag.as_slice() { |
| 48 | } | 48 | [t, id] if t == "d" => r.identifier = id.clone(), |
| 49 | 49 | [t, name] if t == "name" => r.name = name.clone(), | |
| 50 | if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("name")) { | 50 | [t, description] if t == "description" => r.description = description.clone(), |
| 51 | r.name = t.as_slice()[1].clone(); | 51 | [t, clone @ ..] if t == "clone" => { |
| 52 | } | 52 | r.git_server = clone.to_vec(); |
| 53 | |||
| 54 | if let Some(t) = event | ||
| 55 | .tags | ||
| 56 | .iter() | ||
| 57 | .find(|t| t.as_slice()[0].eq("description")) | ||
| 58 | { | ||
| 59 | r.description = t.as_slice()[1].clone(); | ||
| 60 | } | ||
| 61 | |||
| 62 | if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("clone")) { | ||
| 63 | r.git_server = t.clone().to_vec(); | ||
| 64 | r.git_server.remove(0); | ||
| 65 | } | ||
| 66 | |||
| 67 | if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("web")) { | ||
| 68 | r.web = t.clone().to_vec(); | ||
| 69 | r.web.remove(0); | ||
| 70 | } | ||
| 71 | |||
| 72 | if let Some(t) = event.tags.iter().find(|t| { | ||
| 73 | t.as_slice()[0].eq("r") | ||
| 74 | && t.as_slice()[1].len().eq(&40) | ||
| 75 | && git2::Oid::from_str(t.as_slice()[1].as_str()).is_ok() | ||
| 76 | }) { | ||
| 77 | r.root_commit = t.as_slice()[1].clone(); | ||
| 78 | } | ||
| 79 | |||
| 80 | if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("relays")) { | ||
| 81 | for relay in t.clone().to_vec() { | ||
| 82 | if let Ok(relay) = RelayUrl::parse(relay) { | ||
| 83 | r.relays.push(relay); | ||
| 84 | } | 53 | } |
| 54 | [t, web @ ..] if t == "web" => { | ||
| 55 | r.web = web.to_vec(); | ||
| 56 | } | ||
| 57 | [t, commit_id] | ||
| 58 | if t == "r" | ||
| 59 | && commit_id.len() == 40 | ||
| 60 | && git2::Oid::from_str(commit_id).is_ok() => | ||
| 61 | { | ||
| 62 | r.root_commit = commit_id.clone(); | ||
| 63 | } | ||
| 64 | [t, relays @ ..] if t == "relays" => { | ||
| 65 | for relay in relays { | ||
| 66 | if let Ok(relay_url) = RelayUrl::parse(relay) { | ||
| 67 | r.relays.push(relay_url); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | } | ||
| 71 | [t, maintainers @ ..] if t == "maintainers" => { | ||
| 72 | if !maintainers.contains(&event.pubkey.to_string()) { | ||
| 73 | r.maintainers.push(event.pubkey); | ||
| 74 | } | ||
| 75 | for pk in maintainers { | ||
| 76 | r.maintainers.push( | ||
| 77 | nostr_sdk::prelude::PublicKey::from_str(pk) | ||
| 78 | .context(format!("failed to convert entry from maintainers tag {pk} into a valid nostr public key. it should be in hex format")) | ||
| 79 | .context("invalid repository event")?, | ||
| 80 | ); | ||
| 81 | } | ||
| 82 | } | ||
| 83 | _ => {} | ||
| 85 | } | 84 | } |
| 86 | } | 85 | } |
| 87 | 86 | ||
| 88 | if let Some(t) = event | 87 | // If no maintainers were added, add the event's public key |
| 89 | .tags | 88 | if r.maintainers.is_empty() { |
| 90 | .iter() | 89 | r.maintainers.push(event.pubkey); |
| 91 | .find(|t| t.as_slice()[0].eq("maintainers")) | ||
| 92 | { | ||
| 93 | let mut maintainers = t.clone().to_vec(); | ||
| 94 | maintainers.remove(0); | ||
| 95 | if !maintainers.contains(&event.pubkey.to_string()) { | ||
| 96 | r.maintainers.push(event.pubkey); | ||
| 97 | } | ||
| 98 | for pk in maintainers { | ||
| 99 | r.maintainers.push( | ||
| 100 | nostr_sdk::prelude::PublicKey::from_str(&pk) | ||
| 101 | .context(format!("failed to convert entry from maintainers tag {pk} into a valid nostr public key. it should be in hex format")) | ||
| 102 | .context("invalid repository event")?, | ||
| 103 | ); | ||
| 104 | } | ||
| 105 | } else { | ||
| 106 | r.maintainers = vec![event.pubkey]; | ||
| 107 | } | 90 | } |
| 108 | r.events = HashMap::new(); | 91 | r.events = HashMap::new(); |
| 109 | r.events.insert( | 92 | r.events.insert( |