From 53cc91069c43453974e5bfaf27c5afcdcd734f86 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 16 May 2021 22:42:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8E=B7=E5=8F=96=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E5=88=97=E8=A1=A8=E6=97=B6=E5=BF=AB=E9=80=9F=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E4=BC=9A=E5=AF=BC=E8=87=B4APP=E9=97=AA=E9=80=80?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 12 ++++++---- publish/changeLog.md | 5 ++--- src/utils/errorHandle.js | 2 +- src/utils/music/kg/leaderboard.js | 26 +++++----------------- src/utils/music/kw/index.js | 21 +++++------------- src/utils/music/kw/leaderboard.js | 24 +++++--------------- src/utils/music/kw/musicSearch.js | 24 +++++--------------- src/utils/music/tx/leaderboard.js | 37 +++++++++---------------------- 8 files changed, 43 insertions(+), 108 deletions(-) diff --git a/index.js b/index.js index 3acdc50..1258338 100644 --- a/index.js +++ b/index.js @@ -24,6 +24,7 @@ console.log('starting app...') let store let isInited = false +let isFirstRun = true const init = () => { if (isInited) return Promise.resolve() @@ -77,10 +78,13 @@ initNavigation(async() => { init().then(() => { navigations.pushHomeScreen() SplashScreen.hide() - if (!store.getState().common.setting.isAgreePact) { - showPactModal() - } else { - store.dispatch(commonAction.checkVersion()) + if (isFirstRun) { + isFirstRun = false + if (!store.getState().common.setting.isAgreePact) { + showPactModal() + } else { + store.dispatch(commonAction.checkVersion()) + } } }) }) diff --git a/publish/changeLog.md b/publish/changeLog.md index 4066119..9c16e40 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,4 +1,3 @@ -### 优化 +### 修复 -- 添加导入提示,兼容从PC端“全部数据”类型的备份文件中导入歌单 -- 添加全局异常错误捕获,现在一般情况下APP崩溃前会弹窗提示错误信息。 +- 修复获取在线列表时快速切换会导致APP闪退的问题 diff --git a/src/utils/errorHandle.js b/src/utils/errorHandle.js index 8deb0b7..b32b167 100644 --- a/src/utils/errorHandle.js +++ b/src/utils/errorHandle.js @@ -19,7 +19,7 @@ ${isFatal ? 'Fatal:' : ''} ${e.name} ${e.message} } } -setJSExceptionHandler(errorHandler, true) +setJSExceptionHandler(errorHandler) setNativeExceptionHandler((errorString) => { console.error('+++++', errorString, '+++++') diff --git a/src/utils/music/kg/leaderboard.js b/src/utils/music/kg/leaderboard.js index 7a6c3fb..eb8c9c1 100644 --- a/src/utils/music/kg/leaderboard.js +++ b/src/utils/music/kg/leaderboard.js @@ -1,4 +1,4 @@ -import { httpGet, cancelHttp, httpFetch } from '../../request' +import { httpFetch } from '../../request' import { decodeName, formatPlayTime, sizeFormate } from '../../index' let boardList = [{ id: 'kg__8888', name: '酷狗TOP500', bangid: '8888' }, { id: 'kg__6666', name: '酷狗飙升榜', bangid: '6666' }, { id: 'kg__37361', name: '酷狗雷达榜', bangid: '37361' }, { id: 'kg__23784', name: '网络红歌榜', bangid: '23784' }, { id: 'kg__24971', name: 'DJ热歌榜', bangid: '24971' }, { id: 'kg__35811', name: '会员专享热歌榜', bangid: '35811' }, { id: 'kg__31308', name: '华语新歌榜', bangid: '31308' }, { id: 'kg__31310', name: '欧美新歌榜', bangid: '31310' }, { id: 'kg__31311', name: '韩国新歌榜', bangid: '31311' }, { id: 'kg__31312', name: '日本新歌榜', bangid: '31312' }, { id: 'kg__31313', name: '粤语新歌榜', bangid: '31313' }, { id: 'kg__33162', name: 'ACG新歌榜', bangid: '33162' }, { id: 'kg__21101', name: '酷狗分享榜', bangid: '21101' }, { id: 'kg__30972', name: '腾讯音乐人原创榜', bangid: '30972' }, { id: 'kg__22603', name: '5sing音乐榜', bangid: '22603' }, { id: 'kg__33160', name: '电音热歌榜', bangid: '33160' }, { id: 'kg__21335', name: '繁星音乐榜', bangid: '21335' }, { id: 'kg__33161', name: '古风新歌榜', bangid: '33161' }, { id: 'kg__33163', name: '影视金曲榜', bangid: '33163' }, { id: 'kg__33166', name: '欧美金曲榜', bangid: '33166' }, { id: 'kg__33165', name: '粤语金曲榜', bangid: '33165' }, { id: 'kg__36107', name: '小语种热歌榜', bangid: '36107' }, { id: 'kg__4681', name: '美国BillBoard榜', bangid: '4681' }, { id: 'kg__4680', name: '英国单曲榜', bangid: '4680' }, { id: 'kg__4673', name: '日本公信榜', bangid: '4673' }, { id: 'kg__38623', name: '韩国Melon音乐榜', bangid: '38623' }, { id: 'kg__42807', name: 'joox本地热歌榜', bangid: '42807' }, { id: 'kg__42808', name: '台湾KKBOX风云榜', bangid: '42808' }] @@ -71,30 +71,16 @@ export default { listData: /global\.features = (\[.+\]);/, }, _requestBoardsObj: null, - _requestObj: null, - _cancelPromiseCancelFn: null, + _requestDataObj: null, getBoardsData() { if (this._requestBoardsObj) this._requestBoardsObj.cancelHttp() this._requestBoardsObj = httpFetch('http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=1') return this._requestBoardsObj.promise }, getData(url) { - if (this._requestObj != null) { - cancelHttp(this._requestObj) - this._cancelPromiseCancelFn(new Error('取消http请求')) - } - return new Promise((resolve, reject) => { - this._cancelPromiseCancelFn = reject - this._requestObj = httpGet(url, (err, resp, body) => { - this._requestObj = null - this._cancelPromiseCancelFn = null - if (err) { - console.log(err) - reject(err) - } - resolve(body) - }) - }) + if (this._requestDataObj) this._requestDataObj.cancelHttp() + this._requestDataObj = httpFetch(url) + return this._requestDataObj.promise }, filterData(rawList) { // console.log(rawList) @@ -189,7 +175,7 @@ export default { } }, getList(bangid, page) { - return this.getData(this.getUrl(page, bangid)).then(html => { + return this.getData(this.getUrl(page, bangid)).then(({ body: html }) => { let total = html.match(this.regExps.total) if (total) total = parseInt(RegExp.$1) page = html.match(this.regExps.page) diff --git a/src/utils/music/kw/index.js b/src/utils/music/kw/index.js index d8c4dc2..27c8817 100644 --- a/src/utils/music/kw/index.js +++ b/src/utils/music/kw/index.js @@ -1,4 +1,4 @@ -import { httpGet, cancelHttp } from '../../request' +import { httpFetch } from '../../request' import tempSearch from './tempSearch' import musicSearch from './musicSearch' import { formatSinger, getToken } from './util' @@ -64,21 +64,10 @@ const kw = { }, getMusicInfo(songInfo) { - if (this._musicInfoRequestObj != null) { - cancelHttp(this._musicInfoRequestObj) - this._musicInfoPromiseCancelFn(new Error('取消http请求')) - } - return new Promise((resolve, reject) => { - this._musicInfoPromiseCancelFn = reject - this._musicInfoRequestObj = httpGet(`http://www.kuwo.cn/api/www/music/musicInfo?mid=${songInfo.songmid}`, (err, resp, body) => { - this._musicInfoRequestObj = null - this._musicInfoPromiseCancelFn = null - if (err) { - console.log(err) - reject(err) - } - body.code === 200 ? resolve(body.data) : reject(new Error(body.msg)) - }) + if (this._musicInfoRequestObj) this._musicInfoRequestObj.cancelHttp() + this._musicInfoRequestObj = httpFetch(`http://www.kuwo.cn/api/www/music/musicInfo?mid=${songInfo.songmid}`) + return this._musicInfoRequestObj.promise.then(({ body }) => { + return body.code === 200 ? body.data : Promise.reject(new Error(body.msg)) }) }, diff --git a/src/utils/music/kw/leaderboard.js b/src/utils/music/kw/leaderboard.js index a54b42a..b731e63 100644 --- a/src/utils/music/kw/leaderboard.js +++ b/src/utils/music/kw/leaderboard.js @@ -1,4 +1,4 @@ -import { httpGet, cancelHttp, httpFetch } from '../../request' +import { httpFetch } from '../../request' import { formatPlayTime, decodeName } from '../../index' import { formatSinger } from './util' @@ -69,30 +69,16 @@ export default { limit: 100, _requestBoardsObj: null, - _cancelRequestObj: null, - _cancelPromiseCancelFn: null, + _requestDataObj: null, getBoardsData() { if (this._requestBoardsObj) this._requestBoardsObj.cancelHttp() this._requestBoardsObj = httpFetch('http://qukudata.kuwo.cn/q.k?op=query&cont=tree&node=2&pn=0&rn=1000&fmt=json&level=2') return this._requestBoardsObj.promise }, getData(url) { - if (this._cancelRequestObj != null) { - cancelHttp(this._cancelRequestObj) - this._cancelPromiseCancelFn(new Error('取消http请求')) - } - return new Promise((resolve, reject) => { - this._cancelPromiseCancelFn = reject - this._cancelRequestObj = httpGet(url, (err, resp) => { - this._cancelRequestObj = null - this._cancelPromiseCancelFn = null - if (err) { - console.log(err) - reject(err) - } - resolve(resp) - }) - }) + if (this._requestDataObj) this._requestDataObj.cancelHttp() + this._requestDataObj = httpFetch(url) + return this._requestDataObj.promise }, filterData(rawList) { // console.log(rawList) diff --git a/src/utils/music/kw/musicSearch.js b/src/utils/music/kw/musicSearch.js index 8931d33..5035895 100644 --- a/src/utils/music/kw/musicSearch.js +++ b/src/utils/music/kw/musicSearch.js @@ -1,6 +1,6 @@ // import '../../polyfill/array.find' // import jshtmlencode from 'js-htmlencode' -import { httpGet, cancelHttp } from '../../request' +import { httpFetch } from '../../request' import { formatPlayTime, decodeName } from '../../index' // import { debug } from '../../utils/env' import { formatSinger } from './util' @@ -10,29 +10,15 @@ export default { mInfo: /bitrate:(\d+),format:(\w+),size:([\w.]+)/, }, _musicSearchRequestObj: null, - _musicSearchPromiseCancelFn: null, limit: 30, total: 0, page: 0, allPage: 1, // cancelFn: null, musicSearch(str, page, limit) { - if (this._musicSearchRequestObj != null) { - cancelHttp(this._musicSearchRequestObj) - this._musicSearchPromiseCancelFn(new Error('取消http请求')) - } - return new Promise((resolve, reject) => { - this._musicSearchPromiseCancelFn = reject - this._musicSearchRequestObj = httpGet(`http://search.kuwo.cn/r.s?client=kt&all=${encodeURIComponent(str)}&pn=${page - 1}&rn=${limit}&uid=794762570&ver=kwplayer_ar_9.2.2.1&vipver=1&show_copyright_off=1&newver=1&ft=music&cluster=0&strategy=2012&encoding=utf8&rformat=json&vermerge=1&mobi=1&issubtitle=1`, (err, resp, body) => { - this._musicSearchRequestObj = null - this._musicSearchPromiseCancelFn = null - if (err) { - console.log(err) - reject(err) - } - resolve(body) - }) - }) + if (this._musicSearchRequestObj) this._musicSearchRequestObj.cancelHttp() + this._musicSearchRequestObj = httpFetch(`http://search.kuwo.cn/r.s?client=kt&all=${encodeURIComponent(str)}&pn=${page - 1}&rn=${limit}&uid=794762570&ver=kwplayer_ar_9.2.2.1&vipver=1&show_copyright_off=1&newver=1&ft=music&cluster=0&strategy=2012&encoding=utf8&rformat=json&vermerge=1&mobi=1&issubtitle=1`) + return this._musicSearchRequestObj.promise }, // getImg(songId) { // return httpGet(`http://player.kuwo.cn/webmusic/sj/dtflagdate?flag=6&rid=MUSIC_${songId}`) @@ -127,7 +113,7 @@ export default { if (retryNum > 2) return Promise.reject(new Error('try max num')) if (limit == null) limit = this.limit // http://newlyric.kuwo.cn/newlyric.lrc?62355680 - return this.musicSearch(str, page, limit).then(result => { + return this.musicSearch(str, page, limit).then(({ body: result }) => { // console.log(result) if (!result || (result.TOTAL !== '0' && result.SHOW === '0')) return this.search(str, page, { limit }, ++retryNum) let list = this.handleResult(result.abslist) diff --git a/src/utils/music/tx/leaderboard.js b/src/utils/music/tx/leaderboard.js index d798fdc..89d9eb5 100644 --- a/src/utils/music/tx/leaderboard.js +++ b/src/utils/music/tx/leaderboard.js @@ -1,4 +1,4 @@ -import { httpGet, cancelHttp, httpFetch } from '../../request' +import { httpFetch } from '../../request' import { formatPlayTime, sizeFormate } from '../../index' let boardList = [{ id: 'tx__4', name: '流行指数榜', bangid: '4' }, { id: 'tx__26', name: '热歌榜', bangid: '26' }, { id: 'tx__27', name: '新歌榜', bangid: '27' }, { id: 'tx__62', name: '飙升榜', bangid: '62' }, { id: 'tx__58', name: '说唱榜', bangid: '58' }, { id: 'tx__57', name: '电音榜', bangid: '57' }, { id: 'tx__28', name: '网络歌曲榜', bangid: '28' }, { id: 'tx__5', name: '内地榜', bangid: '5' }, { id: 'tx__3', name: '欧美榜', bangid: '3' }, { id: 'tx__59', name: '香港地区榜', bangid: '59' }, { id: 'tx__16', name: '韩国榜', bangid: '16' }, { id: 'tx__60', name: '抖音排行榜', bangid: '60' }, { id: 'tx__29', name: '影视金曲榜', bangid: '29' }, { id: 'tx__17', name: '日本榜', bangid: '17' }, { id: 'tx__52', name: '腾讯音乐人原创榜', bangid: '52' }, { id: 'tx__36', name: 'K歌金曲榜', bangid: '36' }, { id: 'tx__61', name: '台湾地区榜', bangid: '61' }, { id: 'tx__63', name: 'DJ舞曲榜', bangid: '63' }, { id: 'tx__64', name: '综艺新歌榜', bangid: '64' }, { id: 'tx__65', name: '国风热歌榜', bangid: '65' }, { id: 'tx__66', name: 'ACG新歌榜', bangid: '66' }, { id: 'tx__67', name: '听歌识曲榜', bangid: '67' }, { id: 'tx__70', name: '达人音乐榜', bangid: '70' }] @@ -86,30 +86,16 @@ export default { periods: {}, periodUrl: 'https://c.y.qq.com/node/pc/wk_v15/top.html', _requestBoardsObj: null, - _cancelRequestObj: null, - _cancelPromiseCancelFn: null, + _requestDataObj: null, getBoardsData() { if (this._requestBoardsObj) this._requestBoardsObj.cancelHttp() this._requestBoardsObj = httpFetch('https://c.y.qq.com/v8/fcg-bin/fcg_myqq_toplist.fcg?g_tk=1928093487&inCharset=utf-8&outCharset=utf-8¬ice=0&format=json&uin=0&needNewCode=1&platform=h5') return this._requestBoardsObj.promise }, getData(url) { - if (this._cancelRequestObj != null) { - cancelHttp(this._cancelRequestObj) - this._cancelPromiseCancelFn(new Error('取消http请求')) - } - return new Promise((resolve, reject) => { - this._cancelPromiseCancelFn = reject - this._cancelRequestObj = httpGet(url, (err, resp, body) => { - this._cancelRequestObj = null - this._cancelPromiseCancelFn = null - if (err) { - console.log(err) - reject(err) - } - resolve(body) - }) - }) + if (this._requestDataObj) this._requestDataObj.cancelHttp() + this._requestDataObj = httpFetch(url) + return this._requestDataObj.promise }, getSinger(singers) { let arr = [] @@ -175,9 +161,9 @@ export default { }) }, getPeriods(bangid) { - return this.getData(this.periodUrl).then(html => { + return this.getData(this.periodUrl).then(({ body: html }) => { let result = html.match(this.regExps.periodList) - if (!result) return Promise.reject() + if (!result) return Promise.reject(new Error('get data failed')) result.forEach(item => { let result = item.match(this.regExps.period) if (!result) return @@ -239,12 +225,11 @@ export default { let info = this.periods[bangid] let p = info ? Promise.resolve(info.period) : this.getPeriods(bangid) return p.then(period => { - return this.getData(this.getUrl(bangid, period, this.limit)).then(data => { - // console.log(data) - if (data.code !== 0) return this.getList(bangid, page, retryNum) + return this.getData(this.getUrl(bangid, period, this.limit)).then(resp => { + if (resp.body.code !== 0) return this.getList(bangid, page, retryNum) return { - total: data.toplist.data.songInfoList.length, - list: this.filterData(data.toplist.data.songInfoList), + total: resp.body.toplist.data.songInfoList.length, + list: this.filterData(resp.body.toplist.data.songInfoList), limit: this.limit, page: 1, source: 'tx',