merge new changes (#1466)
* localisation for mediaitem context menu * fixes removing songs issue #1442 * aids formatting no more * ok * stop [ci skip] * ci test * stop it * Prettified Code! * prettier update * chore: Prettified Code [ci skip] * shit * chore: Prettified Code [ci skip] * Update stale-issues.yml [ci skip] * Fix LastFM Filter Types * localisation for misc notifications * auto language on oobe * auto language on oobe * attempt at fixing #982 * and this just annoys me [ci skip] * crowdin action * oops * Remove from playlist icon * duplicate item prompt on adding songs to playlist * moved function outside to stop redefine [ci skip] * add playing class to album artwork * Play button for mediaitem-smarthints (#1445) * eslint moment * Update cider-chores.yml * some fixes * crowdin config * no * aa * please * please x2 * just to upload * Update Crowdin configuration file * fuck eslint * Source Update Workflow * Update crowdin translation image. * Implemented mediaSession API functions * Cleaned up playback function, commented mediaKeyFixes * Simplified wsapi renderer calls * Fix duration * Added check * Moved function call * More checks * autoplay persists on app launches * Fix [ci skip] * This is weird [ci skip] * version fix * Fix * aftermath of coding at 2am 200 days ago * Update config.yml [ci skip] * Small fix * Musickit error handling * chore: Updated i18n Source [ci skip] * Updated en_US.json to match cider 2 * chore: Updated i18n Source [ci skip] * plugins adjustment * chore: Prettified Code [ci skip] * Update config.yml * Stop music before close Co-authored-by: Core <core@coredev.uk> Co-authored-by: coredev-uk <coredev-uk@users.noreply.github.com> Co-authored-by: yazninja <yazlesean@gmail.com> Co-authored-by: Monochromish <79590499+Monochromish@users.noreply.github.com> Co-authored-by: vapormusic <vietanhfat@gmail.com> Co-authored-by: Maikiwi <stella@mai.kiwi> Co-authored-by: booploops <49113086+booploops@users.noreply.github.com> Co-authored-by: booploops <booploops@users.noreply.github.com>
This commit is contained in:
parent
d7c4726ec7
commit
b498ff146a
11 changed files with 193 additions and 179 deletions
|
@ -136,11 +136,11 @@ jobs:
|
|||
if [[ "${APP_VERSION}" = *"beta"* ]]; then
|
||||
echo $'**Beta Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese builds are considered bleeding edge, expect bugs and please do not use this as a representation of the fu ll app.\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-nightly-beta-releases).' > release-notes.md
|
||||
gh release create "v${APP_VERSION}" --prerelease --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap
|
||||
curl http://129.146.42.180/api/v1/github/sync/main
|
||||
curl -s http://129.146.42.180/api/v1/github/sync/main
|
||||
else
|
||||
echo $'**Stable Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese are the most stable builds we can provide. If you experience any issues, please report them [here](https://github.com/ciderapp/cider/issues/new).\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-releases).' > release-notes.md
|
||||
gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap
|
||||
curl http://129.146.42.180/api/v1/github/sync/stable
|
||||
curl -s http://129.146.42.180/api/v1/github/sync/stable
|
||||
fi;
|
||||
|
||||
# Orchestrate our job run sequence
|
||||
|
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -10,7 +10,7 @@ contact_links:
|
|||
url: https://discord.com/invite/AppleMusic
|
||||
about: For quick support, make a ticket or ask for community support here.
|
||||
- name: Cider Documentation
|
||||
url: https://docs.cider.sh/support/troubleshooting
|
||||
url: https://docs.cider.sh/support/faqs
|
||||
about: In most cases, these troubleshooting tips can resolve basic issues. Try them out before opening an issue.
|
||||
- name: GitHub Issues
|
||||
url: https://github.com/ciderapp/Cider/issues
|
||||
|
|
5
.github/workflows/cider-chores.yml
vendored
5
.github/workflows/cider-chores.yml
vendored
|
@ -69,7 +69,7 @@ jobs:
|
|||
commit_message: "chore: Prettified Code\n [ci skip]"
|
||||
commit_user_name: "cider-chore[bot]"
|
||||
commit_user_email: "cider-chore[bot]@users.noreply.github.com"
|
||||
|
||||
|
||||
update-i18n-source:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
|
@ -93,7 +93,8 @@ jobs:
|
|||
commit_message: "chore: Updated i18n Source\n [ci skip]"
|
||||
commit_user_name: "cider-chore[bot]"
|
||||
commit_user_email: "cider-chore[bot]@users.noreply.github.com"
|
||||
|
||||
|
||||
|
||||
synchronize-with-crowdin:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ false }} # disable for now
|
||||
|
|
|
@ -219,6 +219,7 @@
|
|||
"action.favorite": "Favorite",
|
||||
"action.removeFavorite": "Remove Favorite",
|
||||
"action.refresh": "Refresh",
|
||||
"action.save": "Save",
|
||||
"home.title": "Home",
|
||||
"home.recentlyPlayed": "Recently Played",
|
||||
"home.recentlyAdded": "Recently Added",
|
||||
|
@ -231,6 +232,7 @@
|
|||
"error.connectionError": "There was a problem connecting to Apple Music.",
|
||||
"error.noResults": "No Results.",
|
||||
"error.noResults.description": "Try a new search.",
|
||||
"error.musickitError": "MusicKit Encountered an Error: ",
|
||||
"podcast.followOnCider": "Follow On Cider",
|
||||
"podcast.followedOnCider": "Following On Cider",
|
||||
"podcast.subscribeOnItunes": "Subscribe On iTunes",
|
||||
|
@ -249,6 +251,7 @@
|
|||
"action.done": "Done",
|
||||
"action.submit": "Submit",
|
||||
"action.editTracklist": "Edit Tracklist",
|
||||
"action.editDescription": "Edit Description",
|
||||
"action.addToLibrary": "Add to Library",
|
||||
"action.addToLibrary.success": "Added to Library",
|
||||
"action.addToLibrary.error": "Error Adding to Library",
|
||||
|
@ -263,6 +266,7 @@
|
|||
"action.createPlaylist": "Create a New Playlist",
|
||||
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||
"action.addToPlaylist": "Add to Playlist",
|
||||
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||
"action.removeFromPlaylist": "Remove from Playlist",
|
||||
"action.addToFavorites": "Add to Favorites",
|
||||
"action.follow": "Follow",
|
||||
|
@ -539,6 +543,7 @@
|
|||
"settings.option.connectivity.discordRPC.buttons.viewOnAppleMusic": "View on Apple Music",
|
||||
"settings.option.connectivity.discordRPC.buttons.viewOnOtherMusicServices": "View on Other Music Services",
|
||||
"settings.option.connectivity.discordRPC.showSongLink": "Show Song.link button instead of Apple Music button on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideButtons": "Hide buttons on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
||||
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
||||
|
|
|
@ -219,6 +219,7 @@
|
|||
"action.favorite": "Favorite",
|
||||
"action.removeFavorite": "Remove Favorite",
|
||||
"action.refresh": "Refresh",
|
||||
"action.save": "Save",
|
||||
"home.title": "Home",
|
||||
"home.recentlyPlayed": "Recently Played",
|
||||
"home.recentlyAdded": "Recently Added",
|
||||
|
@ -231,6 +232,7 @@
|
|||
"error.connectionError": "There was a problem connecting to Apple Music.",
|
||||
"error.noResults": "No Results.",
|
||||
"error.noResults.description": "Try a new search.",
|
||||
"error.musickitError": "MusicKit Encountered an Error: ",
|
||||
"podcast.followOnCider": "Follow On Cider",
|
||||
"podcast.followedOnCider": "Following On Cider",
|
||||
"podcast.subscribeOnItunes": "Subscribe On iTunes",
|
||||
|
@ -249,6 +251,7 @@
|
|||
"action.done": "Done",
|
||||
"action.submit": "Submit",
|
||||
"action.editTracklist": "Edit Tracklist",
|
||||
"action.editDescription": "Edit Description",
|
||||
"action.addToLibrary": "Add to Library",
|
||||
"action.addToLibrary.success": "Added to Library",
|
||||
"action.addToLibrary.error": "Error Adding to Library",
|
||||
|
@ -263,6 +266,7 @@
|
|||
"action.createPlaylist": "Create a New Playlist",
|
||||
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||
"action.addToPlaylist": "Add to Playlist",
|
||||
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||
"action.removeFromPlaylist": "Remove from Playlist",
|
||||
"action.addToFavorites": "Add to Favorites",
|
||||
"action.follow": "Follow",
|
||||
|
@ -539,6 +543,7 @@
|
|||
"settings.option.connectivity.discordRPC.buttons.viewOnAppleMusic": "View on Apple Music",
|
||||
"settings.option.connectivity.discordRPC.buttons.viewOnOtherMusicServices": "View on Other Music Services",
|
||||
"settings.option.connectivity.discordRPC.showSongLink": "Show Song.link button instead of Apple Music button on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideButtons": "Hide buttons on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
||||
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
||||
|
|
|
@ -1445,16 +1445,18 @@ export class BrowserWindow {
|
|||
}
|
||||
});
|
||||
|
||||
win.on("close", (e: any) => {
|
||||
win.on("close", async (e: any) => {
|
||||
if ((process.platform === "darwin" || utils.getStoreValue("general.close_button_hide")) && !isQuitting) {
|
||||
e.preventDefault();
|
||||
win.hide();
|
||||
} else {
|
||||
win.webContents.executeJavaScript(`
|
||||
await win.webContents.executeJavaScript(`
|
||||
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
|
||||
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
|
||||
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue._unplayedQueueItems));
|
||||
ipcRenderer.send('stopGCast','');`);
|
||||
ipcRenderer.send('stopGCast','');
|
||||
MusicKit.getInstance().stop();
|
||||
`);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ const MusicKitInterop = {
|
|||
const attributes = nowPlayingItem != null ? nowPlayingItem.attributes : {};
|
||||
|
||||
attributes.songId = attributes.songId ?? attributes.playParams?.catalogId ?? attributes.playParams?.id;
|
||||
attributes.kind = nowPlayingItem?.type ?? attributes.type ?? attributes.playParams.kind ?? "";
|
||||
attributes.kind = nowPlayingItem?.type ?? attributes?.type ?? attributes.playParams?.kind ?? "";
|
||||
attributes.status = nowPlayingItem == null ? null : !!isPlayingExport;
|
||||
attributes.name = attributes?.name ?? "no-title-found";
|
||||
attributes.artwork = attributes?.artwork ?? { url: "" };
|
||||
|
@ -229,42 +229,38 @@ const MusicKitInterop = {
|
|||
|
||||
initMediaSession: () => {
|
||||
if ("mediaSession" in navigator) {
|
||||
const defaultSkipTime = 10;
|
||||
|
||||
console.debug("[cider:preload] [initMediaSession] Media Session API supported");
|
||||
navigator.mediaSession.setActionHandler("play", () => {
|
||||
MusicKitInterop.play();
|
||||
console.log("[cider:preload] [initMediaSession] Play");
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("pause", () => {
|
||||
MusicKitInterop.pause();
|
||||
console.log("[cider:preload] [initMediaSession] Pause");
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("stop", () => {
|
||||
MusicKit.getInstance().stop();
|
||||
console.log("[cider:preload] [initMediaSession] Stop");
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("seekbackward", (details) => {
|
||||
const skipTime = details.seekOffset || defaultSkipTime;
|
||||
MusicKit.getInstance().seekToTime(Math.max(MusicKit.getInstance().currentPlaybackTime - skipTime, 0));
|
||||
console.log(`[cider:preload] [initMediaSession] Seek Backward ${skipTime}`);
|
||||
if (details.seekOffset) {
|
||||
MusicKit.getInstance().seekToTime(Math.max(MusicKit.getInstance().currentPlaybackTime - details.seekOffset, 0));
|
||||
} else {
|
||||
MusicKit.getInstance().seekBackward();
|
||||
}
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("seekforward", (details) => {
|
||||
const skipTime = details.seekOffset || defaultSkipTime;
|
||||
MusicKit.getInstance().seekToTime(Math.max(MusicKit.getInstance().currentPlaybackTime + skipTime, 0));
|
||||
console.log(`[cider:preload] [initMediaSession] Seek Forward ${skipTime}`);
|
||||
if (details.seekOffset) {
|
||||
MusicKit.getInstance().seekToTime(Math.max(MusicKit.getInstance().currentPlaybackTime + details.seekOffset, 0));
|
||||
} else {
|
||||
MusicKit.getInstance().seekForward();
|
||||
}
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("seekto", ({ seekTime, fastSeek }) => {
|
||||
MusicKit.getInstance().seekToTime(seekTime);
|
||||
console.log(`[cider:preload] [initMediaSession] Seek To ${seekTime}`);
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("previoustrack", () => {
|
||||
MusicKitInterop.previous();
|
||||
console.log("[cider:preload] [initMediaSession] Previous Track");
|
||||
});
|
||||
navigator.mediaSession.setActionHandler("nexttrack", () => {
|
||||
MusicKitInterop.next();
|
||||
console.log("[cider:preload] [initMediaSession] Next Track");
|
||||
});
|
||||
} else {
|
||||
console.debug("[cider:preload] [initMediaSession] Media Session API not supported");
|
||||
|
|
|
@ -972,8 +972,6 @@ const CiderAudio = {
|
|||
MusicKit.getInstance().pause(); // Pause first
|
||||
}
|
||||
|
||||
CiderAudioRenderer.off(); // Clean up IMMEDIATELY
|
||||
|
||||
CiderAudio.audioNodes.optimizedNode = CiderAudio.context.createConvolver();
|
||||
CiderAudio.audioNodes.optimizedNode.normalize = false;
|
||||
|
||||
|
@ -981,6 +979,8 @@ const CiderAudio = {
|
|||
CiderAudio.audioNodes.optimizedNode.buffer = res;
|
||||
});
|
||||
|
||||
CiderAudioRenderer.off(); // Clean up IMMEDIATELY
|
||||
|
||||
// Load the sucker up
|
||||
|
||||
CiderAudio.hierarchical_unloading();
|
||||
|
|
|
@ -4,10 +4,15 @@ const CiderFrontAPI = {
|
|||
this.id = "";
|
||||
this.name = "";
|
||||
this.onClick = () => {};
|
||||
this.top = false;
|
||||
},
|
||||
},
|
||||
AddMenuEntry(entry) {
|
||||
app.pluginMenuEntries.push(entry);
|
||||
if (entry?.top) {
|
||||
app.pluginMenuTopEntries.push(entry);
|
||||
} else {
|
||||
app.pluginMenuEntries.push(entry);
|
||||
}
|
||||
app.pluginInstalled = true;
|
||||
},
|
||||
StyleSheets: {
|
||||
|
|
|
@ -18,6 +18,7 @@ const app = new Vue({
|
|||
mk: {},
|
||||
pluginInstalled: false,
|
||||
pluginMenuEntries: [],
|
||||
pluginMenuTopEntries: [],
|
||||
lz: ipcRenderer.sendSync("get-i18n", "en_US"),
|
||||
lzListing: ipcRenderer.sendSync("get-i18n-listing"),
|
||||
radiohls: null,
|
||||
|
@ -305,6 +306,20 @@ const app = new Vue({
|
|||
app.cfg.musickit["stored-attributes"][attr] = val;
|
||||
});
|
||||
}
|
||||
const ERROR_CODES = ["drmUnsupported", "mediaPlaybackError"];
|
||||
/* MusicKit.Events */
|
||||
ERROR_CODES.forEach((code) => {
|
||||
MusicKit.getInstance().addEventListener(MusicKit.Events[code], (e) => {
|
||||
console.error(`[MusicKit] MusicKit Error ${code}`);
|
||||
console.error({ e: e });
|
||||
app.notyf.open({
|
||||
duration: 20000,
|
||||
type: "error",
|
||||
className: "notyf-info",
|
||||
message: `<small>${app.getLz("error.musickitError")} \n</small><code>${code.toUpperCase()}</code>`,
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
async oobeInit() {
|
||||
this.appMode = "oobe";
|
||||
|
|
|
@ -1,166 +1,151 @@
|
|||
<div class="app-navigation" v-cloak>
|
||||
<transition name="wpfade">
|
||||
<div class="usermenu-container" v-if="chrome.menuOpened">
|
||||
<div class="usermenu-body">
|
||||
<button
|
||||
class="app-sidebar-button"
|
||||
style="width: 100%"
|
||||
@click="appRoute('apple-account-settings')"
|
||||
>
|
||||
<img
|
||||
class="sidebar-user-icon"
|
||||
loading="lazy"
|
||||
:src="getMediaItemArtwork(chrome.hideUserInfo ? './assets/logocut.png' : (chrome.userinfo.attributes['artwork'] ? chrome.userinfo.attributes['artwork']['url'] : ''), 26)"
|
||||
/>
|
||||
<transition name="wpfade">
|
||||
<div class="usermenu-container" v-if="chrome.menuOpened">
|
||||
<div class="usermenu-body">
|
||||
<button class="app-sidebar-button" style="width: 100%" @click="appRoute('apple-account-settings')">
|
||||
<img class="sidebar-user-icon" loading="lazy"
|
||||
:src="getMediaItemArtwork(chrome.hideUserInfo ? './assets/logocut.png' : (chrome.userinfo.attributes['artwork'] ? chrome.userinfo.attributes['artwork']['url'] : ''), 26)" />
|
||||
|
||||
<div class="sidebar-user-text" v-if="!chrome.hideUserInfo">
|
||||
<template v-if="chrome.userinfo.id || mk.isAuthorized">
|
||||
<div class="fullname text-overflow-elipsis">
|
||||
{{
|
||||
chrome.userinfo != null &&
|
||||
chrome.userinfo.attributes != null
|
||||
? chrome.userinfo.attributes.name ?? ""
|
||||
: ""
|
||||
}}
|
||||
</div>
|
||||
<div class="handle-text text-overflow-elipsis">
|
||||
{{
|
||||
chrome.userinfo != null &&
|
||||
chrome.userinfo.attributes != null
|
||||
? chrome.userinfo.attributes.handle ?? ""
|
||||
: ""
|
||||
}}
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div @click="mk.authorize()">
|
||||
{{ $root.getLz("term.login") }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="sidebar-user-text" v-else>
|
||||
{{ $root.getLz("app.name") }}
|
||||
</div>
|
||||
</button>
|
||||
<!-- Use 20px SVG for usermenu icon -->
|
||||
<button
|
||||
class="usermenu-item"
|
||||
v-if="cfg.general.privateEnabled"
|
||||
@click="cfg.general.privateEnabled = false"
|
||||
>
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/x.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.disablePrivateSession")
|
||||
<div class="sidebar-user-text" v-if="!chrome.hideUserInfo">
|
||||
<template v-if="chrome.userinfo.id || mk.isAuthorized">
|
||||
<div class="fullname text-overflow-elipsis">
|
||||
{{
|
||||
chrome.userinfo != null &&
|
||||
chrome.userinfo.attributes != null
|
||||
? chrome.userinfo.attributes.name ?? ""
|
||||
: ""
|
||||
}}
|
||||
</div>
|
||||
<div class="handle-text text-overflow-elipsis">
|
||||
{{
|
||||
chrome.userinfo != null &&
|
||||
chrome.userinfo.attributes != null
|
||||
? chrome.userinfo.attributes.handle ?? ""
|
||||
: ""
|
||||
}}
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div @click="mk.authorize()">
|
||||
{{ $root.getLz("term.login") }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="sidebar-user-text" v-else>
|
||||
{{ $root.getLz("app.name") }}
|
||||
</div>
|
||||
</button>
|
||||
<!-- Use 20px SVG for usermenu icon -->
|
||||
<button class="usermenu-item" v-if="cfg.general.privateEnabled" @click="cfg.general.privateEnabled = false">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/x.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.disablePrivateSession")
|
||||
}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="appRoute('remote-pair')">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/smartphone.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("action.showWebRemoteQR")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="appRoute('remote-pair')">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/smartphone.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("action.showWebRemoteQR")
|
||||
}}</span>
|
||||
</button>
|
||||
<button
|
||||
class="usermenu-item"
|
||||
@click="modals.castMenu = true"
|
||||
>
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/cast.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.cast")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="modals.castMenu = true">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/cast.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.cast")
|
||||
}}</span>
|
||||
</button>
|
||||
<button
|
||||
class="usermenu-item"
|
||||
@click="modals.audioSettings = true"
|
||||
>
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/headphones.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.audioSettings")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="modals.audioSettings = true">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/headphones.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.audioSettings")
|
||||
}}</span>
|
||||
</button>
|
||||
<button
|
||||
class="usermenu-item"
|
||||
v-if="pluginInstalled"
|
||||
@click="modals.pluginMenu = true"
|
||||
>
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/grid.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.plugin")
|
||||
</button>
|
||||
<button class="usermenu-item" v-if="pluginInstalled" @click="modals.pluginMenu = true">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/grid.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.plugin")
|
||||
}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="appRoute('about')">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/info.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.about")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="appRoute('about')">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/info.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.about")
|
||||
}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="modals.settings = true">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/settings.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.settings")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="modals.settings = true">
|
||||
<span class="usermenu-item-icon">
|
||||
<%- include("../svg/settings.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.settings")
|
||||
}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="unauthorize()">
|
||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||
<%- include("../svg/log-out.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.logout")
|
||||
</button>
|
||||
<button class="usermenu-item" v-for="entry in $root.pluginMenuTopEntries" @click="entry.onClick()">
|
||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||
<%- include("../svg/grid.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{entry.name}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="unauthorize()">
|
||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||
<%- include("../svg/log-out.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.logout")
|
||||
}}</span>
|
||||
</button>
|
||||
<button class="usermenu-item" @click="quit()">
|
||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||
<%- include("../svg/x.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.quit")
|
||||
</button>
|
||||
<button class="usermenu-item" @click="quit()">
|
||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||
<%- include("../svg/x.svg") %>
|
||||
</span>
|
||||
<span class="usermenu-item-name">{{
|
||||
$root.getLz("term.quit")
|
||||
}}</span>
|
||||
</button>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="sidebartransition">
|
||||
<cider-app-sidebar v-if="!chrome.sidebarCollapsed"></cider-app-sidebar>
|
||||
</transition>
|
||||
<app-content-area></app-content-area>
|
||||
<transition name="drawertransition">
|
||||
<div class="app-drawer"
|
||||
v-if="drawer.open && drawer.panel == 'lyrics' && lyrics && lyrics != [] && lyrics.length > 0">
|
||||
<div class="bgArtworkMaterial">
|
||||
<div class="bg-artwork-container">
|
||||
<img v-if="(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork a"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
<img v-if="(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork b"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
<img v-if="!(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork no-animation"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="sidebartransition">
|
||||
<cider-app-sidebar v-if="!chrome.sidebarCollapsed"></cider-app-sidebar>
|
||||
</transition>
|
||||
<app-content-area></app-content-area>
|
||||
<transition name="drawertransition">
|
||||
<div class="app-drawer"
|
||||
v-if="drawer.open && drawer.panel == 'lyrics' && lyrics && lyrics != [] && lyrics.length > 0">
|
||||
<div class="bgArtworkMaterial">
|
||||
<div class="bg-artwork-container">
|
||||
<img v-if="(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork a"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
<img v-if="(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork b"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
<img v-if="!(cfg.visual.bg_artwork_rotation && animateBackground)" class="bg-artwork no-animation"
|
||||
:src="$store.state.artwork.playerLCD">
|
||||
</div>
|
||||
</div>
|
||||
<lyrics-view v-if="drawer.panel == 'lyrics'" :time="mk.currentPlaybackTime - lyricOffset" :lyrics="lyrics"
|
||||
:richlyrics="richlyrics"></lyrics-view>
|
||||
<div v-if="drawer.panel == 'lyrics'" class="lyric-footer">
|
||||
<button class="md-btn" @click="modularUITest(!fullscreenLyrics)">{{fullscreenLyrics ?
|
||||
$root.getLz('term.defaultView'): $root.getLz('term.fullscreenView')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="drawertransition">
|
||||
<div class="app-drawer" v-if="drawer.open && drawer.panel == 'queue'">
|
||||
<cider-queue ref="queue" v-if="drawer.panel == 'queue'"></cider-queue>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
<lyrics-view v-if="drawer.panel == 'lyrics'" :time="mk.currentPlaybackTime - lyricOffset" :lyrics="lyrics"
|
||||
:richlyrics="richlyrics"></lyrics-view>
|
||||
<div v-if="drawer.panel == 'lyrics'" class="lyric-footer">
|
||||
<button class="md-btn" @click="modularUITest(!fullscreenLyrics)">{{fullscreenLyrics ?
|
||||
$root.getLz('term.defaultView'): $root.getLz('term.fullscreenView')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="drawertransition">
|
||||
<div class="app-drawer" v-if="drawer.open && drawer.panel == 'queue'">
|
||||
<cider-queue ref="queue" v-if="drawer.panel == 'queue'"></cider-queue>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue