From 76f640a0887da6c0553118b1ea34659d33edcef6 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 25 Feb 2022 06:09:42 +0700 Subject: [PATCH 1/2] first commit --- src/main/plugins/lastfm.ts | 2 +- src/preload/cider-preload.js | 2 +- src/renderer/index.js | 183 +++++++++--------- src/renderer/todo.js | 8 +- src/renderer/views/components/artist-chip.ejs | 2 +- .../views/components/libraryartist-item.ejs | 4 +- .../views/components/listennow-child.ejs | 10 +- .../views/components/mediaitem-list-item.ejs | 4 +- .../views/components/mediaitem-square.ejs | 8 +- src/renderer/views/components/queue.ejs | 2 +- .../views/components/sidebar-playlist.ejs | 4 +- src/renderer/views/main.ejs | 2 +- src/renderer/views/pages/apple-curator.ejs | 6 +- src/renderer/views/pages/artist-feed.ejs | 2 +- src/renderer/views/pages/artist.ejs | 4 +- src/renderer/views/pages/cider-playlist.ejs | 8 +- src/renderer/views/pages/collection-list.ejs | 2 +- src/renderer/views/pages/home.ejs | 12 +- src/renderer/views/pages/library-videos.ejs | 2 +- src/renderer/views/pages/listen_now.ejs | 4 +- src/renderer/views/pages/playlist-inline.ejs | 8 +- src/renderer/views/pages/podcasts.ejs | 10 +- src/renderer/views/pages/replay.ejs | 8 +- src/renderer/views/pages/search.ejs | 2 +- src/renderer/views/pages/zoo.ejs | 2 +- .../views/components/mediaitem-square.ejs | 4 +- 26 files changed, 155 insertions(+), 150 deletions(-) diff --git a/src/main/plugins/lastfm.ts b/src/main/plugins/lastfm.ts index 2ac0a000..475f5197 100644 --- a/src/main/plugins/lastfm.ts +++ b/src/main/plugins/lastfm.ts @@ -169,7 +169,7 @@ export default class LastFMPlugin { const res = await this._win.webContents.executeJavaScript(` (async () => { - const subMk = await MusicKit.getInstance().api.v3.music("/v1/catalog/" + MusicKit.getInstance().storefrontId + "/songs/${songId}", { + const subMk = await MusicKit.getInstance().api.music("/v1/catalog/" + MusicKit.getInstance().storefrontId + "/songs/${songId}", { include: { songs: ["artists"] } diff --git a/src/preload/cider-preload.js b/src/preload/cider-preload.js index 84a55e91..5bcdefe6 100644 --- a/src/preload/cider-preload.js +++ b/src/preload/cider-preload.js @@ -58,7 +58,7 @@ const MusicKitInterop = { const id = nowPlayingItem?._songId ?? (nowPlayingItem?.songId ?? nowPlayingItem?.id) if (id != null && id != -1) { try{ - const query = await mk.api.v3.music(`/v1${(((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != null) && ((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != -1)) ? `/catalog/${mk.storefrontId}/` : `/me/library/`}songs/${id}?l=${app.mklang}`); + const query = await mk.api.music(`/v1${(((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != null) && ((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != -1)) ? `/catalog/${mk.storefrontId}/` : `/me/library/`}songs/${id}?l=${app.mklang}`); if (query?.data?.data[0]){ let attrs = query?.data?.data[0]?.attributes; if (attrs?.name) { nowPlayingItem.attributes.name = attrs?.name ?? ''} diff --git a/src/renderer/index.js b/src/renderer/index.js index a3c15d61..12c6e192 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -203,7 +203,7 @@ const app = new Vue({ }, v3: { requestBody: { - platform: "web" + platform: "auto" } }, tmpHeight: '', @@ -408,7 +408,7 @@ const app = new Vue({ if (item.includes("ra.")) { type = "stations" } - let found = await app.mk.api.v3.music(`/v1/catalog/us/${type}/${item}`) + let found = await app.mk.api.music(`/v1/catalog/us/${type}/${item}`) this.socialBadges.mediaItems.push(found.data.data[0]) } catch (e) { @@ -458,7 +458,7 @@ const app = new Vue({ }) { let self = this try { - app.mk.api.v3.music("/v1/social/badging-map").then(data => { + app.mk.api.music("/v1/social/badging-map").then(data => { self.socialBadges.badgeMap = data.data.results.badgingMap cb(data.data.results.badgingMap) }) @@ -521,7 +521,7 @@ const app = new Vue({ }) } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { self.selectedMediaItems[i].kind = "albums" - let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); + let res = await self.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); let ids = res.data.data.map(function (i) { return {id: i.id, type: i.type} }) @@ -534,7 +534,7 @@ const app = new Vue({ }) } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { self.selectedMediaItems[i].kind = "library-albums" - let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); + let res = await self.mk.api.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); let ids = res.data.data.map(function (i) { return {id: i.id, type: i.type} }) @@ -561,7 +561,7 @@ const app = new Vue({ }) } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { self.selectedMediaItems[i].kind = "albums" - let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); + let res = await self.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); let ids = res.data.data.map(function (i) { return {id: i.id, type: i.type} }) @@ -574,7 +574,7 @@ const app = new Vue({ }) } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { self.selectedMediaItems[i].kind = "library-albums" - let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); + let res = await self.mk.api.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); let ids = res.data.data.map(function (i) { return {id: i.id, type: i.type} }) @@ -588,7 +588,7 @@ const app = new Vue({ } this.modals.addToPlaylist = false - await app.mk.api.v3.music( + await app.mk.api.music( `/v1/me/library/playlists/${playlist_id}/tracks`, {}, { fetchOptions: { method: "POST", @@ -612,8 +612,9 @@ const app = new Vue({ this.setLzManual() clearTimeout(this.hangtimer) this.mk = MusicKit.getInstance() - let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined") - this.mk.authorize().then(() => { + let needsReload = (typeof localStorage["music.8r23j2835d.media-user-token"] == "undefined") + this.mk.authorize().then((token) => { + console.log(mytoken,'token') self.mkIsReady = true if (needsReload) { document.location.reload() @@ -638,7 +639,7 @@ const app = new Vue({ try { // Set profile name - this.chrome.userinfo = (await app.mk.api.v3.music(`/v1/me/social-profile`)).data.data[0] + this.chrome.userinfo = (await app.mk.api.music(`/v1/me/social-profile`)).data.data[0] } catch (err) { } @@ -748,7 +749,7 @@ const app = new Vue({ } break; case "history": - let history = await app.mk.api.v3.music(`/v1/me/recent/played/tracks`, {l: app.mklang}) + let history = await app.mk.api.music(`/v1/me/recent/played/tracks`, {l: app.mklang}) if (history.data.data.length > 0) { let lastItem = history.data.data[0] let kind = lastItem.attributes.playParams.kind; @@ -822,7 +823,7 @@ const app = new Vue({ } catch (e) { } if (previewURL == null && ((app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)) != -1)) { - app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/songs/${app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)}`).then((response) => { + app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/songs/${app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)}`).then((response) => { previewURL = response.data.data[0].attributes.previews[0].url if (previewURL) ipcRenderer.send('getPreviewURL', previewURL) @@ -1017,7 +1018,7 @@ const app = new Vue({ }, async editPlaylistFolder(id, name = app.getLz('term.newPlaylist')) { let self = this - this.mk.api.v3.music( + this.mk.api.music( `/v1/me/library/playlist-folders/${id}`, {}, { fetchOptions: { method: "PATCH", @@ -1032,7 +1033,7 @@ const app = new Vue({ }, async editPlaylist(id, name = app.getLz('term.newPlaylist')) { let self = this - this.mk.api.v3.music( + this.mk.api.music( `/v1/me/library/playlists/${id}`, {}, { fetchOptions: { method: "PATCH", @@ -1061,7 +1062,7 @@ const app = new Vue({ if (tracks.length > 0) { request.tracks = tracks } - app.mk.api.v3.music(`/v1/me/library/playlists`, {}, { + app.mk.api.music(`/v1/me/library/playlists`, {}, { fetchOptions: { method: "POST", body: JSON.stringify({ @@ -1093,7 +1094,7 @@ const app = new Vue({ deletePlaylist(id) { let self = this if (confirm(app.getLz('term.deletePlaylist'))) { - app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, {}, { + app.mk.api.music(`/v1/me/library/playlists/${id}`, {}, { fetchOptions: { method: "DELETE" } @@ -1117,20 +1118,20 @@ const app = new Vue({ app.appRoute("collection-list") }, async showArtistView(artist, title, view) { - let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artist}/view/${view}?l=${this.mklang}`, {}, {includeResponseMeta: !0})).data + let response = (await app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artist}/view/${view}?l=${this.mklang}`, {}, {includeResponseMeta: !0})).data console.log(response) await this.showCollection(response, title, "artists") }, async showRecordLabelView(label, title, view) { - let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/record-labels/${label}/view/${view}?l=${this.mklang}`)).data + let response = (await app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/record-labels/${label}/view/${view}?l=${this.mklang}`)).data await this.showCollection(response, title, "record-labels") }, async showSearchView(term, group, title) { let requestBody = { - platform: "web", + platform: "auto", groups: group, - types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", + types: "activities,albums,apple-curators,artists,curators,editorial-items,music-videos,playlists,songs,stations,record-labels", limit: 25, relate: { editorialItems: ["contents"] @@ -1155,7 +1156,7 @@ const app = new Vue({ groups: group, l: this.mklang } - let response = await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${term}`, requestBody, { + let response = await app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${term}`, requestBody, { includeResponseMeta: !0 }) @@ -1199,7 +1200,7 @@ const app = new Vue({ let self = this const params = { include: "tracks", - platform: "web", + platform: "auto", "include[library-playlists]": "catalog,tracks", "fields[playlists]": "curatorName,playlistType,name,artwork,url,playParams", "include[library-songs]": "catalog,artists,albums,playParams,name,artwork,url", @@ -1210,12 +1211,12 @@ const app = new Vue({ if (!transient) { this.playlists.loadingState = 0; } - app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, params).then(res => { + app.mk.api.music(`/v1/me/library/playlists/${id}`, params).then(res => { self.getPlaylistContinuous(res, transient) }).catch((e) => { console.log(e); try { - app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`, params).then(res => { + app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`, params).then(res => { self.getPlaylistContinuous(res, transient) }) } catch (err) { @@ -1286,7 +1287,7 @@ const app = new Vue({ this.search.hints = [] return } - let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/hints?term=${this.search.term}`)).data.results + let hints = await (await app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/search/hints?term=${this.search.term}`)).data.results this.search.hints = hints ? hints.terms : [] }, getSongProgress() { @@ -1366,7 +1367,7 @@ const app = new Vue({ if (kind.toString().includes("apple-curator")) { kind = "appleCurator" app.getTypeFromID("appleCurator", (id), false, { - platform: "web", + platform: "auto", include: "grouping,playlists", extend: "editorialArtwork", "art[url]": "f" @@ -1484,7 +1485,7 @@ const app = new Vue({ } if (artistId == "") { - let artistQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.artistName}`, { + let artistQuery = (await app.mk.api.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.artistName}`, { limit: 1, types: 'artists' })).data.results; @@ -1522,7 +1523,7 @@ const app = new Vue({ if (albumId == "") { try { - let albumQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${(item.attributes.albumName ?? item.attributes.name ?? "") + " " + (item.attributes.artistName ?? "")}`, { + let albumQuery = (await app.mk.api.music(`v1/catalog/${app.mk.storefrontId}/search?term=${(item.attributes.albumName ?? item.attributes.name ?? "") + " " + (item.attributes.artistName ?? "")}`, { limit: 1, types: 'albums' })).data.results; @@ -1546,7 +1547,7 @@ const app = new Vue({ if (labelId == "") { try { - let labelQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.recordLabel}`, { + let labelQuery = (await app.mk.api.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.recordLabel}`, { limit: 1, types: 'record-labels' })).data.results; @@ -1618,7 +1619,7 @@ const app = new Vue({ // var playlistId = id // const params = { // include: "tracks", - // platform: "web", + // platform: "auto", // "include[library-playlists]": "catalog,tracks", // "fields[playlists]": "curatorName,playlistType,name,artwork,url", // "include[library-songs]": "catalog,artists,albums", @@ -1927,9 +1928,9 @@ const app = new Vue({ let truemethod = (!method.endsWith("s")) ? (method + "s") : method; try { if (library) { - return await this.mk.api.v3.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2) + return await this.mk.api.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2) } else { - return await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2) + return await this.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2) } } catch (e) { console.log(e) @@ -1974,23 +1975,23 @@ const app = new Vue({ "include[library-songs]": "catalog,artists,albums", "fields[artists]": "name,url,id", "fields[albums]": "name,url,id", - platform: "web", + platform: "auto", "fields[catalog]": "artistUrl,albumUrl", "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", limit: 100, l: self.mklang } const safeparams = { - "platform": "web", + platform: "auto", "limit": 80 } self.library.songs.downloadState = 1 if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/songs/`, params).then((response) => { + app.mk.api.music(`/v1/me/library/songs/`, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/songs/`, safeparams).then((response) => { + app.mk.api.music(`/v1/me/library/songs/`, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error) @@ -2000,11 +2001,11 @@ const app = new Vue({ }) } else { if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { + app.mk.api.music(downloaded.next, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + app.mk.api.music(downloaded.next, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error) @@ -2078,14 +2079,14 @@ const app = new Vue({ "include[library-albums]": "catalog,artists,albums", "fields[artists]": "name,url,id", "fields[albums]": "name,url,id", - platform: "web", + platform: "auto", "fields[catalog]": "artistUrl,albumUrl", "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", limit: 100, l: self.mklang } const safeparams = { - platform: "web", + platform: "auto", limit: "60", "include[library-albums]": "artists", "include[library-artists]": "catalog", @@ -2095,11 +2096,11 @@ const app = new Vue({ "includeOnly": "catalog,artists" } if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/albums/`, params).then((response) => { + app.mk.api.music(`/v1/me/library/albums/`, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/albums/`, safeparams).then((response) => { + app.mk.api.music(`/v1/me/library/albums/`, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error) @@ -2109,11 +2110,11 @@ const app = new Vue({ }) } else { if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { + app.mk.api.music(downloaded.next, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + app.mk.api.music(downloaded.next, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error); @@ -2188,7 +2189,7 @@ const app = new Vue({ // "include[library-artists]": "catalog,artists,albums", // "fields[artists]": "name,url,id", // "fields[albums]": "name,url,id", - platform: "web", + platform: "auto", // "fields[catalog]": "artistUrl,albumUrl", // "fields[artists]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", limit: 100, @@ -2196,15 +2197,15 @@ const app = new Vue({ } const safeparams = { include: "catalog", - platform: "web", + platform: "auto", limit: 50, } if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/artists/`, params).then((response) => { + app.mk.api.music(`/v1/me/library/artists/`, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/artists/`, safeparams).then((response) => { + app.mk.api.music(`/v1/me/library/artists/`, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error) @@ -2215,11 +2216,11 @@ const app = new Vue({ } else { if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { + app.mk.api.music(downloaded.next, params).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + app.mk.api.music(downloaded.next, safeparams).then((response) => { processChunk(response.data) }).catch((error) => { console.log('safe loading failed', error) @@ -2304,9 +2305,9 @@ const app = new Vue({ return } try { - this.listennow = (await this.mk.api.v3.music(`v1/me/recommendations?timezone=${encodeURIComponent(this.formatTimezoneOffset())}`, { + this.listennow = (await this.mk.api.music(`v1/me/recommendations?timezone=${encodeURIComponent(this.formatTimezoneOffset())}`, { name: "listen-now", - with: "friendsMix,library,social", + with: "friendsMix,library", "art[social-profiles:url]": "c", "art[url]": "c,f", "omit[resource]": "autos", @@ -2324,8 +2325,8 @@ const app = new Vue({ "fields[artists]": ["name", "url"], "extend[stations]": ["airDate", "supportsAirTimeUpdates"], "meta[stations]": "inflectionPoints", - types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells", - platform: "web", + types: "artists,albums,editorial-items,library-albums,library-playlists,music-videos,playlists,stations,activities,apple-curators,curators", + platform: "auto", l: this.mklang }, { includeResponseMeta: !0, @@ -2346,9 +2347,9 @@ const app = new Vue({ return } try { - let browse = await app.mk.api.v3.music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { - platform: "web", - name: "music", + let browse = await app.mk.api.music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { + platform: "auto", + // name: "music", "omit[resource:artists]": "relationships", "include[albums]": "artists", "include[songs]": "artists", @@ -2371,8 +2372,8 @@ const app = new Vue({ return } try { - this.radio.personal = (await app.mk.api.v3.music(`/v1/me/recent/radio-stations`, { - "platform": "web", + this.radio.personal = (await app.mk.api.music(`/v1/me/recent/radio-stations`, { + platform: "auto", "art[url]": "f", l: this.mklang })).data.data; @@ -2386,7 +2387,7 @@ const app = new Vue({ return } try { - mfu = await app.mk.api.v3.music("/v1/me/library/playlists?platform=web&extend=editorialVideo&fields%5Bplaylists%5D=lastModifiedDate&filter%5Bfeatured%5D=made-for-you&include%5Blibrary-playlists%5D=catalog&fields%5Blibrary-playlists%5D=artwork%2Cname%2CplayParams%2CdateAdded") + mfu = await app.mk.api.music("/v1/me/library/playlists?platform=auto&extend=editorialVideo&fields%5Bplaylists%5D=lastModifiedDate&filter%5Bfeatured%5D=made-for-you&include%5Blibrary-playlists%5D=catalog&fields%5Blibrary-playlists%5D=artwork%2Cname%2CplayParams%2CdateAdded") this.madeforyou = mfu.data } catch (e) { console.log(e) @@ -2395,7 +2396,7 @@ const app = new Vue({ }, newPlaylistFolder(name = app.getLz('term.newPlaylistFolder')) { let self = this - this.mk.api.v3.music( + this.mk.api.music( "/v1/me/library/playlist-folders/", {}, { fetchOptions: { method: "POST", @@ -2440,7 +2441,7 @@ const app = new Vue({ const songID = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem["_songId"] ?? (this.mk.nowPlayingItem["songId"] ?? -1) : -1; // this.getMXM( trackName, artistName, 'en', duration); if (songID != -1) { - this.mk.api.v3.music(`v1/catalog/${this.mk.storefrontId}/songs/${songID}/lyrics`) + this.mk.api.music(`v1/catalog/${this.mk.storefrontId}/songs/${songID}/lyrics`) .then((response) => { this.lyricsMediaItem = response.data?.data[0]?.attributes["ttml"] this.parseTTML() @@ -2457,7 +2458,7 @@ const app = new Vue({ removeFromLibrary(kind, id) { let self = this let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { + app.mk.api.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { fetchOptions: { method: "DELETE" } @@ -3118,9 +3119,9 @@ const app = new Vue({ if (term == "") { return } - //this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${this.search.term}` - this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${encodeURIComponent(this.search.term)}`, { - types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", + //this.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${this.search.term}` + this.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${encodeURIComponent(this.search.term)}`, { + types: "activities,albums,apple-curators,artists,curators,editorial-items,music-videos,playlists,songs,stations,record-labels", "relate[editorial-items]": "contents", "include[editorial-items]": "contents", "include[albums]": "artists", @@ -3128,12 +3129,12 @@ const app = new Vue({ "include[songs]": "artists,albums", "include[music-videos]": "artists", "extend": "artistUrl", - "fields[artists]": "url,name,artwork,hero", + "fields[artists]": "url,name,hero", "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", "with": "serverBubbles,lyricHighlights", "art[url]": "c,f", "omit[resource]": "autos", - "platform": "web", + platform: "auto", limit: 25, l: this.mklang }).then(function (results) { @@ -3141,16 +3142,16 @@ const app = new Vue({ self.search.results = results.data.results }) - await app.mk.api.v3.music(`v1/social/${app.mk.storefrontId}/search?term=${app.search.term}`, { - types: ["playlists", "social-profiles"], - limit: 25, - with: ["serverBubbles", "lyricSnippet"], - "art[url]": "f", - "art[social-profiles:url]": "c" - }, {includeResponseMeta: !0}).then(function (results) { - results.data.results["meta"] = results.data.meta - self.search.resultsSocial = results.data.results - }) + // await app.mk.api.music(`v1/social/${app.mk.storefrontId}/search?term=${app.search.term}`, { + // types: ["playlists", "social-profiles"], + // limit: 25, + // with: ["serverBubbles", "lyricSnippet"], + // "art[url]": "f", + // "art[social-profiles:url]": "c" + // }, {includeResponseMeta: !0}).then(function (results) { + // results.data.results["meta"] = results.data.meta + // self.search.resultsSocial = results.data.results + // }) }, async inLibrary(items = []) { let types = [] @@ -3182,7 +3183,7 @@ const app = new Vue({ result[key] = item[key]; return result; }, {}); - return (await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}`, { + return (await this.mk.api.music(`/v1/catalog/${app.mk.storefrontId}`, { ...{ "omit[resource]": "autos", relate: "library", @@ -3296,7 +3297,7 @@ const app = new Vue({ } catch (e) { } } else { - let data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + let data = await this.mk.api.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); data = data.data.data[0]; if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) { this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', 50).replace('{h}', 50); @@ -3320,7 +3321,7 @@ const app = new Vue({ async setLibraryArt() { if (typeof this.mk.nowPlayingItem === "undefined") return; try { - const data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + const data = await this.mk.api.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); data = data.data.data[0]; if (data != null && data !== "") { @@ -3334,7 +3335,7 @@ const app = new Vue({ async setLibraryArtBG() { if (typeof this.mk.nowPlayingItem === "undefined") return; try { - const data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + const data = await this.mk.api.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); data = data.data.data[0]; if (data != null && data !== "") { @@ -3372,7 +3373,7 @@ const app = new Vue({ } id = item.id } - let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${type.includes('library') ? item.id : id}`) + let response = await this.mk.api.music(`/v1/me/ratings/${type}?platform=auto&ids=${type.includes('library') ? item.id : id}`) if (response.data.data.length != 0) { let value = response.data.data[0].attributes.value return value @@ -3389,7 +3390,7 @@ const app = new Vue({ } id = item.id } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + this.mk.api.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "PUT", body: JSON.stringify({ @@ -3410,7 +3411,7 @@ const app = new Vue({ } id = item.id } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + this.mk.api.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "PUT", body: JSON.stringify({ @@ -3431,7 +3432,7 @@ const app = new Vue({ } id = item.id } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + this.mk.api.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "DELETE", } @@ -3506,7 +3507,7 @@ const app = new Vue({ fetchPlaylist(id, callback) { // id can be found in playlist.attributes.playParams.globalId // this.mk.api. - this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`).then(res => { + this.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`).then(res => { callback(res.data.data[0]) }) @@ -3855,7 +3856,7 @@ const app = new Vue({ let u = this.cfg.general.language; // use MusicKit.getInstance or crash try { - let item = await MusicKit.getInstance().api.v3.music(`v1/storefronts/${app.mk.storefrontId}`) + let item = await MusicKit.getInstance().api.music(`v1/storefronts/${app.mk.storefrontId}`) let langcodes = item.data.data[0].attributes.supportedLanguageTags; if (langcodes) langcodes = langcodes.map(function (u) { return u.replace(/-Han[s|t]/i, "").toLowerCase() @@ -4010,7 +4011,7 @@ function fallbackinitMusicKit() { function loadAlternateKey() { let parsedJson = JSON.parse(this.responseText) MusicKit.configure({ - developerToken: parsedJson.developerToken, + developerToken: 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlhXM0w4WVQzUzQifQ.eyJpYXQiOjE2NDU3Njg0MzUsImV4cCI6MTY2MTMyMDQzNSwiaXNzIjoiOFIyM0oyODM1RCJ9.h54gKwfUTR4AOsf_n00a5DKvTfTqbcZJGrxCOvJWFMHhKll-jTb-NqNzMX4Zi0EsCPfFcEueShdsTRE1rJzHzw', app: { name: 'Apple Music', build: '1978.4.1', @@ -4034,7 +4035,7 @@ document.addEventListener('musickitloaded', function () { function initMusicKit() { let parsedJson = JSON.parse(this.responseText) MusicKit.configure({ - developerToken: parsedJson.token, + developerToken: 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlhXM0w4WVQzUzQifQ.eyJpYXQiOjE2NDU3Njg0MzUsImV4cCI6MTY2MTMyMDQzNSwiaXNzIjoiOFIyM0oyODM1RCJ9.h54gKwfUTR4AOsf_n00a5DKvTfTqbcZJGrxCOvJWFMHhKll-jTb-NqNzMX4Zi0EsCPfFcEueShdsTRE1rJzHzw', app: { name: 'Apple Music', build: '1978.4.1', diff --git a/src/renderer/todo.js b/src/renderer/todo.js index 3e8deaf9..4d26a7d0 100644 --- a/src/renderer/todo.js +++ b/src/renderer/todo.js @@ -13,7 +13,7 @@ // &fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url // &fields[artists]=name,url&extend[stations]=airDate,supportsAirTimeUpdates&meta[stations]=inflectionPoints // &types=artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-profiles,social-upsells - // &l=en-gb&platform=web + // &l=en-gb&platform=auto await app.mk.api.personalRecommendations("", { @@ -48,7 +48,7 @@ await app.mk.api.personalRecommendations("", // Browse page await app.mk.api.groupings("", { - platform: "web", + platform: "auto", name: "music", l: "en-gb", "omit[resource:artists]": "relationships", @@ -63,12 +63,12 @@ await app.mk.api.groupings("", // Radio page await app.mk.api.recentRadioStations("", {l: "en-gb", - "platform": "web", + platform: "auto", "art[url]": "f"}); // Recently Added await app.mk.api.library.recentlyAdded({ - "platform": "web", + platform: "auto", include: { "library-albums": ["artists"], "library-artists": ["catalog"] diff --git a/src/renderer/views/components/artist-chip.ejs b/src/renderer/views/components/artist-chip.ejs index 6d2734e4..c12d3108 100644 --- a/src/renderer/views/components/artist-chip.ejs +++ b/src/renderer/views/components/artist-chip.ejs @@ -32,7 +32,7 @@ if(typeof this.item.relationships.catalog == "object") { artistId = this.item.relationships.catalog.data[0].id } - app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => { + app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => { this.artist = response.data.data[0]; }); }, diff --git a/src/renderer/views/components/libraryartist-item.ejs b/src/renderer/views/components/libraryartist-item.ejs index 817cf623..405fa641 100644 --- a/src/renderer/views/components/libraryartist-item.ejs +++ b/src/renderer/views/components/libraryartist-item.ejs @@ -58,8 +58,8 @@ }, async select(e) { let u = this.item - let u1 = await app.mk.api.v3.music(`/v1/me/library/artists/${u.id}/albums`, { - "platform": "web", + let u1 = await app.mk.api.music(`/v1/me/library/artists/${u.id}/albums`, { + platform: "auto", "include[library-albums]": "artists,tracks", "include[library-artists]": "catalog", "fields[artists]": "url", diff --git a/src/renderer/views/components/listennow-child.ejs b/src/renderer/views/components/listennow-child.ejs index cf85cae7..d00ee262 100644 --- a/src/renderer/views/components/listennow-child.ejs +++ b/src/renderer/views/components/listennow-child.ejs @@ -1,6 +1,6 @@ diff --git a/src/renderer/views/pages/apple-curator.ejs b/src/renderer/views/pages/apple-curator.ejs index 329aaa3d..c6406619 100644 --- a/src/renderer/views/pages/apple-curator.ejs +++ b/src/renderer/views/pages/apple-curator.ejs @@ -1,6 +1,6 @@ diff --git a/src/renderer/views/pages/artist-feed.ejs b/src/renderer/views/pages/artist-feed.ejs index e2af0b51..da8ff32c 100644 --- a/src/renderer/views/pages/artist-feed.ejs +++ b/src/renderer/views/pages/artist-feed.ejs @@ -87,7 +87,7 @@ } try { const chunkArtistData = await Promise.all(chunks.map(chunk => - this.app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists?ids=${chunk.toString()}&views=latest-release&include[songs]=albums&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount&limit[artists:top-songs]=2&art[url]=f`))) + this.app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists?ids=${chunk.toString()}&views=latest-release&include[songs]=albums&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount&limit[artists:top-songs]=2&art[url]=f`))) chunkArtistData.forEach(chunkResult => chunkResult.data.data.forEach(item => { self.artists.push(item) diff --git a/src/renderer/views/pages/artist.ejs b/src/renderer/views/pages/artist.ejs index 07361202..1db28595 100644 --- a/src/renderer/views/pages/artist.ejs +++ b/src/renderer/views/pages/artist.ejs @@ -12,7 +12,7 @@
diff --git a/src/renderer/views/pages/cider-playlist.ejs b/src/renderer/views/pages/cider-playlist.ejs index 32a919d8..b0bc8682 100644 --- a/src/renderer/views/pages/cider-playlist.ejs +++ b/src/renderer/views/pages/cider-playlist.ejs @@ -259,7 +259,7 @@ let friends = badges[id] if (friends) { friends.forEach(function (friend) { - self.app.mk.api.v3.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { + self.app.mk.api.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { self.itemBadges.push(data.data.data[0]) }) }) @@ -323,7 +323,7 @@ } let kind = this.data.attributes.playParams.kind ?? this.data.type ?? ''; const truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`, {}, + app.mk.api.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { fetchOptions: { method: "DELETE" @@ -369,7 +369,7 @@ return } console.log('sds', this.convert()) - await app.mk.api.v3.music( + await app.mk.api.music( `/v1/me/library/playlists/${this.data.attributes.playParams.id}/tracks`, {}, { @@ -449,7 +449,7 @@ if (route === '') { return } - app.mk.api.v3.music(route).then(res => { + app.mk.api.music(route).then(res => { console.log(res.data.data[0].attributes.url) app.copyToClipboard(res.data.data[0].attributes.url) }) diff --git a/src/renderer/views/pages/collection-list.ejs b/src/renderer/views/pages/collection-list.ejs index 1fb77c90..776850fe 100644 --- a/src/renderer/views/pages/collection-list.ejs +++ b/src/renderer/views/pages/collection-list.ejs @@ -84,7 +84,7 @@ } this.loading = true - this.api.v3.music(this.data.next, app.collectionList.requestBody).then((response) => { + this.api.music(this.data.next, app.collectionList.requestBody).then((response) => { console.log(response) if (!app.collectionList.response.groups) { this.data.data = this.data.data.concat(response.data.data); diff --git a/src/renderer/views/pages/home.ejs b/src/renderer/views/pages/home.ejs index d4a4169d..8caab9d4 100644 --- a/src/renderer/views/pages/home.ejs +++ b/src/renderer/views/pages/home.ejs @@ -127,7 +127,7 @@ }, methods: { async seeAllHistory() { - let hist = await app.mk.api.v3.music(`/v1/me/recent/played/tracks`, { + let hist = await app.mk.api.music(`/v1/me/recent/played/tracks`, { l: this.$root.mklang }) app.showCollection(hist.data, app.getLz('term.history')) @@ -160,14 +160,14 @@ } } if (playlists.length != 0) { - this.app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${playlists.toString()}`, { + this.app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${playlists.toString()}`, { l: this.$root.mklang }).then(playlistsData => { self.favorites.push(...playlistsData.data) }) } if (libraryPlaylists.length != 0) { - this.app.mk.api.v3.music(`v1/me/library/playlists/${playlists.toString()}`, { + this.app.mk.api.music(`v1/me/library/playlists/${playlists.toString()}`, { l: this.$root.mklang }).then(playlistsData => { self.favorites.push(...playlistsData.data) @@ -184,7 +184,7 @@ } try { const chunkArtistData = await Promise.all(chunks.map(chunk => - this.app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists?ids=${chunk.toString()}&views=latest-release&include[songs]=albums&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount&limit[artists:top-songs]=2&art[url]=f`))) + this.app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists?ids=${chunk.toString()}&views=latest-release&include[songs]=albums&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount&limit[artists:top-songs]=2&art[url]=f`))) chunkArtistData.forEach(chunkResult => chunkResult.data.data.forEach(item => { if (item.views["latest-release"].data.length != 0) { @@ -204,7 +204,7 @@ }, async getListenNowData() { let self = this - this.app.mk.api.v3.music(`/v1/me/recommendations?timezone=${encodeURIComponent(app.formatTimezoneOffset())}&name=listen-now&with=friendsMix,library,social&art[social-profiles:url]=c&art[url]=c,f&omit[resource]=autos&relate[editorial-items]=contents&extend=editorialCard,editorialVideo&extend[albums]=artistUrl&extend[library-albums]=artistUrl,editorialVideo&extend[playlists]=artistNames,editorialArtwork,editorialVideo&extend[library-playlists]=artistNames,editorialArtwork,editorialVideo&extend[social-profiles]=topGenreNames&include[albums]=artists&include[songs]=artists&include[music-videos]=artists&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url&fields[artists]=name,url&extend[stations]=airDate,supportsAirTimeUpdates&meta[stations]=inflectionPoints&types=artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells&platform=web&l=${this.$root.mklang}`).then((data) => { + this.app.mk.api.music(`/v1/me/recommendations?timezone=${encodeURIComponent(app.formatTimezoneOffset())}&name=listen-now&with=friendsMix,library&art[social-profiles:url]=c&art[url]=c,f&omit[resource]=autos&relate[editorial-items]=contents&extend=editorialCard,editorialVideo&extend[albums]=artistUrl&extend[library-albums]=artistUrl,editorialVideo&extend[playlists]=artistNames,editorialArtwork,editorialVideo&extend[library-playlists]=artistNames,editorialArtwork,editorialVideo&extend[social-profiles]=topGenreNames&include[albums]=artists&include[songs]=artists&include[music-videos]=artists&fields[albums]=artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url&fields[artists]=name,url&extend[stations]=airDate,supportsAirTimeUpdates&meta[stations]=inflectionPoints&types=artists,albums,editorial-items,library-albums,library-playlists,music-videos,playlists,stations,activities,apple-curators,curators&platform=auto&l=${this.$root.mklang}`).then((data) => { console.log(data.data.data[1]) try { self.madeForYou = data.data.data.filter(section => { @@ -227,7 +227,7 @@ self.sectionsReady.push("friendsListeningTo") }); - app.mk.api.v3.music("/v1/me/social/profile/").then((response) => { + app.mk.api.music("/v1/me/social/profile/").then((response) => { self.profile = response.data.data[0] }) diff --git a/src/renderer/views/pages/library-videos.ejs b/src/renderer/views/pages/library-videos.ejs index 6c9e458d..d0835075 100644 --- a/src/renderer/views/pages/library-videos.ejs +++ b/src/renderer/views/pages/library-videos.ejs @@ -30,7 +30,7 @@ mounted() { this.$nextTick(async function () { if (this.$data.videos == null || this.$data.videos.length == 0) - this.$data.videos = (await this.$root.mk.api.v3.music('/v1/me/library/music-videos')).data?.data ?? [] + this.$data.videos = (await this.$root.mk.api.music('/v1/me/library/music-videos')).data?.data ?? [] this.$data.loaded = true }) } diff --git a/src/renderer/views/pages/listen_now.ejs b/src/renderer/views/pages/listen_now.ejs index d33a44ec..6449ca8d 100644 --- a/src/renderer/views/pages/listen_now.ejs +++ b/src/renderer/views/pages/listen_now.ejs @@ -1,8 +1,8 @@ diff --git a/src/renderer/views/pages/playlist-inline.ejs b/src/renderer/views/pages/playlist-inline.ejs index a088f31c..c78637fb 100644 --- a/src/renderer/views/pages/playlist-inline.ejs +++ b/src/renderer/views/pages/playlist-inline.ejs @@ -283,7 +283,7 @@ let friends = badges[id] if (friends) { friends.forEach(function (friend) { - self.app.mk.api.v3.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { + self.app.mk.api.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { self.itemBadges.push(data.data.data[0]) }) }) @@ -347,7 +347,7 @@ } let kind = this.data.attributes.playParams.kind ?? this.data.type ?? ''; const truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`, {}, + app.mk.api.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { fetchOptions: { method: "DELETE" @@ -393,7 +393,7 @@ return } console.log('sds', this.convert()) - await app.mk.api.v3.music( + await app.mk.api.music( `/v1/me/library/playlists/${this.data.attributes.playParams.id}/tracks`, {}, { @@ -473,7 +473,7 @@ if (route === '') { return } - app.mk.api.v3.music(route).then(res => { + app.mk.api.music(route).then(res => { console.log(res.data.data[0].attributes.url) app.copyToClipboard(res.data.data[0].attributes.url) }) diff --git a/src/renderer/views/pages/podcasts.ejs b/src/renderer/views/pages/podcasts.ejs index b13821ff..fe5ffe19 100644 --- a/src/renderer/views/pages/podcasts.ejs +++ b/src/renderer/views/pages/podcasts.ejs @@ -165,7 +165,7 @@ } }, async mounted() { - let podcastShow = await app.mk.api.v3.podcasts(`/v1/me/library/podcasts?include=episodes`) + let podcastShow = await app.mk.api.podcasts(`/v1/me/library/podcasts?include=episodes`) this.podcasts = podcastShow.data.data if (podcastShow.data.next) { await this.getNext(podcastShow.data.next) @@ -190,7 +190,7 @@ if(this.search.term == "") { return } - app.mk.api.v3.podcasts("/v1/catalog/us/search", {term: this.search.term, types: ["podcasts"], limit: 25}).then(response => { + app.mk.api.podcasts("/v1/catalog/us/search", {term: this.search.term, types: ["podcasts"], limit: 25}).then(response => { console.log(response) self.search.results = response.data.results.podcasts.data }) @@ -215,7 +215,7 @@ }, async getEpisodes(podcast) { this.episodes = [] - let eps = await app.mk.api.v3.podcasts(`/v1/catalog/${app.mk.storefrontId}/podcasts/${podcast.id}?include=episodes`) + let eps = await app.mk.api.podcasts(`/v1/catalog/${app.mk.storefrontId}/podcasts/${podcast.id}?include=episodes`) eps.data.data[0].relationships.episodes.data.forEach(ep => { this.episodes.push(ep) @@ -226,7 +226,7 @@ }, async getNextEpisodes(next, podcastId) { - let podcastShow = await app.mk.api.v3.podcasts(next) + let podcastShow = await app.mk.api.podcasts(next) if(podcastId != this.podcastSelected.id) { return } @@ -238,7 +238,7 @@ } }, async getNext(next) { - let podcastShow = await app.mk.api.v3.podcasts(next) + let podcastShow = await app.mk.api.podcasts(next) this.podcasts = this.podcasts.concat(podcastShow.data.data) if (podcastShow.data.next) { await this.getNext(podcastShow.data.next) diff --git a/src/renderer/views/pages/replay.ejs b/src/renderer/views/pages/replay.ejs index 3b4bbe5f..40b5be92 100644 --- a/src/renderer/views/pages/replay.ejs +++ b/src/renderer/views/pages/replay.ejs @@ -97,12 +97,12 @@ }, async mounted() { // Get available years - let year = await app.mk.api.v3.music("/v1/me/music-summaries/search?extend=inLibrary&period=year&fields[music-summaries]=period%2Cyear&include[music-summaries]=playlist") + let year = await app.mk.api.music("/v1/me/music-summaries/search?extend=inLibrary&period=year&fields[music-summaries]=period%2Cyear&include[music-summaries]=playlist") this.years = year.data.data this.years.reverse() localStorage.setItem("seenReplay", true) this.getReplayYear(); - const musicGenre = await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/genres/34`) + const musicGenre = await app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/genres/34`) this.musicTypeGenre = musicGenre.data.data[0].attributes.name }, methods: { @@ -145,10 +145,10 @@ }, async getReplayYear(year = new Date().getFullYear()) { this.loaded.id = -1 - let response = await app.mk.api.v3.music(`/v1/me/music-summaries/year-${year}?extend=inLibrary&views=top-artists%2Ctop-albums%2Ctop-songs&include[music-summaries]=playlist&include[playlists]=tracks&includeOnly=playlist%2Ctracks%2Csong%2Cartist%2Calbum`) + let response = await app.mk.api.music(`/v1/me/music-summaries/year-${year}?extend=inLibrary&views=top-artists%2Ctop-albums%2Ctop-songs&include[music-summaries]=playlist&include[playlists]=tracks&includeOnly=playlist%2Ctracks%2Csong%2Cartist%2Calbum`) let replayData = response.data.data[0] // extended playlist - let playlist = await app.mk.api.v3.music(replayData.relationships.playlist.data[0].href, {extend: "editorialArtwork,editorialVideo"}) + let playlist = await app.mk.api.music(replayData.relationships.playlist.data[0].href, {extend: "editorialArtwork,editorialVideo"}) replayData.playlist = playlist.data.data[0] this.loaded = replayData } diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index 1d2ac6fd..038c737b 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -116,7 +116,7 @@ }, async getCategories() { if (this.categoriesView != [] && this.categoriesView.length > 0) { this.categoriesReady = true; return await true; } else { - let response = await this.app.mk.api.v3.music(`/v1/recommendations/${this.app.mk.storefrontId}?timezone=${encodeURIComponent(this.app.formatTimezoneOffset())}&name=search-landing&platform=web&extend=editorialArtwork&art%5Burl%5D=f%2Cc&types=editorial-items%2Capple-curators%2Cactivities&l=${this.$root.mklang}`); + let response = await this.app.mk.api.music(`/v1/recommendations/${this.app.mk.storefrontId}?timezone=${encodeURIComponent(this.app.formatTimezoneOffset())}&name=search-landing&platform=auto&extend=editorialArtwork&art%5Burl%5D=f%2Cc&types=editorial-items%2Capple-curators%2Cactivities&l=${this.$root.mklang}`); this.categoriesView = response.data.data; console.log(this.categoriesView) this.categoriesReady = true; diff --git a/src/renderer/views/pages/zoo.ejs b/src/renderer/views/pages/zoo.ejs index e36155e6..9976ba1a 100644 --- a/src/renderer/views/pages/zoo.ejs +++ b/src/renderer/views/pages/zoo.ejs @@ -21,7 +21,7 @@ } }, async mounted() { - app.mk.api.v3.music("/v1/catalog/us/artists/669831761").then(response => { + app.mk.api.music("/v1/catalog/us/artists/669831761").then(response => { this.artist = response.data.data[0]; this.artistLoaded = true; }); diff --git a/src/web-remote/views/components/mediaitem-square.ejs b/src/web-remote/views/components/mediaitem-square.ejs index 90e9aa9b..b3fefc39 100644 --- a/src/web-remote/views/components/mediaitem-square.ejs +++ b/src/web-remote/views/components/mediaitem-square.ejs @@ -145,7 +145,7 @@ let friends = this.badges[id] if (friends) { friends.forEach(function (friend) { - self.app.mk.api.v3.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { + self.app.mk.api.music(`/v1/social/${app.mk.storefrontId}/social-profiles/${friend}`).then(data => { self.itemBadges.push(data.data.data[0]) }) }) @@ -186,7 +186,7 @@ } let kind = this.item.attributes.playParams.kind ?? this.item.type ?? ''; var truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`,{}, + app.mk.api.music(`v1/me/library/${truekind}/${id.toString()}`,{}, { fetchOptions: { method: "DELETE" From a2f82d65d75e4adaad7a3290594cf81ace8a16d5 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 25 Feb 2022 07:19:04 +0700 Subject: [PATCH 2/2] add artist images back --- src/renderer/index.js | 15 +++++++++++++++ src/renderer/views/components/artist-chip.ejs | 16 +++++++++++----- .../views/components/mediaitem-square.ejs | 17 ++++++++++++++--- src/renderer/views/pages/artist.ejs | 13 +++++++++++-- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 12c6e192..c9c7834c 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -3911,6 +3911,21 @@ const app = new Vue({ checkForUpdate() { ipcRenderer.send('check-for-update') }, + async loadArtistImage(id){ + try { + let u = await fetch(`https://music.apple.com/${app.mk.storefrontId}/artist/${id}`); + let html = await u.text(); + function getStringBetween(str, start, end) { + const result = str.match(new RegExp(start + "(.*)" + end)); + + return result[1]; + } + let string = getStringBetween(html, '
- +
{{ item.attributes.name }} @@ -16,24 +16,30 @@ props: { item: { type: Object, - required: true + required: true, } }, data: function() { return { artist: { id: null - } + }, + artistimage : '' } }, template: '#artist-chip', async mounted() { - let artistId = this.item.id + let artistId = this.item.id + if(typeof this.item.relationships.catalog == "object") { artistId = this.item.relationships.catalog.data[0].id } - app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => { + app.mk.api.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(async (response) => { this.artist = response.data.data[0]; + if (this.artistimage == '' && artistId != null){ + this.artistimage = (await this.$root.loadArtistImage(artistId) ?? '').replace('300x300','50x50') + + } }); }, methods: { diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index eb0569de..fbf8983c 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -10,7 +10,7 @@