room-queue.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const IDS_KEY = 'hl88live:room_queue_ids'
  2. const THUMBS_KEY = 'hl88live:room_queue_thumbs'
  3. const INDEX_KEY = 'hl88live:room_queue_index'
  4. const META_KEY = 'hl88live:room_queue_meta'
  5. function normalizeMetaList(metas, len) {
  6. const list = Array.isArray(metas) ? metas.slice() : []
  7. while (list.length < len) list.push({})
  8. return list.slice(0, len)
  9. }
  10. export function saveRoomQueue(ids, thumbs, activeIndex = 0, metas) {
  11. const idList = ids.map(String)
  12. const prevMetas = normalizeMetaList(uni.getStorageSync(META_KEY), idList.length)
  13. const metaList = metas !== undefined ? normalizeMetaList(metas, idList.length) : prevMetas
  14. uni.setStorageSync(IDS_KEY, idList)
  15. uni.setStorageSync(THUMBS_KEY, thumbs.map((t) => String(t || '')))
  16. uni.setStorageSync(INDEX_KEY, activeIndex)
  17. uni.setStorageSync(META_KEY, metaList)
  18. }
  19. export function readRoomQueue(currentId) {
  20. const ids = uni.getStorageSync(IDS_KEY)
  21. if (!Array.isArray(ids) || !ids.length) {
  22. return { ids: [], thumbs: [], index: 0, meta: {}, metas: [] }
  23. }
  24. const thumbs = uni.getStorageSync(THUMBS_KEY) || []
  25. const metas = normalizeMetaList(uni.getStorageSync(META_KEY), ids.length)
  26. const found = ids.indexOf(String(currentId))
  27. const storedIndex = uni.getStorageSync(INDEX_KEY)
  28. const index = found >= 0 ? found : Number(storedIndex) || 0
  29. return {
  30. ids: ids.map(String),
  31. thumbs: Array.isArray(thumbs) ? thumbs.map(String) : [],
  32. index,
  33. metas,
  34. meta: metas[index] || {}
  35. }
  36. }
  37. export function patchRoomMeta(roomId, patch) {
  38. const ids = uni.getStorageSync(IDS_KEY)
  39. if (!Array.isArray(ids) || !ids.length) return
  40. const idx = ids.indexOf(String(roomId))
  41. if (idx < 0) return
  42. const metas = normalizeMetaList(uni.getStorageSync(META_KEY), ids.length)
  43. metas[idx] = { ...(metas[idx] || {}), ...(patch || {}) }
  44. uni.setStorageSync(META_KEY, metas)
  45. }
  46. export function neighborRoom(queue, offset) {
  47. const next = queue.index + offset
  48. if (next < 0 || next >= queue.ids.length) return null
  49. return {
  50. id: queue.ids[next],
  51. thumb: queue.thumbs[next] || '',
  52. meta: (queue.metas && queue.metas[next]) || {},
  53. index: next
  54. }
  55. }