series-handoff.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /**
  2. * 合辑播放页数据交接:列表太大不宜放 URL,走内存 + storage 双写。
  3. * navigateTo 前 stash,目标页 onLoad/onReady take(只取一次)。
  4. */
  5. const MEM_KEY = '__series_reel_handoff__'
  6. const STORE_KEY = 'hl88app:series_reel_handoff'
  7. /**
  8. * @param {{
  9. * seriesId?: string|number,
  10. * startId?: string|number,
  11. * seriesList?: Array,
  12. * user?: object|null,
  13. * isFollow?: number|boolean,
  14. * anchor?: object|null
  15. * }} pack
  16. */
  17. export function stashSeriesHandoff(pack) {
  18. const payload = pack && typeof pack === 'object' ? pack : null
  19. try {
  20. const app = getApp()
  21. if (app) {
  22. app.globalData = app.globalData || {}
  23. app.globalData[MEM_KEY] = payload
  24. }
  25. } catch (_) {}
  26. try {
  27. if (payload) uni.setStorageSync(STORE_KEY, payload)
  28. else uni.removeStorageSync(STORE_KEY)
  29. } catch (_) {}
  30. }
  31. /** @returns {object|null} */
  32. export function takeSeriesHandoff() {
  33. let pack = null
  34. try {
  35. const app = getApp()
  36. if (app && app.globalData && app.globalData[MEM_KEY]) {
  37. pack = app.globalData[MEM_KEY]
  38. delete app.globalData[MEM_KEY]
  39. }
  40. } catch (_) {}
  41. if (!pack) {
  42. try {
  43. pack = uni.getStorageSync(STORE_KEY) || null
  44. uni.removeStorageSync(STORE_KEY)
  45. } catch (_) {}
  46. }
  47. return pack && typeof pack === 'object' ? pack : null
  48. }
  49. /** 把 series_list 项规整成 vertical-reel 可播的 clip */
  50. export function normalizeSeriesClip(raw = {}, extras = {}) {
  51. const video = raw.video || {}
  52. const seriesId =
  53. extras.seriesId != null && extras.seriesId !== ''
  54. ? extras.seriesId
  55. : raw.pid != null
  56. ? raw.pid
  57. : raw.series_id
  58. const seriesList = Array.isArray(extras.seriesList)
  59. ? extras.seriesList
  60. : Array.isArray(raw.series_list)
  61. ? raw.series_list
  62. : []
  63. const paid =
  64. video.paid_money != null && video.paid_money !== ''
  65. ? video.paid_money
  66. : raw.paid_money != null
  67. ? raw.paid_money
  68. : 0
  69. return {
  70. ...raw,
  71. id: raw.id,
  72. series_item_id: raw.series_item_id != null && raw.series_item_id !== '' ? raw.series_item_id : raw.id,
  73. series_id: seriesId,
  74. content: raw.title || raw.content || '',
  75. user: extras.user != null ? extras.user : raw.user || null,
  76. isFollow: extras.isFollow != null ? extras.isFollow : raw.isFollow || 0,
  77. isLike: raw.isLike || 0,
  78. likes: raw.likes || 0,
  79. comments: raw.comments || 0,
  80. series_list: seriesList,
  81. play: false,
  82. initialTime: 0,
  83. userPaused: false,
  84. _captionExpanded: false,
  85. _localSrc: '',
  86. video: {
  87. id: video.id || '',
  88. video_id: video.video_id || raw.video_id || '',
  89. url: video.url || '',
  90. cover_url: video.cover_url || video.snapshots || '',
  91. width: video.width || 0,
  92. height: video.height || 0,
  93. fit: video.fit || 'cover',
  94. duration: video.duration,
  95. paid_money: paid
  96. }
  97. }
  98. }