From de585b2ff8aa09e6879248dfc072ec3972945aa0 Mon Sep 17 00:00:00 2001 From: uh wot Date: Wed, 14 Jul 2021 01:20:50 +0200 Subject: [PATCH] fix for tampermonkey/greasemonkey --- dzunlock.user.js | 105 ++++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/dzunlock.user.js b/dzunlock.user.js index f8a2728..daaca8a 100644 --- a/dzunlock.user.js +++ b/dzunlock.user.js @@ -3,7 +3,7 @@ // @namespace io.github.uhwot.dzunlock // @description enables deezer hifi features lol // @author uh wot -// @version 1.1.4 +// @version 1.1.5 // @license GPL-3.0-only // @homepageURL https://git.freezer.life/uhwot/dzunlock // @downloadURL https://git.freezer.life/uhwot/dzunlock/raw/branch/master/dzunlock.user.js @@ -15,6 +15,7 @@ // @require https://cdnjs.cloudflare.com/ajax/libs/aes-js/3.1.2/index.min.js // @grant GM_getValue // @grant GM_setValue +// @run-at document-start // ==/UserScript== const debug = false @@ -89,8 +90,8 @@ const clientSecret = '2f5b4c9785ddc367975b83d90dc46f5c' const playerTokenKey = [102, 228, 95, 242, 215, 50, 122, 26, 57, 216, 206, 38, 164, 237, 200, 85] const formats = [ - {api: '320', gw: 'MP3_320'}, - {api: 'flac', gw: 'FLAC'} + { api: '320', gw: 'MP3_320' }, + { api: 'flac', gw: 'FLAC' } ] function str2bin(str) { @@ -140,66 +141,68 @@ async function renewAccessToken() { return access_token } -unsafeWindow.dzPlayer.setTrackList = (function (old) { - return async function (...args) { - // don't get filesizes if account is hifi - if (unsafeWindow.dzPlayer.user_status.lossless) { - return old(...args) - } - - let batchList = [] - - for (let i = 0; i < args[0].data.length; i++) { - const id = Number(args[0].data[i].SNG_ID) - if (id >= 0) { // we don't need filesizes for user-upped tracks - batchList.push({ 'relative_url': `/track/${id}` }) +window.addEventListener('DOMContentLoaded', (_) => { + unsafeWindow.dzPlayer.setTrackList = (function (old) { + return async function (...args) { + // don't get filesizes if account is hifi + if (unsafeWindow.dzPlayer.user_status.lossless) { + return old(...args) } - } - // return if all the tracks are user-upped - if (batchList.length === 0) { - return old(...args) - } + let batchList = [] - batchList = JSON.stringify(batchList) + for (let i = 0; i < args[0].data.length; i++) { + const id = Number(args[0].data[i].SNG_ID) + if (id >= 0) { // we don't need filesizes for user-upped tracks + batchList.push({ 'relative_url': `/track/${id}` }) + } + } - let access_token = GM_getValue('access_token', false) - const expiry = GM_getValue('access_token_expiry', 0) - if (!access_token || Math.floor(Date.now() / 1000) >= expiry) { - access_token = await renewAccessToken() - } + // return if all the tracks are user-upped + if (batchList.length === 0) { + return old(...args) + } - url = `https://api.deezer.com/batch?methods=${batchList}&access_token=${access_token}` - let resp = await fetch(url) - let json = await resp.json() + batchList = JSON.stringify(batchList) + + let access_token = GM_getValue('access_token', false) + const expiry = GM_getValue('access_token_expiry', 0) + if (!access_token || Math.floor(Date.now() / 1000) >= expiry) { + access_token = await renewAccessToken() + } - // renew access token if token is invalid - const error = json.batch_result[0].error - if (error && error.code === 300) { - access_token = await renewAccessToken() url = `https://api.deezer.com/batch?methods=${batchList}&access_token=${access_token}` - resp = await fetch(url) - json = await resp.json() - } + let resp = await fetch(url) + let json = await resp.json() - let userUppedSoFar = 0 - - for (let i = 0; i < args[0].data.length; i++) { - const id = Number(args[0].data[i].SNG_ID) - if (id < 0) { // user-uploaded track - userUppedSoFar++ - continue + // renew access token if token is invalid + const error = json.batch_result[0].error + if (error && error.code === 300) { + access_token = await renewAccessToken() + url = `https://api.deezer.com/batch?methods=${batchList}&access_token=${access_token}` + resp = await fetch(url) + json = await resp.json() } - for (let j = 0; j < formats.length; j++) { - args[0].data[i]['FILESIZE_' + formats[j].gw] = json.batch_result[i - userUppedSoFar]['filesize_' + formats[j].api] + + let userUppedSoFar = 0 + + for (let i = 0; i < args[0].data.length; i++) { + const id = Number(args[0].data[i].SNG_ID) + if (id < 0) { // user-uploaded track + userUppedSoFar++ + continue + } + for (let j = 0; j < formats.length; j++) { + args[0].data[i]['FILESIZE_' + formats[j].gw] = json.batch_result[i - userUppedSoFar]['filesize_' + formats[j].api] + } } - } - log(args) + log(args) - return old(...args) - }; -})(unsafeWindow.dzPlayer.setTrackList); + return old(...args) + }; + })(unsafeWindow.dzPlayer.setTrackList); +}); fetchIntercept.register({ request: function (url, config) {