Merge branch 'main' into enhancement/search-bar

This commit is contained in:
Pedro Galhardo 2022-06-26 00:29:03 +01:00
commit 2911667a99
17 changed files with 205 additions and 70 deletions

1
.gitignore vendored
View file

@ -328,3 +328,4 @@ savedconfig/cider-config.json
savedconfig/config.json savedconfig/config.json
savedconfig/session.json savedconfig/session.json
savedconfig/window-state.json savedconfig/window-state.json
src/main/base/sample.json

View file

@ -386,5 +386,13 @@
"term.track": { "term.track": {
"one": "Titel", "one": "Titel",
"other": "Titel" "other": "Titel"
} },
"settings.option.visual.customAccentColor": "Benutzerdefinierte Akzentfarbe",
"settings.option.visual.accentColor": "Akzentfarbe",
"settings.option.visual.purplePodcastPlaybackBar": "Lila Wiedergabeleiste für Podcasts",
"settings.option.visual.windowColor": "Fenstertönung Farbe",
"action.cut": "Ausschneiden",
"action.paste": "Einfügen",
"action.selectAll": "Alles auswählen",
"action.delete": "Löschen"
} }

View file

@ -156,14 +156,14 @@ export class Store {
"dBSPL": false, "dBSPL": false,
"dBSPLcalibration": 90, "dBSPLcalibration": 90,
"maikiwiAudio": { "maikiwiAudio": {
"ciderPPE": false, "ciderPPE": true,
"ciderPPE_value": "MAIKIWI", "ciderPPE_value": "MAIKIWI",
"atmosphereRealizer1": false, "atmosphereRealizer1": false,
"atmosphereRealizer1_value": "NATURAL_STANDARD", "atmosphereRealizer1_value": "NATURAL_STANDARD",
"atmosphereRealizer2": false, "atmosphereRealizer2": false,
"atmosphereRealizer2_value": "NATURAL_STANDARD", "atmosphereRealizer2_value": "NATURAL_STANDARD",
"spatial": false, "spatial": false,
"spatialProfile": "71_420maikiwi", "spatialProfile": "BPLK",
"vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts "vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts
'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109], 'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109],
'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40], 'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40],
@ -243,7 +243,8 @@ export class Store {
"AudioContext": true, "AudioContext": true,
"experiments": [], "experiments": [],
"playlistTrackMapping": true, "playlistTrackMapping": true,
"ffmpegLocation": "" "ffmpegLocation": "",
"disableLogging": false
}, },
"connectUser": { "connectUser": {
"auth": null, "auth": null,

View file

@ -670,6 +670,29 @@
width : 100%; width : 100%;
height : 100%; height : 100%;
.playlist-hero {
width : 100%;
transform : translateX(+25%);
position : absolute;
z-index : -1;
top : 0;
left : 0;
right : 0;
bottom : 0;
.mediaitem-artwork {
-webkit-mask-image: -webkit-radial-gradient(center, circle cover, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0) 75%);
border-radius : 0px;
}
.hero-tint {
position: absolute;
top : 0;
opacity: 0.6;
width: 100%;
height: 100%;
}
}
>.row { >.row {
width: calc(100% - 32px); width: calc(100% - 32px);
} }
@ -689,6 +712,10 @@
flex-shrink : unset; flex-shrink : unset;
} }
.search-input::placeholder {
color: var(--heroplaceholdercolor)
}
.nameEdit { .nameEdit {
font-weight: 700; font-weight: 700;
font-size : 1.6rem; font-size : 1.6rem;

View file

@ -17,6 +17,17 @@ window.CiderCache = CiderCache
window.CiderFrontAPI = CiderFrontAPI window.CiderFrontAPI = CiderFrontAPI
window.wsapi = wsapi window.wsapi = wsapi
if (app.cfg.advanced.disableLogging === true) {
window.console = {
log: function() {},
error: function() {},
warn: function() {},
assert: function() {},
debug: function() {}
}
}
// Mount Vue to #app // Mount Vue to #app
app.$mount("#app") app.$mount("#app")

View file

@ -24,7 +24,7 @@ const Events = {
// CTRL + R // CTRL + R
if (event.keyCode === 82 && event.ctrlKey) { if (event.keyCode === 82 && event.ctrlKey) {
event.preventDefault() event.preventDefault()
bootbox.confirm(app.getLz('term.reload'), (res)=>{ app.confirm(app.getLz('term.reload'), (res)=>{
if (res) { if (res) {
window.location.reload() window.location.reload()
} }
@ -69,8 +69,8 @@ const Events = {
// Prevent Scrolling on spacebar // Prevent Scrolling on spacebar
if (event.keyCode === 32 && event.target === document.body) { if (event.keyCode === 32 && event.target === document.body) {
event.preventDefault() event.preventDefault()
app.SpacePause() app.SpacePause()
} }
}); });

View file

@ -952,22 +952,22 @@ const app = new Vue({
} }
} catch (e) { } catch (e) {
localStorage.setItem("playingBitrate", "256") localStorage.setItem("playingBitrate", "256")
} }
if (!app.cfg.audio.normalization) {CiderAudio.hierarchical_loading();} if (!app.cfg.audio.normalization) {CiderAudio.hierarchical_loading();}
} }
if (app.cfg.audio.normalization) { if (app.cfg.audio.normalization) {
// get unencrypted audio previews to get SoundCheck's normalization tag // get unencrypted audio previews to get SoundCheck's normalization tag
try { try {
let previewURL = null let previewURL = null
try { try {
previewURL = app.mk.nowPlayingItem.previewURL previewURL = app.mk.nowPlayingItem.previewURL
} catch (e) { } catch (e) {
} }
if (previewURL == null && ((app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)) != -1)) { 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.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) => {
previewURL = response.data.data[0].attributes.previews[0].url previewURL = response.data.data[0].attributes.previews[0].url
if (previewURL) if (previewURL)
console.debug("[Cider][MaikiwiSoundCheck] previewURL response.data.data[0].attributes.previews[0].url: " + previewURL) console.debug("[Cider][MaikiwiSoundCheck] previewURL response.data.data[0].attributes.previews[0].url: " + previewURL)
ipcRenderer.send('getPreviewURL', previewURL) ipcRenderer.send('getPreviewURL', previewURL)
@ -1173,7 +1173,7 @@ const app = new Vue({
} }
}, },
unauthorize() { unauthorize() {
bootbox.confirm(app.getLz('term.confirmLogout'), function (result) { this.confirm(app.getLz('term.confirmLogout'), function (result) {
if (result) { if (result) {
app.mk.unauthorize() app.mk.unauthorize()
document.location.reload() document.location.reload()
@ -1554,22 +1554,24 @@ const app = new Vue({
}, },
deletePlaylist(id) { deletePlaylist(id) {
let self = this let self = this
if (confirm(app.getLz('term.deletePlaylist'))) { this.confirm(app.getLz('term.deletePlaylist'), (ok) => {
app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, {}, { if (ok) {
fetchOptions: { app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, {}, {
method: "DELETE" fetchOptions: {
} method: "DELETE"
}).then(res => { }
// remove this playlist from playlists.listing if it exists }).then(res => {
let found = self.playlists.listing.find(item => item.id == id) // remove this playlist from playlists.listing if it exists
if (found) { let found = self.playlists.listing.find(item => item.id == id)
self.playlists.listing.splice(self.playlists.listing.indexOf(found), 1) if (found) {
} self.playlists.listing.splice(self.playlists.listing.indexOf(found), 1)
setTimeout(() => { }
app.refreshPlaylists(false, false); setTimeout(() => {
}, 8000); app.refreshPlaylists(false, false);
}) }, 8000);
} })
}
});
}, },
/** /**
* @param {string} url, href for the initial request * @param {string} url, href for the initial request
@ -4624,6 +4626,29 @@ const app = new Vue({
app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false) app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false)
} }
} }
},
confirm(message, callback) {
bootbox.confirm(this.getBootboxParams(null, message, callback));
},
prompt(title, callback) {
bootbox.prompt(this.getBootboxParams(title, null, callback));
},
getBootboxParams(title, message, callback) {
return {
title: title,
message: message,
buttons: {
confirm: {
label: app.getLz('dialog.ok'),
},
cancel: {
label: app.getLz('dialog.cancel'),
},
},
callback: function (result) {
if (callback) callback(result);
},
}
} }
} }
}) })

View file

@ -2073,7 +2073,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
align-items: center; align-items: center;
.fs-row { .fs-row {
flex-grow: 1; flex-grow: 0.5;
} }
.playback-button--small.active { .playback-button--small.active {

View file

@ -280,7 +280,7 @@
}, },
deletePreset() { deletePreset() {
let presets = this.$root.cfg.audio.equalizer.presets let presets = this.$root.cfg.audio.equalizer.presets
bootbox.confirm(app.getLz('term.deletepreset.warn'), (result) => { app.confirm(app.getLz('term.deletepreset.warn'), (result) => {
if (result) { if (result) {
this.changePreset("default") this.changePreset("default")
// find the preset by id (preset) and remove it // find the preset by id (preset) and remove it
@ -351,7 +351,7 @@
}, },
addPreset() { addPreset() {
let self = this let self = this
bootbox.prompt(app.getLz('term.newpreset.name'), (res) => { app.prompt(app.getLz('term.newpreset.name'), (res) => {
if (res) { if (res) {
let eqSettings = Clone(app.cfg.audio.equalizer) let eqSettings = Clone(app.cfg.audio.equalizer)
let newPreset = new self.eqPreset() let newPreset = new self.eqPreset()
@ -386,7 +386,7 @@
}, },
importPreset() { importPreset() {
let self = this let self = this
bootbox.prompt("Enter preset share code", (res) => { app.prompt("Enter preset share code", (res) => {
if (res) { if (res) {
let preset = JSON.parse(atob(res)) let preset = JSON.parse(atob(res))
if (preset.frequencies && preset.gain && preset.Q && preset.mix && preset.vibrantBass) { if (preset.frequencies && preset.gain && preset.Q && preset.mix && preset.vibrantBass) {

View file

@ -542,14 +542,14 @@
let followAction = "follow" let followAction = "follow"
let followActions = { let followActions = {
follow: { follow: {
icon: "./assets/feather/plus-circle.svg", icon: "./assets/star.svg",
name: app.getLz('action.favorite'), name: app.getLz('action.favorite'),
action: () => { action: () => {
self.$root.setArtistFavorite(this.item.id, true) self.$root.setArtistFavorite(this.item.id, true)
} }
}, },
unfollow: { unfollow: {
icon: "./assets/feather/x-circle.svg", icon: "./assets/star.svg",
name: app.getLz('action.removeFavorite'), name: app.getLz('action.removeFavorite'),
action: () => { action: () => {
self.$root.setArtistFavorite(this.item.id, false) self.$root.setArtistFavorite(this.item.id, false)

View file

@ -25,7 +25,8 @@
</div> </div>
<div class="col flex-center artist-title" <div class="col flex-center artist-title"
:class="{'artist-animation-on': (data.attributes.editorialVideo && (data.attributes.editorialVideo.motionArtistWide16x9 || data.attributes.editorialVideo.motionArtistFullscreen16x9)) || hasHero() }" :class="{'artist-animation-on': (data.attributes.editorialVideo && (data.attributes.editorialVideo.motionArtistWide16x9 || data.attributes.editorialVideo.motionArtistFullscreen16x9)) || hasHero() }"
> :style="{ 'color': '#' +hasHeroObject()?.textColor1 ?? ''}"
>
<button class="artist-play" @click="app.mk.setStationQueue({artist:'a-'+data.id}).then(()=>{ <button class="artist-play" @click="app.mk.setStationQueue({artist:'a-'+data.id}).then(()=>{
app.mk.play() app.mk.play()
})" :aria-label="app.getLz('term.play')"><%- include("../svg/play.svg") %></button> })" :aria-label="app.getLz('term.play')"><%- include("../svg/play.svg") %></button>
@ -178,11 +179,21 @@
return this.data.attributes?.editorialArtwork?.centeredFullscreenBackground.url return this.data.attributes?.editorialArtwork?.centeredFullscreenBackground.url
} else if(this.data.attributes?.editorialArtwork?.bannerUber) { } else if(this.data.attributes?.editorialArtwork?.bannerUber) {
return this.data.attributes?.editorialArtwork?.bannerUber.url return this.data.attributes?.editorialArtwork?.bannerUber.url
}else if(this.data.attributes?.editorialArtwork?.subscriptionHero){ } else if(this.data.attributes?.editorialArtwork?.subscriptionHero){
return this.data.attributes?.editorialArtwork?.subscriptionHero.url return this.data.attributes?.editorialArtwork?.subscriptionHero.url
} }
return false; return false;
}, },
hasHeroObject() {
if(this.data.attributes?.editorialArtwork?.centeredFullscreenBackground){
return this.data.attributes?.editorialArtwork?.centeredFullscreenBackground
} else if(this.data.attributes?.editorialArtwork?.bannerUber) {
return this.data.attributes?.editorialArtwork?.bannerUber
} else if(this.data.attributes?.editorialArtwork?.subscriptionHero){
return this.data.attributes?.editorialArtwork?.subscriptionHero
}
return [];
},
isHeaderVisible(visible) { isHeaderVisible(visible) {
this.headerVisible = visible this.headerVisible = visible
}, },

View file

@ -8,9 +8,13 @@
</div> </div>
</template> </template>
<template v-if="app.playlists.loadingState == 1"> <template v-if="app.playlists.loadingState == 1">
<div class="playlist-display" <div class="playlist-display" :style="{ 'background-color': '#' +hasHeroObject()?.bgColor ?? '' }"
@mouseover.self="minClass(false)"> @mouseover.self="minClass(false)">
<div class="playlistInfo"> <div class="playlistInfo">
<div class="playlist-hero" v-if="hasHero()">
<mediaitem-artwork shadow="none" :url="hasHero()" size="2160" />
<div class="hero-tint" :style="{'background-color': '#' + hasHeroObject()?.bgColor ?? ''}"></div>
</div>
<div class="row"> <div class="row">
<div class="col-auto flex-center" @mouseover="minClass(false)"> <div class="col-auto flex-center" @mouseover="minClass(false)">
<div class="mediaContainer"> <div class="mediaContainer">
@ -26,7 +30,7 @@
<div class="col playlist-info"> <div class="col playlist-info">
<template v-if="!editorialNotesExpanded"> <template v-if="!editorialNotesExpanded">
<div> <div>
<div class="playlist-name" @mouseover="minClass(false)" @click="editPlaylistName()" v-show="!nameEditing"> <div class="playlist-name" @mouseover="minClass(false)" @click="editPlaylistName()" v-show="!nameEditing" :style="{ 'color': '#' +hasHeroObject()?.textColor1 ?? '', 'filter' : 'drop-shadow(1px 3px 8px #' + hasHeroObject()?.textColor4 ?? '' +')' }">
{{data.attributes ? (data.attributes.name ?? {{data.attributes ? (data.attributes.name ??
(data.attributes.title ?? '') ?? '') : ''}} (data.attributes.title ?? '') ?? '') : ''}}
</div> </div>
@ -38,24 +42,26 @@
@change="editPlaylist" @change="editPlaylist"
@keydown.enter="editPlaylist"/> @keydown.enter="editPlaylist"/>
</div> </div>
<div class="playlist-time genre" style="margin: 0px;">{{getAlbumGenre()}}</div> <div class="playlist-time genre" style="margin: 0px;" :style="{ 'color': '#' + hasHeroObject()?.textColor2 ?? '' }">{{getAlbumGenre()}}</div>
<div class="playlist-artist item-navigate" <div class="playlist-artist item-navigate"
v-if="getArtistName(data) != '' && !useArtistChip" v-if="getArtistName(data) != '' && !useArtistChip"
@click="data.attributes && data.attributes.artistName ? app.searchAndNavigate(data,'artist') : ''"> @click="data.attributes && data.attributes.artistName ? app.searchAndNavigate(data,'artist') : ''">
{{getArtistName(data)}} {{getArtistName(data)}}
</div> </div>
<template v-if="useArtistChip"> <template v-if="useArtistChip">
<artist-chip v-for="artist in data.relationships.artists?.data" <artist-chip v-for="artist in data.relationships.artists?.data" :style="{ 'color': '#' +hasHeroObject()?.textColor3 ?? '' }"
:item="artist"></artist-chip> :item="artist"></artist-chip>
</template> </template>
<div class="playlist-desc" <div class="playlist-desc"
:style="{ 'color': '#' +hasHeroObject()?.textColor3 ?? '' }"
v-if="(data.attributes.description && (data.attributes.description.standard || data.attributes.description.short)) || (data.attributes.editorialNotes && (data.attributes.editorialNotes.standard || data.attributes.editorialNotes.short))"> v-if="(data.attributes.description && (data.attributes.description.standard || data.attributes.description.short)) || (data.attributes.editorialNotes && (data.attributes.editorialNotes.standard || data.attributes.editorialNotes.short))">
<div v-if="(data.attributes.description?.short ?? data.attributes.editorialNotes?.short) != null" <div v-if="(data.attributes.description?.short ?? data.attributes.editorialNotes?.short) != null"
class="content" class="content"
v-html="data.attributes.description?.short ?? data.attributes.editorialNotes?.short" v-html="data.attributes.description?.short ?? data.attributes.editorialNotes?.short"
@click="openInfoModal()"></div> @click="openInfoModal()"></div>
<div v-else-if="((data.attributes.description?.standard ?? data.attributes.editorialNotes?.standard) != null) && (descriptionEditing == false)" <div v-else-if="((data.attributes.description?.standard ?? data.attributes.editorialNotes?.standard) != null) && (descriptionEditing == false)"
@mouseover="minClass(false)" @click="editPlaylistDescription()">{{data.attributes.description?.standard ?? data.attributes.editorialNotes?.standard}}</div> @mouseover="minClass(false)" @click="editPlaylistDescription()" v-html="(data.attributes.description?.standard ?? (data.attributes.editorialNotes?.standard ?? '')).substring(0, 255) +'...'"
@click="if((data.attributes.description?.standard ?? (data.attributes.editorialNotes?.standard ?? '')).length > 255) {openInfoModal()}"></div>
<div v-else-if="((data.attributes.description?.standard ?? data.attributes.editorialNotes?.standard) != null) && (descriptionEditing)" <div v-else-if="((data.attributes.description?.standard ?? data.attributes.editorialNotes?.standard) != null) && (descriptionEditing)"
@mouseover="minClass(false)"><input type="text" @mouseover="minClass(false)"><input type="text"
spellcheck="false" spellcheck="false"
@ -102,11 +108,25 @@
{{app.getLz('term.confirm')}} {{app.getLz('term.confirm')}}
</button> </button>
<div style="display: flex; float: right;"> <div style="display: flex; float: right;">
<<<<<<< HEAD
<button :class="['search-btn', showSearch ? 'active' : '']" <button :class="['search-btn', showSearch ? 'active' : '']"
@click="toggleSearch()" @click="toggleSearch()"
:aria-label="showSearch ? app.getLz('term.hideSearch') : app.getLz('term.showSearch')"> :aria-label="showSearch ? app.getLz('term.hideSearch') : app.getLz('term.showSearch')">
<img :src="showSearch ? './assets/search-alt.svg' : './assets/search.svg'"> <img :src="showSearch ? './assets/search-alt.svg' : './assets/search.svg'">
</button> </button>
=======
<div class="search-input-container" style="margin-right: 8px;">
<div class="search-input--icon"></div>
<input type="search"
style="width:100%;"
spellcheck="false"
:placeholder="$root.getLz('term.search') + '...'"
@input="search()"
:style="{ '--heroplaceholdercolor': '#' +hasHeroObject()?.textColor4 ?? ''}"
v-model="searchQuery"
class="search-input">
</div>
>>>>>>> main
<button class="more-btn-round" @click="menu" :aria-label="app.getLz('term.more')"> <button class="more-btn-round" @click="menu" :aria-label="app.getLz('term.more')">
<div class="svg-icon"></div> <div class="svg-icon"></div>
</button> </button>
@ -115,7 +135,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="artworkContainer" v-if="data.attributes.artwork != null"> <div class="artworkContainer" v-if="data.attributes.artwork != null && !hasHero()">
<artwork-material :url="data.attributes.artwork.url" size="500" images="1"></artwork-material> <artwork-material :url="data.attributes.artwork.url" size="500" images="1"></artwork-material>
</div> </div>
<button class="md-btn md-btn-small editTracksBtn" v-if="(data.attributes.canEdit && data.type == 'library-playlists')" @click="editing = !editing"> <button class="md-btn md-btn-small editTracksBtn" v-if="(data.attributes.canEdit && data.type == 'library-playlists')" @click="editing = !editing">
@ -369,6 +389,26 @@
isHeaderVisible(visible) { isHeaderVisible(visible) {
this.headerVisible = visible this.headerVisible = visible
}, },
hasHero() {
if(this.data.attributes?.editorialArtwork?.bannerUber){
return this.data.attributes?.editorialArtwork?.bannerUber.url
} else if(this.data.attributes?.editorialArtwork?.subscriptionHero) {
return this.data.attributes?.editorialArtwork?.subscriptionHero.url
} else if(this.data.attributes?.editorialArtwork?.storeFlowcase){
return this.data.attributes?.editorialArtwork?.storeFlowcase.url
}
return false;
},
hasHeroObject() {
if(this.data.attributes?.editorialArtwork?.bannerUber){
return this.data.attributes?.editorialArtwork?.bannerUber
} else if(this.data.attributes?.editorialArtwork?.subscriptionHero) {
return this.data.attributes?.editorialArtwork?.subscriptionHero
} else if(this.data.attributes?.editorialArtwork?.storeFlowcase){
return this.data.attributes?.editorialArtwork?.storeFlowcase
}
return [];
},
getBadges() { getBadges() {
return return
if (this.badgesRequested) { if (this.badgesRequested) {

View file

@ -4,7 +4,7 @@
<div class="row"> <div class="row">
<div class="col nopadding"> <div class="col nopadding">
<h1 class="header-text"> <h1 class="header-text">
{{ $root.getLz("settings.option.visual.theme.manageStyles") }} {{ $root.getLz("settings.option.visual.theme.manageStyles") }}
</h1> </h1>
</div> </div>
<div class="col-auto nopadding flex-center"> <div class="col-auto nopadding flex-center">
@ -32,11 +32,11 @@
</div> </div>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
<template v-for="theme in themes"> <template v-for="theme in themes">
<li @click="addStyle(theme.file)" <li @click="addStyle(theme.file)"
@contextmenu="contextMenu($event, theme)" @contextmenu="contextMenu($event, theme)"
class="list-group-item list-group-item-dark" class="list-group-item list-group-item-dark"
:class="{'applied': $root.cfg.visual.styles.includes(theme.file)}"> :class="{'applied': $root.cfg.visual.styles.includes(theme.file)}">
<b-row> <b-row>
<b-col class="themeLabel">{{theme.name}}</b-col> <b-col class="themeLabel">{{theme.name}}</b-col>
<template v-if="$root.cfg.visual.styles.includes(theme.file)"> <template v-if="$root.cfg.visual.styles.includes(theme.file)">
@ -58,13 +58,13 @@
</b-row> </b-row>
</li> </li>
<li @click="addStyle(packEntry.file)" <li @click="addStyle(packEntry.file)"
@contextmenu="contextMenu($event, theme)" @contextmenu="contextMenu($event, theme)"
class="list-group-item list-group-item-dark addon" class="list-group-item list-group-item-dark addon"
v-for="packEntry in theme.pack" v-for="packEntry in theme.pack"
:class="{'applied': $root.cfg.visual.styles.includes(packEntry.file)}" :class="{'applied': $root.cfg.visual.styles.includes(packEntry.file)}"
v-if="theme.pack"> v-if="theme.pack">
<b-row> <b-row>
<b-col class="themeLabel">{{packEntry.name}}</b-col> <b-col class="themeLabel">{{packEntry.name}}</b-col>
<template v-if="$root.cfg.visual.styles.includes(packEntry.file)"> <template v-if="$root.cfg.visual.styles.includes(packEntry.file)">
@ -111,7 +111,7 @@
</b-col> </b-col>
</b-row> </b-row>
</b-list-group-item> </b-list-group-item>
</draggable> </draggable>
</div> </div>
`, `,
props: { props: {
@ -244,7 +244,7 @@
name: app.getLz("settings.option.visual.theme.uninstall"), name: app.getLz("settings.option.visual.theme.uninstall"),
disabled: true, disabled: true,
action: () => { action: () => {
bootbox.confirm(app.stringTemplateParser(app.getLz("settings.prompt.visual.theme.uninstallTheme"), { app.confirm(app.stringTemplateParser(app.getLz("settings.prompt.visual.theme.uninstallTheme"), {
theme: theme.name ?? theme.file theme: theme.name ?? theme.file
}), (res) => { }), (res) => {
if (res) { if (res) {
@ -317,7 +317,7 @@
let msg = app.stringTemplateParser(app.getLz('settings.option.visual.theme.github.install.confirm'), { let msg = app.stringTemplateParser(app.getLz('settings.option.visual.theme.github.install.confirm'), {
repo: repo.full_name repo: repo.full_name
}); });
bootbox.confirm(msg, (res) => { app.confirm(msg, (res) => {
if (res) { if (res) {
ipcRenderer.once("theme-installed", (event, arg) => { ipcRenderer.once("theme-installed", (event, arg) => {
if (arg.success) { if (arg.success) {
@ -334,7 +334,7 @@
}, },
installThemeURL() { installThemeURL() {
let self = this let self = this
bootbox.prompt(app.getLz('settings.prompt.visual.theme.github.URL'), (result) => { app.prompt(app.getLz('settings.prompt.visual.theme.github.URL'), (result) => {
if (result) { if (result) {
ipcRenderer.once("theme-installed", (event, arg) => { ipcRenderer.once("theme-installed", (event, arg) => {
if (arg.success) { if (arg.success) {

View file

@ -2,11 +2,11 @@
<div class="content-inner keybinds-page"> <div class="content-inner keybinds-page">
<div class="md-option-header"> <div class="md-option-header">
<span>{{$root.getLz('settings.option.general.keybindings')}}</span> <span>{{$root.getLz('settings.option.general.keybindings')}}</span>
</div> </div>
<div class="settings-option-body"> <div class="settings-option-body">
<div class="md-option-header-sub"> <div class="md-option-header-sub">
<span>{{$root.getLz('settings.option.general.keybindings.library')}}</span> <span>{{$root.getLz('settings.option.general.keybindings.library')}}</span>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('settings.description.search')}} {{$root.getLz('settings.description.search')}}
@ -86,7 +86,7 @@
</div> </div>
<div class="md-option-header-sub"> <div class="md-option-header-sub">
<span>{{$root.getLz('settings.option.general.keybindings.session')}}</span> <span>{{$root.getLz('settings.option.general.keybindings.session')}}</span>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('settings.description.private')}} {{$root.getLz('settings.description.private')}}
@ -100,7 +100,7 @@
</div> </div>
<div class="md-option-header-sub"> <div class="md-option-header-sub">
<span>{{$root.getLz('settings.option.general.keybindings.control')}}</span> <span>{{$root.getLz('settings.option.general.keybindings.control')}}</span>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('settings.description.remote')}} {{$root.getLz('settings.description.remote')}}
@ -158,7 +158,7 @@
</div> </div>
<div class="md-option-header-sub" v-if="app.platform !== 'darwin'"> <div class="md-option-header-sub" v-if="app.platform !== 'darwin'">
<span>{{$root.getLz('settings.option.general.keybindings.interface')}}</span> <span>{{$root.getLz('settings.option.general.keybindings.interface')}}</span>
</div> </div>
<div class="md-option-line" v-if="app.platform !== 'darwin'"> <div class="md-option-line" v-if="app.platform !== 'darwin'">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('term.zoomin')}} {{$root.getLz('term.zoomin')}}
@ -194,7 +194,7 @@
</div> </div>
<div class="md-option-header-sub"> <div class="md-option-header-sub">
<span>{{$root.getLz('settings.option.general.keybindings.advanced')}}</span> <span>{{$root.getLz('settings.option.general.keybindings.advanced')}}</span>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('settings.description.developer')}} {{$root.getLz('settings.description.developer')}}
@ -210,7 +210,7 @@
{{$root.getLz('term.reset')}} {{$root.getLz('term.reset')}}
</button> </button>
</div> </div>
</div> </div>
</script> </script>
@ -265,7 +265,7 @@
document.body.removeChild(blur); document.body.removeChild(blur);
clearTimeout(keyBindTimeout); clearTimeout(keyBindTimeout);
notyf.success(app.getLz('settings.notyf.general.keybindings.update.success')); notyf.success(app.getLz('settings.notyf.general.keybindings.update.success'));
bootbox.confirm(app.getLz("settings.prompt.general.keybindings.update.success"), (ok) => { app.confirm(app.getLz("settings.prompt.general.keybindings.update.success"), (ok) => {
if (ok) ipcRenderer.invoke("relaunchApp") if (ok) ipcRenderer.invoke("relaunchApp")
}) })
} else { } else {
@ -296,7 +296,7 @@
app.cfg.general.keybindings.zoomrst = [app.platform == "darwin" ? "Command" : "Control", "num0"]; app.cfg.general.keybindings.zoomrst = [app.platform == "darwin" ? "Command" : "Control", "num0"];
app.cfg.general.keybindings.openDeveloperTools = [app.platform == "darwin" ? "Command" : "Control", app.platform == "darwin" ? "Option" : "Shift", "I"]; app.cfg.general.keybindings.openDeveloperTools = [app.platform == "darwin" ? "Command" : "Control", app.platform == "darwin" ? "Option" : "Shift", "I"];
notyf.success(app.getLz('settings.notyf.general.keybindings.update.success')); notyf.success(app.getLz('settings.notyf.general.keybindings.update.success'));
bootbox.confirm(app.getLz("settings.prompt.general.keybindings.update.success"), (ok) => { app.confirm(app.getLz("settings.prompt.general.keybindings.update.success"), (ok) => {
if (ok) ipcRenderer.invoke("relaunchApp") if (ok) ipcRenderer.invoke("relaunchApp")
}) })
}, },

View file

@ -125,13 +125,13 @@
let msg = app.stringTemplateParser(app.getLz('settings.option.visual.plugin.github.install.confirm'), { let msg = app.stringTemplateParser(app.getLz('settings.option.visual.plugin.github.install.confirm'), {
repo: repo.full_name repo: repo.full_name
}); });
bootbox.confirm(msg, (res) => { app.confirm(msg, (res) => {
if (res) { if (res) {
ipcRenderer.once("plugin-installed", (event, arg) => { ipcRenderer.once("plugin-installed", (event, arg) => {
if (arg.success) { if (arg.success) {
self.themes = [] self.themes = []
notyf.success(app.getLz('settings.notyf.visual.plugin.install.success')); notyf.success(app.getLz('settings.notyf.visual.plugin.install.success'));
bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{ app.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{
if (ok) { if (ok) {
ipcRenderer.invoke("relaunchApp") ipcRenderer.invoke("relaunchApp")
} else { } else {
@ -148,12 +148,12 @@
}, },
installThemeURL() { installThemeURL() {
let self = this let self = this
bootbox.prompt(app.getLz('settings.prompt.visual.plugin.github.URL'), (result) => { app.prompt(app.getLz('settings.prompt.visual.plugin.github.URL'), (result) => {
if (result) { if (result) {
ipcRenderer.once("plugin-installed", (event, arg) => { ipcRenderer.once("plugin-installed", (event, arg) => {
if (arg.success) { if (arg.success) {
self.themes = ipcRenderer.sendSync("get-themes") self.themes = ipcRenderer.sendSync("get-themes")
bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{ app.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{
if (ok) { if (ok) {
ipcRenderer.invoke("relaunchApp") ipcRenderer.invoke("relaunchApp")
} else { } else {

View file

@ -1127,6 +1127,17 @@
</button> </button>
</div> </div>
</div> </div>
<div class="md-option-line">
<div class="md-option-segment">
Performant Logging
<small>Disables debug logging, resulting in a slightly faster Cider. (Requires relaunch)</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<label>
<input type="checkbox" v-model="app.cfg.advanced.disableLogging" switch/>
</label>
</div>
</div>
</div> </div>
<!-- Experimental Settings --> <!-- Experimental Settings -->
@ -1396,7 +1407,7 @@
} }
}, },
reinstallWidevineCDM() { reinstallWidevineCDM() {
bootbox.confirm(app.getLz("settings.option.experimental.reinstallwidevine.confirm"), (ok) => { app.confirm(app.getLz("settings.option.experimental.reinstallwidevine.confirm"), (ok) => {
if (ok) { if (ok) {
ipcRenderer.invoke("reinstall-widevine-cdm"); ipcRenderer.invoke("reinstall-widevine-cdm");
} }
@ -1439,7 +1450,7 @@
toggleAudioContext: function () { toggleAudioContext: function () {
if (app.cfg.advanced.AudioContext === true) { if (app.cfg.advanced.AudioContext === true) {
if (navigator.hardwareConcurrency < 6) { if (navigator.hardwareConcurrency < 6) {
bootbox.confirm(app.getLz("settings.warn.audio.enableAdvancedFunctionality.lowcores"), function (result) { app.confirm(app.getLz("settings.warn.audio.enableAdvancedFunctionality.lowcores"), function (result) {
if (result) { if (result) {
CiderAudio.init(); CiderAudio.init();
if (app.cfg.audio.normalization === true) { if (app.cfg.audio.normalization === true) {
@ -1486,7 +1497,7 @@
}, },
promptForRelaunch() { promptForRelaunch() {
bootbox.confirm(app.getLz('action.relaunch.confirm'), function (result) { app.confirm(app.getLz('action.relaunch.confirm'), function (result) {
if (result) { if (result) {
ipcRenderer.send('relaunchApp', ''); ipcRenderer.send('relaunchApp', '');
} }

View file

@ -146,7 +146,7 @@
let msg = app.stringTemplateParser(app.getLz('settings.option.visual.theme.github.install.confirm'), { let msg = app.stringTemplateParser(app.getLz('settings.option.visual.theme.github.install.confirm'), {
repo: repo.full_name repo: repo.full_name
}); });
bootbox.confirm(msg, (res) => { app.confirm(msg, (res) => {
if (res) { if (res) {
ipcRenderer.once("theme-installed", (event, arg) => { ipcRenderer.once("theme-installed", (event, arg) => {
if (arg.success) { if (arg.success) {
@ -163,7 +163,7 @@
}, },
installThemeURL() { installThemeURL() {
let self = this let self = this
bootbox.prompt(app.getLz('settings.prompt.visual.theme.github.URL'), (result) => { app.prompt(app.getLz('settings.prompt.visual.theme.github.URL'), (result) => {
if (result) { if (result) {
ipcRenderer.once("theme-installed", (event, arg) => { ipcRenderer.once("theme-installed", (event, arg) => {
if (arg.success) { if (arg.success) {