From df122d6150e9714c1827ecf2b01d57e4bbeb7e22 Mon Sep 17 00:00:00 2001 From: Kieran Date: Fri, 27 Jan 2023 18:57:15 +0000 Subject: [PATCH] bug: unfollow not working --- src/Element/FollowButton.tsx | 3 ++- src/Feed/EventPublisher.ts | 13 ++++++++----- src/State/Login.ts | 14 +++++++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Element/FollowButton.tsx b/src/Element/FollowButton.tsx index 747813bb..2c929c9c 100644 --- a/src/Element/FollowButton.tsx +++ b/src/Element/FollowButton.tsx @@ -4,13 +4,14 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faUserMinus, faUserPlus } from "@fortawesome/free-solid-svg-icons"; import { HexKey } from "Nostr"; import { RootState } from "State/Store"; +import { parseId } from "Util"; export interface FollowButtonProps { pubkey: HexKey, className?: string, } export default function FollowButton(props: FollowButtonProps) { - const pubkey = props.pubkey; + const pubkey = parseId(props.pubkey); const publiser = useEventPublisher(); const isFollowing = useSelector(s => s.login.follows?.includes(pubkey) ?? false); const baseClassName = isFollowing ? `btn btn-warn follow-button` : `btn btn-success follow-button` diff --git a/src/Feed/EventPublisher.ts b/src/Feed/EventPublisher.ts index a327c419..3c8cbd8c 100644 --- a/src/Feed/EventPublisher.ts +++ b/src/Feed/EventPublisher.ts @@ -71,8 +71,8 @@ export default function useEventPublisher() { return match; } const content = msg.replace(/@npub[a-z0-9]+/g, replaceNpub) - .replace(/note[a-z0-9]+/g, replaceNoteId) - .replace(HashtagRegex, replaceHashtag); + .replace(/note[a-z0-9]+/g, replaceNoteId) + .replace(HashtagRegex, replaceHashtag); ev.Content = content; } @@ -89,8 +89,8 @@ export default function useEventPublisher() { * When they open the site again we wont see that updated relay list and so it will appear to reset back to the previous state */ broadcastForBootstrap: (ev: NEvent | undefined) => { - if(ev) { - for(let [k, _] of DefaultRelays) { + if (ev) { + for (let [k, _] of DefaultRelays) { System.WriteOnceToRelay(k, ev); } } @@ -182,6 +182,9 @@ export default function useEventPublisher() { temp.add(pkAdd); } for (let pk of temp) { + if (pk.length !== 64) { + continue; + } ev.Tags.push(new Tag(["p", pk], ev.Tags.length)); } @@ -194,7 +197,7 @@ export default function useEventPublisher() { ev.Kind = EventKind.ContactList; ev.Content = JSON.stringify(relays); for (let pk of follows) { - if (pk === pkRemove) { + if (pk === pkRemove || pk.length !== 64) { continue; } ev.Tags.push(new Tag(["p", pk], ev.Tags.length)); diff --git a/src/State/Login.ts b/src/State/Login.ts index ce3d4f4c..90f1960e 100644 --- a/src/State/Login.ts +++ b/src/State/Login.ts @@ -206,21 +206,29 @@ const LoginSlice = createSlice({ state.relays = { ...state.relays }; window.localStorage.setItem(RelayListKey, JSON.stringify(state.relays)); }, - setFollows: (state, action: PayloadAction) => { + setFollows: (state, action: PayloadAction) => { let existing = new Set(state.follows); let update = Array.isArray(action.payload) ? action.payload : [action.payload]; let changes = false; - for (let pk of update) { + for (let pk of update.filter(a => a.length === 64)) { if (!existing.has(pk)) { existing.add(pk); changes = true; } } + for (let pk of existing) { + if (!update.includes(pk)) { + existing.delete(pk); + changes = true; + } + } + if (changes) { state.follows = Array.from(existing); - window.localStorage.setItem(FollowList, JSON.stringify(state.follows)); } + + window.localStorage.setItem(FollowList, JSON.stringify(state.follows)); }, addNotifications: (state, action: PayloadAction) => { let n = action.payload;