OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / keet-core-4.14.4-pretty / lib / core / contract / members / labels.js

49 lines · javascript ref:
const e = require("../registration"),
  { isMemberActive: t, getMemberForDeviceKey: l } = require("../query"),
  a = require("b4a"),
  { KeetContractError: s } = require("../errors")
async function r({ header: e, key: r, label: c }, { db: o, writer: n }) {
  const [b, k, d] = await Promise.all([
    l(o, n.key),
    o.get("@keet/members", { key: r }),
    o.get("@keet/threads", { id: 0 }),
  ])
  if (!t(b) || !k || a.equals(b.key, k.key)) throw s.ABORT()
  if (await o.get("@keet/member-labels", { key: k.key, sender: b.key, label: c })) throw s.ABORT()
  const u = { key: k.key, sender: b.key, clock: d.stats.chat.clock, label: c }
  ;(await o.insert("@keet/member-labels", u), await i(o, d, u, null, e.timestamp))
}
function c(e) {
  e.add("@keet/add-member-label", r)
}
async function i(e, t, l, a, s) {
  if ((l && a) || (!l && !a)) return
  const r = l ? l.key : a.key,
    c = (await e.get("@keet/member-label-digests", { key: r })) || {
      key: r,
      total: 0,
      labels: [],
      editedAt: 0,
      flagsClock: 0,
    }
  ;(1 === (l || a).label &&
    !a &&
    ((t.stats.chat.flagsClock += 1), (c.flagsClock = t.stats.chat.flagsClock)),
    (c.editedAt = s),
    l
      ? (o(c, l.label), (t.stats.chat.clock += 1), (c.total += 1))
      : (n(c, a.label), (t.stats.chat.clock -= 1), (c.total -= 1)),
    await Promise.all([e.insert("@keet/threads", t), e.insert("@keet/member-label-digests", c)]))
}
function o(e, t) {
  const l = e.labels.findIndex((e) => e.label === t)
  ;-1 === l ? e.labels.push({ label: t, count: 1 }) : (e.labels[l].count += 1)
}
function n(e, t) {
  const l = e.labels.findIndex((e) => e.label === t)
  if (-1 === l) return
  const a = e.labels[l]
  ;((a.count -= 1), a.count > 0 || e.labels.splice(l, 1))
}
module.exports = { [e]: c }