From 2f07a481241e19f9ac789da42ef0b98fc6c81fd8 Mon Sep 17 00:00:00 2001 From: Core <64542347+coredev-uk@users.noreply.github.com> Date: Tue, 14 Dec 2021 23:25:57 +0000 Subject: [PATCH] Various changes to userinfo footer, Discord now works, as does sign out, handling for deauth needs to be done --- resources/cider-ui-tests/assets/logocut.png | Bin 0 -> 17532 bytes resources/cider-ui-tests/index.js | 324 ++++++++++++-------- resources/cider-ui-tests/style.less | 4 +- resources/cider-ui-tests/views/main.ejs | 19 +- resources/functions/cider-base.js | 12 +- 5 files changed, 212 insertions(+), 147 deletions(-) create mode 100644 resources/cider-ui-tests/assets/logocut.png diff --git a/resources/cider-ui-tests/assets/logocut.png b/resources/cider-ui-tests/assets/logocut.png new file mode 100644 index 0000000000000000000000000000000000000000..3f1e9b8ba1b79350fd774a1d15e8055374922449 GIT binary patch literal 17532 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 c;RFEwKN>-gS3}2S8vp {document.getElementById("app-content").scrollTo(0,0);}, - showingPlaylist: () => {document.getElementById("app-content").scrollTo(0,0);}, - artistPage: () => {document.getElementById("app-content").scrollTo(0,0);}, + page: () => { + document.getElementById("app-content").scrollTo(0, 0); + }, + showingPlaylist: () => { + document.getElementById("app-content").scrollTo(0, 0); + }, + artistPage: () => { + document.getElementById("app-content").scrollTo(0, 0); + }, }, methods: { async init() { @@ -179,9 +192,17 @@ const app = new Vue({ this.chrome.userinfo = await this.mkapi("personalSocialProfile", false, "") // API Fallback if (!this.chrome.userinfo) { - this.chrome.userinfo = {"attributes": {"name": "Cider User", "handle": "CiderUser", "artwork": {"url": "../icons/icon.png"}}} + this.chrome.userinfo = { + "id": "", + "attributes": { + "name": "Cider User", + "handle": "CiderUser", + "artwork": {"url": "http://localhost:9000/assets/logocut.png"} + } + } } + // load cached library if (localStorage.getItem("librarySongs") != null) { this.library.songs.listing = JSON.parse(localStorage.getItem("librarySongs")) @@ -263,9 +284,10 @@ const app = new Vue({ this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => { this.currentSongInfo = a - try{ + try { a = a.item.attributes; - } catch(_){} + } catch (_) { + } let type = (self.mk.nowPlayingItem != null) ? self.mk.nowPlayingItem["type"] ?? '' : ''; @@ -281,20 +303,21 @@ const app = new Vue({ app.getNowPlayingArtwork(42); app.getNowPlayingArtworkBG(32); app.loadLyrics() - - try{ - // Playback Notifications - if ((app.platform === "darwin" || app.platform === "linux") && !document.hasFocus()) { - if (this.notification) { - this.notification.close() + + try { + // Playback Notifications + if ((app.platform === "darwin" || app.platform === "linux") && !document.hasFocus()) { + if (this.notification) { + this.notification.close() + } + this.notification = new Notification(a.name, { + body: a.artistName, + icon: (a.artwork.url.replace('/{w}x{h}bb', '/512x512bb')).replace('/2000x2000bb', '/35x35bb'), + silent: true + }) } - this.notification = new Notification(a.name, { - body: a.artistName, - icon: (a.artwork.url.replace('/{w}x{h}bb', '/512x512bb')).replace('/2000x2000bb', '/35x35bb'), - silent: true - }) + } catch (_) { } - } catch (_){} }) this.apiCall('https://api.music.apple.com/v1/me/library/playlists', res => { @@ -302,18 +325,18 @@ const app = new Vue({ }) document.body.removeAttribute("loading") }, - async showCollection (response, title, type) { + async showCollection(response, title, type) { let self = this this.collectionList.response = response this.collectionList.title = title this.collectionList.type = type this.page = "collection-list" }, - async showArtistView (artist, title, view) { + async showArtistView(artist, title, view) { let response = await this.mk.api.artistView(artist, view, {}, {view: view, includeResponseMeta: !0}) await this.showCollection(response, title, "artists") }, - async showRecordLabelView (label, title, view) { + async showRecordLabelView(label, title, view) { let response = await this.mk.api.recordLabelView(label, view, {}, {view: view, includeResponseMeta: !0}) await this.showCollection(response, title, "record-labels") }, @@ -353,19 +376,21 @@ const app = new Vue({ await this.showCollection(responseFormat, title, "search") }, async getPlaylistFromID(id) { - const params = {include: "tracks", + const params = { + include: "tracks", platform: "web", "include[library-playlists]": "catalog,tracks", "fields[playlists]": "curatorName,playlistType,name,artwork,url", "include[library-songs]": "catalog,artists,albums", "fields[catalog]": "artistUrl,albumUrl", - "fields[songs]": "artistUrl,albumUrl"} + "fields[songs]": "artistUrl,albumUrl" + } try { - this.showingPlaylist = await app.mk.api.library.playlist(id,params) + this.showingPlaylist = await app.mk.api.library.playlist(id, params) } catch (e) { console.log(e); try { - this.showingPlaylist = await app.mk.api.playlist(id,params) + this.showingPlaylist = await app.mk.api.playlist(id, params) } catch (err) { console.log(err) } @@ -386,14 +411,14 @@ const app = new Vue({ this.artistPage.data = artistData.data[0] this.page = "artist-page" }, - progressBarStyle () { + progressBarStyle() { let val = this.playerLCD.playbackDuration - if(this.playerLCD.desiredDuration > 0) { + if (this.playerLCD.desiredDuration > 0) { val = this.playerLCD.desiredDuration } let min = 0 let max = this.mk.currentPlaybackDuration - let value = (val-min)/(max-min)*100 + let value = (val - min) / (max - min) * 100 return { 'background': ('linear-gradient(to right, var(--keyColor) 0%, var(--keyColor) ' + value + '%, #333 ' + value + '%, #333 100%)') } @@ -403,7 +428,7 @@ const app = new Vue({ "data": [], "meta": {} } - if(response.next) { + if (response.next) { console.log("has next") returnData.data.concat(response.data) returnData.meta = response.meta @@ -415,7 +440,7 @@ const app = new Vue({ } }, async getSearchHints() { - if(this.search.term == "") { + if (this.search.term == "") { this.search.hints = [] return } @@ -423,16 +448,16 @@ const app = new Vue({ this.search.hints = hints ? hints.terms : [] }, getSongProgress() { - if(this.playerLCD.userInteraction) { + if (this.playerLCD.userInteraction) { return this.playerLCD.desiredDuration - } else{ + } else { return this.playerLCD.playbackDuration } }, convertToMins(time) { - let mins = Math.floor(time/60) - let seconds = (Math.floor(time%60) / 100).toFixed(2) - return `${mins}:${seconds.replace("0.","")}` + let mins = Math.floor(time / 60) + let seconds = (Math.floor(time % 60) / 100).toFixed(2) + return `${mins}:${seconds.replace("0.", "")}` }, hashCode(str) { var hash = 0, i, chr; @@ -447,25 +472,30 @@ const app = new Vue({ routeView(item) { let self = this - + let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); ; let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false; console.log(kind, id, isLibrary) // disable apple-curators because they can't be played in MKjs - if (!kind.toString().includes("apple-curator")){ + if (!kind.toString().includes("apple-curator")) { app.showingPlaylist = []; if (kind.toString().includes("artist")) { app.getArtistInfo(id, isLibrary) } else if (kind.toString().includes("record-label") || kind.toString().includes("curator")) { - if (kind.toString().includes("record-label")) - {kind = "recordLabel"} - else {kind = "curator"} + if (kind.toString().includes("record-label")) { + kind = "recordLabel" + } else { + kind = "curator" + } app.page = (kind) + "_" + (id); - app.getTypeFromID((kind), (id), (isLibrary), {extend: "editorialVideo",include: 'grouping,playlists', views: 'top-releases,latest-releases,top-artists'}); - } - else if (!kind.toString().includes("radioStation") && !kind.toString().includes("song") && !kind.toString().includes("musicVideo") && !kind.toString().includes("uploadedVideo")) { + app.getTypeFromID((kind), (id), (isLibrary), { + extend: "editorialVideo", + include: 'grouping,playlists', + views: 'top-releases,latest-releases,top-artists' + }); + } else if (!kind.toString().includes("radioStation") && !kind.toString().includes("song") && !kind.toString().includes("musicVideo") && !kind.toString().includes("uploadedVideo")) { app.page = (kind) + "_" + (id); app.getTypeFromID((kind), (id), (isLibrary), {extend: "editorialVideo"}); } else { @@ -474,35 +504,42 @@ const app = new Vue({ document.querySelector("#app-content").scrollTop = 0 } }, - async getNowPlayingItemDetailed(target){ - let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind, (app.mk.nowPlayingItem.songId == -1) , (app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem.id, {"include[songs]":"albums,artists"} ); - app.searchAndNavigate(u,target) + async getNowPlayingItemDetailed(target) { + let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind, (app.mk.nowPlayingItem.songId == -1), (app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem.id, {"include[songs]": "albums,artists"}); + app.searchAndNavigate(u, target) }, - async searchAndNavigate(item,target){ + async searchAndNavigate(item, target) { app.tmpVar = item; - switch(target){ + switch (target) { case "artist": let artistId = ''; try { if (item.relationships.artists && item.relationships.artists.data.length > 0) { - if (item.relationships.artists.data[0].type === "artist" || item.relationships.artists.data[0].type === "artists") { artistId = item.relationships.artists.data[0].id } + if (item.relationships.artists.data[0].type === "artist" || item.relationships.artists.data[0].type === "artists") { + artistId = item.relationships.artists.data[0].id + } } else { const url = (item.relationships.catalog.data[0].attributes.artistUrl); artistId = (url).substring(url.lastIndexOf('/') + 1) - if (artistId.includes('viewCollaboration')) { artistId = artistId.substring(artistId.lastIndexOf('ids=') + 4, artistId.lastIndexOf('-')) } + if (artistId.includes('viewCollaboration')) { + artistId = artistId.substring(artistId.lastIndexOf('ids=') + 4, artistId.lastIndexOf('-')) + } } + } catch (_) { } - catch (_) { } if (artistId == "") { - let artistQuery = await app.mk.api.search(item.attributes.artistName, { limit: 1, types: 'artists' }) + let artistQuery = await app.mk.api.search(item.attributes.artistName, { + limit: 1, + types: 'artists' + }) try { if (artistQuery.artists.data.length > 0) { artistId = artistQuery.artists.data[0].id; console.log(artistId) } + } catch (e) { } - catch (e) {} } console.log(artistId); if (artistId != "") @@ -512,52 +549,59 @@ const app = new Vue({ let albumId = ''; try { if (item.relationships.albums && item.relationships.albums.data.length > 0) { - if (item.relationships.albums.data[0].type === "album" || item.relationships.albums.data[0].type === "albums") { albumId = item.relationships.albums.data[0].id } + if (item.relationships.albums.data[0].type === "album" || item.relationships.albums.data[0].type === "albums") { + albumId = item.relationships.albums.data[0].id + } } + } catch (_) { } - catch (_) { } - if (albumId == "") { + if (albumId == "") { try { - let albumQuery = await app.mk.api.search(item.attributes.albumName +" "+ (item.attributes.artistName ?? ""), { limit: 1, types: 'albums' }) + let albumQuery = await app.mk.api.search(item.attributes.albumName + " " + (item.attributes.artistName ?? ""), { + limit: 1, + types: 'albums' + }) if (albumQuery.albums.data.length > 0) { albumId = albumQuery.albums.data[0].id; console.log(albumId) } + } catch (e) { } - catch (e) {} } - if (albumId != "") - { - app.getTypeFromID("album",albumId, false); - app.page = "album_" + albumId;} - break; + if (albumId != "") { + app.getTypeFromID("album", albumId, false); + app.page = "album_" + albumId; + } + break; case "recordLabel": let labelId = ''; try { - labelId = item.relationships['record-labels'].data[0].id + labelId = item.relationships['record-labels'].data[0].id + } catch (_) { } - catch (_) { } - if (labelId == "") { + if (labelId == "") { try { - let labelQuery = await app.mk.api.search(item.attributes.recordLabel, { limit: 1, types: 'record-labels' }) + let labelQuery = await app.mk.api.search(item.attributes.recordLabel, { + limit: 1, + types: 'record-labels' + }) if (labelQuery["record-labels"].data.length > 0) { labelId = labelQuery["record-labels"].data[0].id; console.log(labelId) } + } catch (e) { } - catch (e) {} } - if (labelId != "") - { - app.showingPlaylist = [] - - await app.getTypeFromID("recordLabel",labelId, false,{views: 'top-releases,latest-releases,top-artists'}); - app.page = "recordLabel_" + labelId; - } - - break; + if (labelId != "") { + app.showingPlaylist = [] + + await app.getTypeFromID("recordLabel", labelId, false, {views: 'top-releases,latest-releases,top-artists'}); + app.page = "recordLabel_" + labelId; + } + + break; } }, pushNavigationEvent(item) { @@ -595,8 +639,8 @@ const app = new Vue({ async getTypeFromID(kind, id, isLibrary = false, params = {}) { var a; if (kind == "album" | kind == "albums") { - params["include"] = "tracks,artists,record-labels"; - } + params["include"] = "tracks,artists,record-labels"; + } try { a = await this.mkapi(kind.toString(), isLibrary, id.toString(), params); } catch (e) { @@ -700,6 +744,7 @@ const app = new Vue({ // make a copy of searchLibrarySongs except use Albums instead of Songs searchLibraryAlbums() { let self = this + function sortAlbums() { if (self.library.albums.sortOrder == "asc") { // sort this.library.albums.displayListing by album.attributes[self.library.albums.sorting] in ascending order based on alphabetical order and numeric order @@ -750,6 +795,7 @@ const app = new Vue({ }) } } + if (this.library.albums.search == "") { this.library.albums.displayListing = this.library.albums.listing sortAlbums() @@ -820,7 +866,7 @@ const app = new Vue({ if ((this.library.songs.downloadState == 2) && !force) { return } - if(this.library.songs.downloadState == 1) { + if (this.library.songs.downloadState == 1) { return } if (localStorage.getItem("librarySongs") != null) { @@ -835,13 +881,14 @@ const app = new Vue({ this.library.downloadNotification.message = "Updating library songs..." function downloadChunk() { - const params = {"include[library-songs]": "artists,albums", - "fields[artists]":"name,url,id", - "fields[albums]":"name,url,id", - platform: "web", - "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", - limit: 100, - } + const params = { + "include[library-songs]": "artists,albums", + "fields[artists]": "name,url,id", + "fields[albums]": "name,url,id", + platform: "web", + "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", + limit: 100, + } self.library.songs.downloadState = 1 if (downloaded == null) { app.mk.api.library.songs("", params, {includeResponseMeta: !0}).then((response) => { @@ -953,14 +1000,18 @@ const app = new Vue({ console.log(library) } } + downloadChunk() }, getTotalTime() { - try{ - if (app.showingPlaylist.relationships.tracks.data.length > 0) { - time = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, {attributes: {durationInMillis}}) => a + durationInMillis, 0) / 60000); - return app.showingPlaylist.relationships.tracks.data.length + " tracks, " + time + " mins."; - } else return ""} catch(err){return ""} + try { + if (app.showingPlaylist.relationships.tracks.data.length > 0) { + time = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, {attributes: {durationInMillis}}) => a + durationInMillis, 0) / 60000); + return app.showingPlaylist.relationships.tracks.data.length + " tracks, " + time + " mins."; + } else return "" + } catch (err) { + return "" + } }, async getLibrarySongs() { var response = await this.mkapi("songs", true, "", {limit: 100}, {includeResponseMeta: !0}) @@ -1017,17 +1068,17 @@ const app = new Vue({ } try { var browse = await this.mk.api.groupings("", - { - platform: "web", - name: "music", - "omit[resource:artists]": "relationships", - "include[albums]": "artists", - "include[songs]": "artists", - "include[music-videos]": "artists", - extend: "editorialArtwork,artistUrl", - "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", - "art[url]": "f" - }); + { + platform: "web", + name: "music", + "omit[resource:artists]": "relationships", + "include[albums]": "artists", + "include[songs]": "artists", + "include[music-videos]": "artists", + extend: "editorialArtwork,artistUrl", + "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", + "art[url]": "f" + }); this.browsepage = browse[0]; console.log(this.browsepage) } catch (e) { @@ -1072,7 +1123,7 @@ const app = new Vue({ }, addToLibrary(id) { let self = this - this.mk.addToLibrary(id).then((data)=>{ + this.mk.addToLibrary(id).then((data) => { self.getLibrarySongsFull(true) }) }, @@ -1319,10 +1370,10 @@ const app = new Vue({ }) } } - } else if (app.currentLyricsLine == 0) { + } else if (app.currentLyricsLine == 0) { if (document.querySelector(`.lyric-line[line-index="0"]`) && !document.querySelector(`.lyric-line[line-index="0"]`).classList.contains("active")) - document.querySelector(`.lyric-line[line-index="0"]`).classList.add("active"); - } + document.querySelector(`.lyric-line[line-index="0"]`).classList.add("active"); + } break; } } @@ -1437,7 +1488,7 @@ const app = new Vue({ }, async searchQuery(term = this.search.term) { let self = this - if(term == "") { + if (term == "") { return } this.mk.api.search(this.search.term, @@ -1500,25 +1551,28 @@ const app = new Vue({ return newurl }, getNowPlayingArtworkBG(size = 600) { - let interval = setInterval(()=>{ - if (!this.mkReady()) { - return "" - } + let interval = setInterval(() => { + if (!this.mkReady()) { + return "" + } - try { - if (this.mk.nowPlayingItem && this.mk.nowPlayingItem.id != this.currentTrackID && document.querySelector('.bg-artwork')) { - if (document.querySelector('.bg-artwork')){ - clearInterval(interval); + try { + if (this.mk.nowPlayingItem && this.mk.nowPlayingItem.id != this.currentTrackID && document.querySelector('.bg-artwork')) { + if (document.querySelector('.bg-artwork')) { + clearInterval(interval); + } + this.currentTrackID = this.mk.nowPlayingItem.id; + document.querySelector('.bg-artwork').style.src = ""; + if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { + document.querySelector('.bg-artwork').style.src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); + } else { + this.setLibraryArtBG() + } } - this.currentTrackID = this.mk.nowPlayingItem.id; - document.querySelector('.bg-artwork').style.src = ""; - if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { - document.querySelector('.bg-artwork').style.src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); - } else { - this.setLibraryArtBG()} - } - } catch (e) { - this.setLibraryArtBG()}},200) + } catch (e) { + this.setLibraryArtBG() + } + }, 200) }, getNowPlayingArtwork(size = 600) { let interval = setInterval(() => { @@ -1544,9 +1598,8 @@ const app = new Vue({ }, 200) - }, - + async setLibraryArt() { const data = await this.mk.api.library.song(this.mk.nowPlayingItem.id) try { @@ -1563,10 +1616,11 @@ const app = new Vue({ const data = await this.mk.api.library.song(this.mk.nowPlayingItem.id) try { if (data != null && data !== "") { - document.querySelector('.bg-artwork').src = (data["attributes"]["artwork"]["url"]).toString() ; - } - } catch (e) {} - + document.querySelector('.bg-artwork').src = (data["attributes"]["artwork"]["url"]).toString(); + } + } catch (e) { + } + }, quickPlay(query) { let self = this @@ -1612,7 +1666,7 @@ const app = new Vue({ // tracks are found in relationship.data }, windowFocus(val) { - if(val) { + if (val) { document.querySelectorAll(".animated-artwork-video").forEach(el => { el.play() }) @@ -1646,7 +1700,7 @@ document.addEventListener('musickitloaded', function () { const request = new XMLHttpRequest(); request.addEventListener("load", initMusicKit); request.open("GET", "https://api.cider.sh/"); - request.send(); + request.send(); }); function refreshFocus() { diff --git a/resources/cider-ui-tests/style.less b/resources/cider-ui-tests/style.less index da2d0db7..fc44799c 100644 --- a/resources/cider-ui-tests/style.less +++ b/resources/cider-ui-tests/style.less @@ -697,8 +697,8 @@ input[type=range].web-slider::-webkit-slider-runnable-track { font-weight: 400; font-size: 12px; text-align: center; - height: 1.2em; - line-height: 1.2em; + /*height: 1.2em; + line-height: 1.2em;*/ overflow: hidden; /* animation: marquee 10s linear infinite; */ } diff --git a/resources/cider-ui-tests/views/main.ejs b/resources/cider-ui-tests/views/main.ejs index 4719fea8..a8b36053 100644 --- a/resources/cider-ui-tests/views/main.ejs +++ b/resources/cider-ui-tests/views/main.ejs @@ -185,13 +185,13 @@ - - @@ -204,14 +204,13 @@