2 lines
5.3 KiB
JavaScript
2 lines
5.3 KiB
JavaScript
"use strict";const e=require("../../common/vendor.js"),t=require("../../config/api.js"),o={data:()=>({API_BASE:t.API_BASE,works:[],page:0,size:10,loading:!1,hasMore:!0,loadedOnce:!1,hasCachedWorks:!1,enableVideoPreload:!1,preloadQueue:[],activePreloads:0,maxConcurrentPreloads:2,preloadingKeys:{}}),onLoad(){try{const t=e.index.getStorageSync("plaza_works_cache_v1");Array.isArray(t)&&t.length>0&&(this.works=t,this.hasCachedWorks=!0,this.loadedOnce=!0)}catch(t){this.hasCachedWorks=!1}this.loadWorks(!0)},onShow(){this.loadedOnce&&0!==this.works.length||this.loadWorks(!0)},methods:{normalizeMediaUrl(e){return e?e.startsWith("/")?`${this.API_BASE}${e}`:e.startsWith("http://115.190.167.176:20002")?e.replace("http://115.190.167.176:20002",this.API_BASE):e:e},generateCacheKey(e){let t=0;for(let o=0;o<e.length;o++){t=(t<<5)-t+e.charCodeAt(o),t&=t}return"video_"+Math.abs(t)},enqueuePreload(t){if(!this.enableVideoPreload)return;if(!t)return;const o=this.generateCacheKey(t);if(this.preloadingKeys[o])return;e.index.getStorageSync(o)||(this.preloadingKeys[o]=!0,this.preloadQueue.push({url:t,cacheKey:o}),this.processPreloadQueue())},processPreloadQueue(){for(;this.activePreloads<this.maxConcurrentPreloads&&this.preloadQueue.length>0;){const e=this.preloadQueue.shift();this.activePreloads+=1,this.preloadVideoToCache(e.url,e.cacheKey).finally((()=>{this.activePreloads=Math.max(0,this.activePreloads-1),this.processPreloadQueue()}))}},preloadVideoToCache(t,o){return new Promise((i=>{e.index.downloadFile({url:t,timeout:6e4,success:a=>{200===a.statusCode?e.index.saveFile({tempFilePath:a.tempFilePath,success:a=>{const r=a.savedFilePath;e.index.setStorageSync(o,r);const s=e.index.getStorageSync("video_cache_info")||{};s[o]={path:r,url:t,time:Date.now()},e.index.setStorageSync("video_cache_info",s),i()},fail:()=>{i()}}):i()},fail:()=>{i()},complete:()=>{this.preloadingKeys&&o&&(this.preloadingKeys[o]=!1)}})}))},preloadWorks(t){Array.isArray(t)&&0!==t.length&&e.index.getNetworkType({success:e=>{e&&"wifi"===e.networkType&&t.forEach((e=>{e&&e.contentUrl&&this.enqueuePreload(e.contentUrl)}))},fail:()=>{}})},getWorkTypeLabel:e=>({VOICE_CLONE:"声音克隆",PHOTO_REVIVAL:"照片复活",VIDEO_CALL:"视频对话"}[e]||"作品"),toggleLike(t){const o=e.index.getStorageSync("token")||"",i=e.index.getStorageSync("userId")||"";i?e.index.request({url:`${this.API_BASE}/api/works/${t.id}/like`,method:"POST",header:{"X-User-Id":i,Authorization:o?`Bearer ${o}`:""},success:o=>{var i;if(200===o.statusCode&&o.data&&o.data.success&&o.data.data)return t.liked=!!o.data.data.liked,void(t.likeCount=o.data.data.likeCount||0);e.index.showToast({title:(null==(i=o.data)?void 0:i.message)||"操作失败",icon:"none"})},fail:()=>{e.index.showToast({title:"操作失败",icon:"none"})}}):e.index.showToast({title:"请先登录",icon:"none"})},formatTime(e){if(!e)return"";const t=new Date(e);if(Number.isNaN(t.getTime()))return String(e);const o=e=>e<10?`0${e}`:`${e}`;return`${t.getFullYear()}-${o(t.getMonth()+1)}-${o(t.getDate())} ${o(t.getHours())}:${o(t.getMinutes())}:${o(t.getSeconds())}`},loadMore(){!this.loading&&this.hasMore&&this.loadWorks(!1)},loadWorks(o){if(this.loading)return;this.loading=!0;const i=e.index.getStorageSync("token")||"",a=e.index.getStorageSync("userId")||"";o&&(this.page=0,this.hasMore=!0,this.hasCachedWorks||(this.works=[])),e.index.request({url:`${this.API_BASE}${t.API_ENDPOINTS.works.plaza}?page=${this.page}&size=${this.size}`,method:"GET",header:{"X-User-Id":a,Authorization:i?`Bearer ${i}`:""},success:t=>{if(200===t.statusCode&&t.data){const a=(t.data.content||[]).map((e=>({...e,coverUrl:this.normalizeMediaUrl(e.coverUrl),contentUrl:this.normalizeMediaUrl(e.contentUrl),audioUrl:this.normalizeMediaUrl(e.audioUrl),workTypeLabel:this.getWorkTypeLabel(e.workType),likeCount:e.likeCount||0,liked:!!e.liked})));if(o){this.works=a,this.hasCachedWorks=!1;try{e.index.setStorageSync("plaza_works_cache_v1",a)}catch(i){}}else this.works=this.works.concat(a);return this.page+=1,this.hasMore=!t.data.last,void(this.loadedOnce=!0)}e.index.showToast({title:`加载失败(${t.statusCode})`,icon:"none"})},fail:()=>{e.index.showToast({title:"加载失败",icon:"none"})},complete:()=>{this.loading=!1}})},viewWork(t){if(!t||!t.contentUrl&&!t.editedVideoUrl&&!t.edited_video_url)return void e.index.showToast({title:"作品不可用",icon:"none"});const o=t.editedVideoUrl||t.edited_video_url||t.contentUrl;let i=`/pages/video-player/video-player?audioInVideo=1&url=${encodeURIComponent(o)}&title=${encodeURIComponent(t.title||"作品")}`;e.index.navigateTo({url:i})}}};const i=e._export_sfc(o,[["render",function(t,o,i,a,r,s){return e.e({a:r.loading&&0===r.works.length},r.loading&&0===r.works.length?{b:e.f(6,((e,t,o)=>({a:e})))}:r.loading||0!==r.works.length?{d:e.f(r.works,((t,o,i)=>e.e({a:t.coverUrl},t.coverUrl?{b:t.coverUrl}:{},{c:e.t(t.workTypeLabel),d:e.t(t.title),e:e.t(t.userNickname||"匿名"),f:e.t(s.formatTime(t.publishedAt||t.createdAt)),g:e.t(t.liked?"❤️":"🤍"),h:e.t(t.likeCount||0),i:t.liked?1:"",j:e.o((e=>s.toggleLike(t)),t.id),k:e.o((()=>{}),t.id),l:t.id,m:e.o((e=>s.viewWork(t)),t.id)})))}:{},{c:!r.loading&&0===r.works.length,e:r.loading&&r.works.length>0},(r.loading&&r.works.length,{}),{f:!r.hasMore&&r.works.length>0},(!r.hasMore&&r.works.length,{}),{g:e.o(((...e)=>s.loadMore&&s.loadMore(...e)))})}],["__scopeId","data-v-2b48ee52"]]);wx.createPage(i);
|