OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / uploads / cache / uploads-cache.saga.js

58 lines · javascript ref:
import {
  put as o,
  call as t,
  getContext as e,
  select as s,
  delay as i,
  takeLatest as r,
} from "redux-saga/effects"
import { LOCAL_STORAGE_CONTEXT_KEY as a } from "../../constants"
import { taskErrorSaga as d } from "../../error"
import {
  uploadsHydrateEvt as l,
  clearUpload as n,
  setUpload as c,
  setBatchUploads as p,
  updateUploadWithMetadata as m,
  updateUpload as y,
  updateUploadFileState as f,
  startUploadingSend as u,
  setProcessingFlag as g,
} from "../uploads.action"
import { getUploadsMap as S, getRoomsMap as h } from "../uploads.selectors"
import {
  UPLOADS_CACHE_KEY as I,
  UPLOADS_CACHE_PERSIST_DEBOUNCE as x,
} from "./uploads-cache.constant"
export function* uploadsInitData() {
  try {
    const s = yield e(a),
      i = yield t(s.getItem, I)
    if (!i) return
    const r = "string" == typeof i ? JSON.parse(i) : i,
      d = r.uploads || {},
      c = r.rooms || {}
    yield o(l({ uploads: d, rooms: c }))
    const p = Object.keys(d)
    for (let t = 0; t < p.length; t += 1) {
      const e = p[t]
      d[e] && d[e].isSending && (yield o(n({ id: e })))
    }
  } catch (o) {
    yield d("uploadsInitData", o)
  }
}
export function* uploadsPersistSaga() {
  yield r([c, p, m, y, f, u, n, g, l], function* () {
    yield i(x)
    try {
      const o = yield s(S),
        i = yield s(h),
        r = yield e(a)
      yield t(r.setItem, I, JSON.stringify({ uploads: o, rooms: i }))
    } catch (o) {
      yield d("uploadsPersistSaga", o)
    }
  })
}