OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / stats / flow / join-room.js

50 lines · javascript ref:
import { takeLeading as o, setContext as t, getContext as n, all as e } from "redux-saga/effects"
import { ENV_CONTEXT_KEY as i } from "../../constants"
import {
  joinRoomSubmit as a,
  setPairingRoom as s,
  clearPairingRoom as d,
  addOrRemoveRecentRoom as r,
  PAIRING_STATUS as m,
  RECENT_ROOM_UPDATE as l,
} from "../../room"
import {
  TIME_CONTEXT_KEY as c,
  takeStep as f,
  sequence as u,
  step as y,
  printFlow as p,
  createTimeContext as g,
  parallel as D,
} from "./flow.model"
const R = () => (o) => !!s.match(o) && o.payload.status === m.ASKED,
  h = () => (o) => r.match(o) && o.payload.type === l.ADDED,
  E = (o) => (t) => {
    if (!d.match(t)) return !1
    const { seedId: n, status: e } = t.payload
    return e === m.COMPLETED && o === n
  }
export function* statsJoinRoomSaga(o) {
  let n
  if ((yield t({ [c]: g() }), a.match(o))) {
    const o = Date.now()
    ;(yield t({ [c]: g(o) }), (n = y(a, { startTime: o, doneTime: o })))
  } else n = yield f(a)
  const i = yield f(R())
  i.info = "asked"
  const { seedId: s } = i.action.payload,
    [d, r] = yield e([f(E(s)), f(h())])
  return ((d.info = "complete"), (r.info = "added"), u("join room", [n, i, D([d, r])]))
}
export function* statsJoinRoom(t) {
  const { timeStats: e } = yield n(i),
    { log: s } = e || {}
  ;(s("join room"),
    yield o(a, function* (o) {
      if (t.running) return
      t.lockRunning()
      const n = yield statsJoinRoomSaga(o)
      ;(yield p(n), t.unlockRunning())
    }))
}