OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / app / saga / mobile-room-notifications.saga.js

79 lines · javascript ref:
import { all as e, select as o, put as r, fork as i, call as t } from "redux-saga/effects"
import { apiTakeEvery as m } from "../../lib"
import { frequencyCalculator as a } from "../../lib/frequency-calculator"
import { getCoreBackend as d } from "../../../backend"
import { apiCall as s } from "../../../api/core"
import { taskErrorSaga as c } from "../../error"
import {
  getNotificationFrequenceResetInterval as l,
  NOTIFICATION_CODE as n,
  NOTIFICATION_MAX_FREQUENCY as f,
  userCustomNotification as p,
} from "../../notification"
import {
  roomNewActivity as y,
  parseRoomConfigResponse as b,
  ROOM_TYPE as g,
  getRoomNotificationById as u,
} from "../../room"
import { parseMessage as I, chatGetMessageRender as k } from "../../chat"
import { getAppCurrentRoomId as M, getLastToastNotificationSeen as h } from "../app.reducer"
import { getMyMemberId as x } from "../../identity"
import { notifyCallStartEndSaga as T } from "./desktop-room-notifications.saga"
function* N({ roomId: o, message: i }) {
  const t = d(),
    [m, a, c] = yield e([
      s(t.getRoomInfo, o),
      s(t.getMember, o, i.memberId),
      s(t.getBlockedMembers),
    ]),
    { title: l, roomType: f } = b(m.config, o),
    y = f === g.DM,
    {
      member: u,
      messageText: I,
      isBlocked: M,
      messageDisplay: h,
    } = yield k({
      roomId: o,
      message: i,
      memberData: a,
      blockedMembers: c,
      disabledCapabilities: y,
    })
  M ||
    (yield r(
      p({
        code: n.ROOM_ACTIVITY,
        roomId: o,
        roomTitle: y ? u.displayName : l,
        roomType: f,
        roomMessage: { ...i, display: h, chat: I ? { ...i.chat, text: I } : i.chat, blocked: M },
        member: { isLocal: !1, displayName: u?.displayName, blocked: M },
      }),
    ))
}
function* v(m, { roomId: a, index: l }) {
  try {
    if (!a || !Number.isInteger(l)) return
    yield r(y(a))
    const [c, n, p, b] = yield e([o(x), o(u(a)), o(M), o(h)])
    if (!n || p === a) return
    const g = d(),
      k = l,
      v = yield s(g.getChatMessage, a, k),
      { message: A } = I(v)
    if (b && A.timestamp < b) return
    if (A.memberId === c) return
    if (A.event?.type) return void (yield t(T, A, a))
    m.updateFrequency() <= f && (yield i(N, { roomId: a, message: A }))
  } catch (e) {
    yield c("roomActivityHandler", e)
  }
}
export function* mobileRoomNotificationsSaga() {
  const e = yield o(l),
    r = a(e)
  yield m([d().subscribeUnreadActivity, { all: !0, includeIndex: !0 }], (e) => i(v, r, e))
}