Added go to artist/go to album to now playing

This commit is contained in:
booploops 2022-02-23 18:29:43 -08:00
parent f636524dab
commit 7d648d0e76

View file

@ -20,7 +20,8 @@ const CiderFrontAPI = {
MenuEntry: function () { MenuEntry: function () {
this.id = "" this.id = ""
this.name = "" this.name = ""
this.onClick = () => { } this.onClick = () => {
}
} }
}, },
AddMenuEntry(entry) { AddMenuEntry(entry) {
@ -354,7 +355,9 @@ const app = new Vue({
// fallback English plural forms ( old i18n ) // fallback English plural forms ( old i18n )
if (options["count"] > 1) { if (options["count"] > 1) {
return this.lz[message + "s"] ?? this.lz[message] return this.lz[message + "s"] ?? this.lz[message]
} else { return this.lz[message] ?? this.lz[message + "s"] } } else {
return this.lz[message] ?? this.lz[message + "s"]
}
} }
} else if (typeof this.lz[message] === "object") { } else if (typeof this.lz[message] === "object") {
return (this.lz[message])[Object.keys(this.lz[message])[0]] return (this.lz[message])[Object.keys(this.lz[message])[0]]
@ -776,7 +779,8 @@ const app = new Vue({
let replaygain = self.parseSCTagToRG(tag) let replaygain = self.parseSCTagToRG(tag)
try { try {
CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak))) CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak)))
} catch (e) { } } catch (e) {
}
}) })
ipcRenderer.on('play', function (_event, mode, id) { ipcRenderer.on('play', function (_event, mode, id) {
@ -1429,11 +1433,19 @@ const app = new Vue({
prevButton() { prevButton() {
if (!app.prevButtonBackIndicator && app.mk.nowPlayingItem && app.mk.currentPlaybackTime > 2) { if (!app.prevButtonBackIndicator && app.mk.nowPlayingItem && app.mk.currentPlaybackTime > 2) {
app.prevButtonBackIndicator = true; app.prevButtonBackIndicator = true;
try { clearTimeout(app.pauseButtonTimer) } catch (e) { } try {
clearTimeout(app.pauseButtonTimer)
} catch (e) {
}
app.mk.seekToTime(0); app.mk.seekToTime(0);
app.pauseButtonTimer = setTimeout(() => { app.prevButtonBackIndicator = false }, 3000); app.pauseButtonTimer = setTimeout(() => {
app.prevButtonBackIndicator = false
}, 3000);
} else { } else {
try { clearTimeout(app.pauseButtonTimer) } catch (e) { } try {
clearTimeout(app.pauseButtonTimer)
} catch (e) {
}
app.prevButtonBackIndicator = false; app.prevButtonBackIndicator = false;
app.skipToPreviousItem() app.skipToPreviousItem()
} }
@ -1680,8 +1692,11 @@ const app = new Vue({
searchLibrarySongs() { searchLibrarySongs() {
let self = this let self = this
let prefs = this.cfg.libraryPrefs.songs let prefs = this.cfg.libraryPrefs.songs
let albumAdded = self.library?.albums?.listing?.map(function (i) { return { [i.id]: i.attributes?.dateAdded } }) let albumAdded = self.library?.albums?.listing?.map(function (i) {
return {[i.id]: i.attributes?.dateAdded}
})
let startTime = new Date().getTime() let startTime = new Date().getTime()
function sortSongs() { function sortSongs() {
// sort this.library.songs.displayListing by song.attributes[self.library.songs.sorting] in descending or ascending order based on alphabetical order and numeric order // sort this.library.songs.displayListing by song.attributes[self.library.songs.sorting] in descending or ascending order based on alphabetical order and numeric order
// check if song.attributes[self.library.songs.sorting] is a number and if so, sort by number if not, sort by alphabetical order ignoring case // check if song.attributes[self.library.songs.sorting] is a number and if so, sort by number if not, sort by alphabetical order ignoring case
@ -2902,7 +2917,8 @@ const app = new Vue({
let u = data.map(x => x.id) let u = data.map(x => x.id)
try { try {
data.splice(u.indexOf(item.attributes.playParams.id ?? item.id), 1) data.splice(u.indexOf(item.attributes.playParams.id ?? item.id), 1)
} catch (e) { } } catch (e) {
}
if (app.mk.shuffleMode == 1) { if (app.mk.shuffleMode == 1) {
shuffleArray(data) shuffleArray(data)
} }
@ -2960,8 +2976,7 @@ const app = new Vue({
} }
} }
}) })
} } else {
else {
app.mk.stop().then(() => { app.mk.stop().then(() => {
if (truekind == "playlists" && (id.startsWith("p.") || id.startsWith("pl.u"))) { if (truekind == "playlists" && (id.startsWith("p.") || id.startsWith("pl.u"))) {
app.mk.setQueue({ app.mk.setQueue({
@ -3323,7 +3338,10 @@ const app = new Vue({
quickPlay(query) { quickPlay(query) {
let self = this let self = this
MusicKit.getInstance().api.search(query, {limit: 2, types: 'songs'}).then(function (data) { MusicKit.getInstance().api.search(query, {limit: 2, types: 'songs'}).then(function (data) {
MusicKit.getInstance().setQueue({ song: data["songs"]['data'][0]["id"], parameters: { l: app.mklang } }).then(function (queue) { MusicKit.getInstance().setQueue({
song: data["songs"]['data'][0]["id"],
parameters: {l: app.mklang}
}).then(function (queue) {
MusicKit.getInstance().play() MusicKit.getInstance().play()
setTimeout(() => { setTimeout(() => {
self.$forceUpdate() self.$forceUpdate()
@ -3576,6 +3594,20 @@ const app = new Vue({
}) })
} }
}, },
{
"icon": "./assets/feather/user.svg",
"name": app.getLz('action.goToArtist'),
"action": function () {
app.appRoute(`artist/${app.mk.nowPlayingItem.relationships.artists.data[0].id}`)
}
},
{
"icon": "./assets/feather/disc.svg",
"name": app.getLz('action.goToAlbum'),
"action": function () {
app.appRoute(`album/${app.mk.nowPlayingItem.relationships.albums.data[0].id}`)
}
},
{ {
"icon": "./assets/feather/share.svg", "icon": "./assets/feather/share.svg",
"name": app.getLz('action.share'), "name": app.getLz('action.share'),
@ -3789,7 +3821,9 @@ const app = new Vue({
try { try {
let item = await MusicKit.getInstance().api.v3.music(`v1/storefronts/${app.mk.storefrontId}`) let item = await MusicKit.getInstance().api.v3.music(`v1/storefronts/${app.mk.storefrontId}`)
let langcodes = item.data.data[0].attributes.supportedLanguageTags; let langcodes = item.data.data[0].attributes.supportedLanguageTags;
if (langcodes) langcodes = langcodes.map(function (u) { return u.replace(/-Han[s|t]/i, "").toLowerCase() }) if (langcodes) langcodes = langcodes.map(function (u) {
return u.replace(/-Han[s|t]/i, "").toLowerCase()
})
console.log(langcodes) console.log(langcodes)
let sellang = "" let sellang = ""
if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) { if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) {
@ -3805,8 +3839,7 @@ const app = new Vue({
console.log(sellang) console.log(sellang)
return await sellang return await sellang
} } catch (err) {
catch (err) {
console.log('locale err', err) console.log('locale err', err)
let langcodes = ['af', 'sq', 'ar', 'eu', 'bg', 'be', 'ca', 'zh', 'zh-tw', 'zh-cn', 'zh-hk', 'zh-sg', 'hr', 'cs', 'da', 'nl', 'nl-be', 'en', 'en-us', 'en-eg', 'en-au', 'en-gb', 'en-ca', 'en-nz', 'en-ie', 'en-za', 'en-jm', 'en-bz', 'en-tt', 'en-001', 'et', 'fo', 'fa', 'fi', 'fr', 'fr-ca', 'gd', 'de', 'de-ch', 'el', 'he', 'hi', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'mk', 'mt', 'no', 'nb', 'nn', 'pl', 'pt-br', 'pt', 'rm', 'ro', 'ru', 'sr', 'sk', 'sl', 'es', 'es-mx', 'es-419', 'sv', 'th', 'ts', 'tn', 'tr', 'uk', 'ur', 've', 'vi', 'xh', 'yi', 'zu', 'ms', 'iw', 'lo', 'tl', 'kk', 'ta', 'te', 'bn', 'ga', 'ht', 'la', 'pa', 'sa']; let langcodes = ['af', 'sq', 'ar', 'eu', 'bg', 'be', 'ca', 'zh', 'zh-tw', 'zh-cn', 'zh-hk', 'zh-sg', 'hr', 'cs', 'da', 'nl', 'nl-be', 'en', 'en-us', 'en-eg', 'en-au', 'en-gb', 'en-ca', 'en-nz', 'en-ie', 'en-za', 'en-jm', 'en-bz', 'en-tt', 'en-001', 'et', 'fo', 'fa', 'fi', 'fr', 'fr-ca', 'gd', 'de', 'de-ch', 'el', 'he', 'hi', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'mk', 'mt', 'no', 'nb', 'nn', 'pl', 'pt-br', 'pt', 'rm', 'ro', 'ru', 'sr', 'sk', 'sl', 'es', 'es-mx', 'es-419', 'sv', 'th', 'ts', 'tn', 'tr', 'uk', 'ur', 've', 'vi', 'xh', 'yi', 'zu', 'ms', 'iw', 'lo', 'tl', 'kk', 'ta', 'te', 'bn', 'ga', 'ht', 'la', 'pa', 'sa'];
let sellang = "en" let sellang = "en"
@ -3831,8 +3864,12 @@ const app = new Vue({
this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex); this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex);
}, },
mediaKeyFixes() { mediaKeyFixes() {
navigator.mediaSession.setActionHandler('previoustrack', function () { app.prevButton() }); navigator.mediaSession.setActionHandler('previoustrack', function () {
navigator.mediaSession.setActionHandler('nexttrack', function () { app.skipToNextItem() }); app.prevButton()
});
navigator.mediaSession.setActionHandler('nexttrack', function () {
app.skipToNextItem()
});
}, },
checkForUpdate() { checkForUpdate() {
ipcRenderer.send('check-for-update') ipcRenderer.send('check-for-update')