fixes and adds continuous loading to non library playlists
This commit is contained in:
parent
135793850a
commit
224a0d4e2e
1 changed files with 109 additions and 81 deletions
|
@ -297,7 +297,6 @@ const app = new Vue({
|
|||
MusicKit.getInstance().videoContainerElement = document.getElementById("apple-music-video-player")
|
||||
|
||||
|
||||
|
||||
this.mk.addEventListener(MusicKit.Events.playbackTimeDidChange, (a) => {
|
||||
if (self.mk.nowPlayingItem && self.mk.nowPlayingItem.playParams.kind.includes('ideo')) {
|
||||
self.lyriccurrenttime = (self.mk.currentPlaybackTime)
|
||||
|
@ -457,6 +456,32 @@ const app = new Vue({
|
|||
}
|
||||
await this.showCollection(responseFormat, title, "search")
|
||||
},
|
||||
async getPlaylistContinuous(response) {
|
||||
let self = this
|
||||
let playlistId = response.id
|
||||
this.playlists.loadingState = 0
|
||||
this.showingPlaylist = response
|
||||
if(!response.relationships.tracks.next) {
|
||||
this.playlists.loadingState = 1
|
||||
return
|
||||
}
|
||||
function getPlaylistTracks(next) {
|
||||
app.apiCall(app.musicBaseUrl + next, res => {
|
||||
if (self.showingPlaylist.id != playlistId) {
|
||||
return
|
||||
}
|
||||
self.showingPlaylist.relationships.tracks.data = self.showingPlaylist.relationships.tracks.data.concat(res.data)
|
||||
if (res.next) {
|
||||
getPlaylistTracks(res.next)
|
||||
} else {
|
||||
self.playlists.loadingState = 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
getPlaylistTracks(response.relationships.tracks.next)
|
||||
|
||||
},
|
||||
async getPlaylistFromID(id) {
|
||||
let self = this
|
||||
const params = {
|
||||
|
@ -471,39 +496,17 @@ const app = new Vue({
|
|||
|
||||
this.playlists.loadingState = 0
|
||||
let playlistId = ''
|
||||
// TO DO: Replace with a universal function for recursive calls
|
||||
function getPlaylistTracks(next) {
|
||||
if (!next) {
|
||||
app.mk.api.library.playlist(id, params).then(res => {
|
||||
self.showingPlaylist = res
|
||||
playlistId = res.id
|
||||
if (res.relationships.tracks.next) {
|
||||
getPlaylistTracks(res.relationships.tracks.next)
|
||||
} else {
|
||||
self.playlists.loadingState = 1
|
||||
}
|
||||
})
|
||||
} else {
|
||||
app.apiCall(app.musicBaseUrl + next, res => {
|
||||
if(self.showingPlaylist.id != playlistId) {
|
||||
return
|
||||
}
|
||||
self.showingPlaylist.relationships.tracks.data = self.showingPlaylist.relationships.tracks.data.concat(res.data)
|
||||
if (res.next) {
|
||||
getPlaylistTracks(res.next)
|
||||
} else {
|
||||
self.playlists.loadingState = 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
try {
|
||||
getPlaylistTracks()
|
||||
app.mk.api.library.playlist(id, params).then(res => {
|
||||
self.getPlaylistContinuous(res)
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
try {
|
||||
getPlaylistTracks()
|
||||
app.mk.api.library.playlist(id, params).then(res => {
|
||||
self.getPlaylistContinuous(res)
|
||||
})
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
}
|
||||
|
@ -642,8 +645,7 @@ const app = new Vue({
|
|||
});
|
||||
window.location.hash = `${kind}/${id}`
|
||||
document.querySelector("#app-content").scrollTop = 0
|
||||
}
|
||||
else if (kind.toString().includes("artist")) {
|
||||
} else if (kind.toString().includes("artist")) {
|
||||
app.getArtistInfo(id, isLibrary)
|
||||
window.location.hash = `${kind}/${id}`
|
||||
document.querySelector("#app-content").scrollTop = 0
|
||||
|
@ -825,12 +827,10 @@ const app = new Vue({
|
|||
console.log(err);
|
||||
a = []
|
||||
} finally {
|
||||
this.showingPlaylist = a
|
||||
this.playlists.loadingState = 1
|
||||
this.getPlaylistContinuous(a)
|
||||
}
|
||||
} finally {
|
||||
this.showingPlaylist = a
|
||||
this.playlists.loadingState = 1
|
||||
this.getPlaylistContinuous(a)
|
||||
}
|
||||
;
|
||||
},
|
||||
|
@ -1365,7 +1365,8 @@ const app = new Vue({
|
|||
lrcrich = jsonResponse["message"]["body"]["macro_calls"]["track.richsync.get"]["message"]["body"]["richsync"]["richsync_body"];
|
||||
richsync = JSON.parse(lrcrich);
|
||||
app.richlyrics = richsync;
|
||||
} catch (_) { }
|
||||
} catch (_) {
|
||||
}
|
||||
}
|
||||
|
||||
if (lrcfile == "") {
|
||||
|
@ -1589,8 +1590,7 @@ const app = new Vue({
|
|||
app.mk.setStationQueue({artist: 'a-' + id}).then(() => {
|
||||
app.mk.play()
|
||||
})
|
||||
}
|
||||
else if (truekind == "radioStations") {
|
||||
} else if (truekind == "radioStations") {
|
||||
this.mk.setStationQueue({url: raurl}).then(function (queue) {
|
||||
MusicKit.getInstance().play()
|
||||
});
|
||||
|
@ -1618,20 +1618,29 @@ const app = new Vue({
|
|||
}
|
||||
|
||||
let query = app.library.songs.listing.map(item => new MusicKit.MediaItem(item));
|
||||
try { app.mk.stop() } catch (e) { }
|
||||
try {
|
||||
app.mk.stop()
|
||||
} catch (e) {
|
||||
}
|
||||
this.mk.clearQueue().then(function (_) {
|
||||
app.mk.queue.append(query)
|
||||
app.mk.changeToMediaAtIndex(childIndex)
|
||||
})
|
||||
} else {
|
||||
try { app.mk.stop() } catch (e) { }
|
||||
try {
|
||||
app.mk.stop()
|
||||
} catch (e) {
|
||||
}
|
||||
this.mk.setQueue({[truekind]: [id]}).then(function (queue) {
|
||||
app.mk.changeToMediaAtIndex(childIndex)
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
try { app.mk.stop() } catch (e) { }
|
||||
try {
|
||||
app.mk.stop()
|
||||
} catch (e) {
|
||||
}
|
||||
this.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url)
|
||||
}
|
||||
|
||||
|
@ -1763,17 +1772,26 @@ const app = new Vue({
|
|||
document.querySelector('.bg-artwork').src = "";
|
||||
if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) {
|
||||
document.querySelector('.bg-artwork').src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size);
|
||||
try { clearInterval(bginterval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(bginterval);
|
||||
} catch (err) {
|
||||
}
|
||||
} else {
|
||||
this.setLibraryArtBG()
|
||||
}
|
||||
} else if (this.mk.nowPlayingItem["id"] == this.currentTrackID) {
|
||||
try { clearInterval(bginterval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(bginterval);
|
||||
} catch (err) {
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] && document.querySelector('.bg-artwork')) {
|
||||
this.setLibraryArtBG()
|
||||
try { clearInterval(bginterval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(bginterval);
|
||||
} catch (err) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 200)
|
||||
|
@ -1791,17 +1809,26 @@ const app = new Vue({
|
|||
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', '');
|
||||
if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) {
|
||||
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${decodeURI((this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"])).replace('{w}', size).replace('{h}', size)}")`);
|
||||
try { clearInterval(interval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(interval);
|
||||
} catch (err) {
|
||||
}
|
||||
} else {
|
||||
this.setLibraryArt()
|
||||
}
|
||||
} else if (this.mk.nowPlayingItem["id"] == this.currentTrackID) {
|
||||
try { clearInterval(interval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(interval);
|
||||
} catch (err) {
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] && document.querySelector('.app-playback-controls .artwork')) {
|
||||
this.setLibraryArt()
|
||||
try { clearInterval(interval); } catch (err) { }
|
||||
try {
|
||||
clearInterval(interval);
|
||||
} catch (err) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -2019,5 +2046,6 @@ async function webGPU() {
|
|||
const currentGPU = await navigator.gpu.requestAdapter()
|
||||
console.log("WebGPU enabled on", currentGPU.name, "with feature ID", currentGPU.features.size)
|
||||
}
|
||||
|
||||
webGPU().then()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue