better avatar event

This commit is contained in:
Daniel Lugo 2020-02-20 18:24:10 -04:00
parent c5016495e3
commit fba877e814

View file

@ -77,29 +77,52 @@ const __onUserToIncoming = (cb, user, SEA) => {
}) })
} }
/** @type {Set<(av: string|null) => void>} */
const avatarListeners = new Set()
/** @type {string|null} */
let currentAvatar = null
const getAvatar = () => currentAvatar
/** @param {string|null} av */
const setAvatar = av => {
currentAvatar = av
avatarListeners.forEach(l => l(currentAvatar))
}
let avatarSubbed = false
/** /**
* @param {(avatar: string|null) => void} cb * @param {(avatar: string|null) => void} cb
* @param {UserGUNNode} user Pass only for testing purposes. * @param {UserGUNNode} user Pass only for testing purposes.
* @throws {Error} If user hasn't been auth. * @throws {Error} If user hasn't been auth.
* @returns {void} * @returns {() => void}
*/ */
const onAvatar = (cb, user) => { const onAvatar = (cb, user) => {
if (!user.is) { if (!user.is) {
throw new Error(ErrorCode.NOT_AUTH) throw new Error(ErrorCode.NOT_AUTH)
} }
const callb = debounce(cb, DEBOUNCE_WAIT_TIME) avatarListeners.add(cb)
// Initial value if avvatar is undefined in gun
callb(null)
user cb(currentAvatar)
.get(Key.PROFILE)
.get(Key.AVATAR) if (!avatarSubbed) {
.on(avatar => { avatarSubbed = true
if (typeof avatar === 'string' || avatar === null) { user
callb(avatar) .get(Key.PROFILE)
} .get(Key.AVATAR)
}) .on(avatar => {
if (typeof avatar === 'string' || avatar === null) {
setAvatar(avatar)
}
})
}
return () => {
avatarListeners.delete(cb)
}
} }
/** /**
@ -531,5 +554,6 @@ module.exports = {
getCurrentSentReqs: require('./onSentReqs').getCurrentSentReqs, getCurrentSentReqs: require('./onSentReqs').getCurrentSentReqs,
onBio, onBio,
onSeedBackup, onSeedBackup,
onChats onChats,
getAvatar
} }