diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/client.rs | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs index 7cd3c46..5ba64ff 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -973,14 +973,29 @@ pub async fn get_repo_ref_from_cache( | |||
| 973 | } | 973 | } |
| 974 | } | 974 | } |
| 975 | 975 | ||
| 976 | // use relays and git servers from all maintainer announcement event | 976 | // Use relays and git servers from all maintainer announcement events |
| 977 | let mut relays: HashSet<RelayUrl> = HashSet::from_iter(repo_ref.relays.iter().cloned()); | 977 | // we use Vec and HashSet to remove duplicates and preserve order |
| 978 | let mut git_servers: HashSet<String> = HashSet::from_iter(repo_ref.git_server.iter().cloned()); | 978 | let mut relays: Vec<RelayUrl> = repo_ref.relays.clone(); |
| 979 | let mut git_server: Vec<String> = repo_ref.git_server.clone(); | ||
| 980 | let mut seen_relays: HashSet<RelayUrl> = HashSet::from_iter(relays.iter().cloned()); | ||
| 981 | let mut seen_git_server: HashSet<String> = git_server | ||
| 982 | .iter() | ||
| 983 | .map(|server| server.trim_end_matches('/').to_string()) | ||
| 984 | .collect(); | ||
| 985 | |||
| 979 | for m in &maintainers { | 986 | for m in &maintainers { |
| 980 | if let Some(event) = repo_events.iter().find(|e| e.pubkey == *m) { | 987 | if let Some(event) = repo_events.iter().find(|e| e.pubkey == *m) { |
| 981 | if let Ok(m_repo_ref) = RepoRef::try_from((event.clone(), None)) { | 988 | if let Ok(m_repo_ref) = RepoRef::try_from((event.clone(), None)) { |
| 982 | relays.extend(m_repo_ref.relays); | 989 | for relay in m_repo_ref.relays { |
| 983 | git_servers.extend(m_repo_ref.git_server); | 990 | if seen_relays.insert(relay.clone()) { |
| 991 | relays.push(relay); | ||
| 992 | } | ||
| 993 | } | ||
| 994 | for server in m_repo_ref.git_server { | ||
| 995 | if seen_git_server.insert(server.trim_end_matches('/').to_string()) { | ||
| 996 | git_server.push(server); | ||
| 997 | } | ||
| 998 | } | ||
| 984 | } | 999 | } |
| 985 | } | 1000 | } |
| 986 | } | 1001 | } |
| @@ -989,8 +1004,8 @@ pub async fn get_repo_ref_from_cache( | |||
| 989 | // use all maintainers from all events found, not just maintainers in the most | 1004 | // use all maintainers from all events found, not just maintainers in the most |
| 990 | // recent event | 1005 | // recent event |
| 991 | maintainers: maintainers.iter().copied().collect::<Vec<PublicKey>>(), | 1006 | maintainers: maintainers.iter().copied().collect::<Vec<PublicKey>>(), |
| 992 | relays: relays.into_iter().collect(), | 1007 | relays, |
| 993 | git_server: git_servers.into_iter().collect(), | 1008 | git_server, |
| 994 | events, | 1009 | events, |
| 995 | ..repo_ref | 1010 | ..repo_ref |
| 996 | }) | 1011 | }) |