OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / call / utils.js

68 lines · javascript ref:
import { PRESENCE_EVT as e } from "./call.constants"
export const getEmptyMemberPresence = ({ memberId: e, swarmId: t }) => ({
  memberId: e,
  swarmId: t,
  streamByName: {},
})
export const getEmptyMemberMedia = ({ swarmId: e, memberId: t }) => ({
  id: e,
  memberId: t,
  streamByName: {},
})
export const hasStreamEverAdded = ({ streamId: t }, r) =>
  !(
    !t ||
    !Array.isArray(r) ||
    r.length < 1 ||
    !r.find((r) => r?.type === e.ADD_STREAM && r?.streamId === t)
  )
export const memberHasMedia = (e, t) => {
  const r = t[e]?.streamByName || {}
  return Object.keys(r).length > 0
}
export const getNextPositionPreservedList = (e, t) => {
  const r = [],
    s = [],
    c = e.length === t.length
  let n = c
  return (
    e.forEach((e, c) => {
      const o = t.findIndex((t) => t.swarmId === e.swarmId)
      o > -1 ? (s.push(e), t.splice(o, 1)) : ((n = !1), s.push(void 0), r.push(c))
    }),
    n
      ? e
      : (r.forEach((e) => {
          s[e] = t.pop()
        }),
        c ? s : (t.forEach((e) => s.push(e)), s.filter((e) => void 0 !== e)))
  )
}
export const getMyDeviceId = (e) => e?.self?.deviceId || null
export const isDeviceInCall = (e, t) =>
  e?.members?.some((e) => e.devices?.some((e) => e.deviceId === t)) || !1
export const createEmptyPresenceEntry = (e) => ({ swarmId: e, activityScore: 0 })
export const mergeActivePresences = (e, t, r) => {
  const s = t.map((e) => r[e] || e),
    c = new Set(s),
    n = e.filter((e) => c.has(e.swarmId)),
    o = new Set(n.map((e) => e.swarmId))
  return [...n, ...s.filter((e) => !o.has(e)).map(createEmptyPresenceEntry)]
}
export const calcActivityScore = (e, t) => (!1 !== e ? 0 : 1) + (!1 !== t ? 0 : 0.5)
export const updatePresencesSortedByActivity = (e, t, r, s) => {
  const c = calcActivityScore(r, s),
    n = [...e.presencesSortedByActivity],
    o = n.find((e) => e.swarmId === t)
  if (o && o.activityScore === c) return e.presencesSortedByActivity
  const i = { swarmId: t, activityScore: c },
    d = n.findIndex((e) => e.swarmId === i.swarmId)
  ;-1 !== d && n.splice(d, 1)
  let m = n.findIndex((e) => e.activityScore <= i.activityScore)
  return (-1 === m && (m = n.length), n.splice(m, 0, i), n)
}
export const removeFromPresencesSortedByActivity = (e, t) => {
  const r = e.presencesSortedByActivity.filter((e) => e.swarmId !== t)
  return r.length === e.presencesSortedByActivity.length ? e.presencesSortedByActivity : r
}