* Update ru_RU.json

keeping russian lang actual

* ok

* Add gradient to lyric-footer

* *Commit en español Ñ (#1304)

* i hate my life (#1307)

* world is now a better place

* meltdown avoided

* meltdown avoided

* stylize new listen now childs

* full scale artwork, finally

* dynamic width for search categories

* hd all album work

* Update afterPack.js

* force hq quality

* oops

* attempt to fix

* misc cleanup

* why what

* what was i thinking

* fix duplicated text in listen now childs

* Paginate/infinite scroll for  albums, playlists (#1234)

* Infinite scroll, pagination to album, playlists

* move pagination below tracks

* Make page size configurable

* remove renderer

* Mitigate songs / album slow app issue.

* add ratings, library change to web remote (#1285)

* Add compact artist header option (#1308)

* Support compact artist header (optional)

* Add required term

* pain e19 still bugged

* improve pagination styling

* el16 fix

* up 1.5.2

* Disable Fullscreen view when artist/album name is clicked. (#1315)

* Disable Fullscreen view when artist/album name is clicked.

idk why this change didn't exist

* Seperate dash from album name

* Replace `$root.showSearch()` with `app.appRoute('search')`

`$root.showSearch()` prevents going back to previous page from sidebar.

* Fix Anim (#1316)

* make tracks tab active (#1318)

* welp that wasn't it.

* Thnks (#1319)

* Thnks

* i need sleep

* Update cider-playlist.ejs

* remove v-ripple

* attempt to fix flatpak

* Update config.yml

* minimize categories names

* fix versioning

* fix versioning v2

* version fix v3 - final

* fix categories name for other storefronts

* ident unparsed title

* center fullscreen

* fix share

* Add protocol for playpause and nextitem (#1329)

* Moved to minimize hide window instead of close

* Moved state saving to before quit

* build test

* fix ci

* sudo

* ci

* use old branch fn

* d

* revert

* Exposed songid in attributes, reimplemented lastfm primary artist scrobbling, cleaned up mkinterop

* Moved it back

* im over this

* attempt airts

* use new airtunes branch

* *eye roll*

* Moved time conversion to built-in MK function

* Moved to Electron Notifications

* Swapped to array index

* keeping this here until for now

* debuggin

* run ci

* allow noti button on macs

* No image for now

* revert space

* Latest releases -> Latest Release

* Artwork caching (sorta)

* holy balls optimization

* save sentry from this

Co-authored-by: h0ckerman <35598335+h0ckerman@users.noreply.github.com>
Co-authored-by: vapormusic <vietanhfat@gmail.com>
Co-authored-by: Monochromish <chillygamer7@gmail.com>
Co-authored-by: Gabriel Davila <56521591+mefsaal@users.noreply.github.com>
Co-authored-by: Core <64542347+coredev-uk@users.noreply.github.com>
Co-authored-by: Maikiwi <stella@mai.kiwi>
Co-authored-by: yazninja <yazlesean@gmail.com>
Co-authored-by: booploops <49113086+booploops@users.noreply.github.com>
Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
Co-authored-by: Pedro Galhardo <pgalhardo@icloud.com>
Co-authored-by: Monochromish <79590499+Monochromish@users.noreply.github.com>
Co-authored-by: Core <core@c0r3.uk>
This commit is contained in:
cryptofyre 2022-07-31 21:28:51 -05:00 committed by GitHub
parent a99dddf2b6
commit 5ed045aad1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 298 additions and 183 deletions

View file

@ -480,6 +480,7 @@
display: inline-flex;
width: 100%;
justify-content: center;
align-items: center;
}
}

View file

@ -33,11 +33,14 @@ if (app.cfg.advanced.disableLogging === true) {
// Mount Vue to #app
app.$mount("#app")
// Init CiderAudio
if (app.cfg.advanced.AudioContext === true) {
CiderAudio.init()
// Init CiderAudio and force audiocontext
if (app.cfg.advanced.AudioContext != true) {
app.cfg.advanced.AudioContext = true;
window.location.reload();
}
CiderAudio.init()
// Import gamepad support
app.simulateGamepad = simulateGamepad
app.spawnMica = spawnMica

View file

@ -949,12 +949,6 @@ const app = new Vue({
}
});
this.mk.addEventListener(MusicKit.Events.playbackProgressDidChange, () => {
if (self.mk.currentPlaybackProgress === (app.cfg.connectivity.lastfm.scrobble_after / 100)) {
ipcRenderer.send('lastfm:scrobbleTrack', MusicKitInterop.getAttributes());
}
})
this.mk.addEventListener(MusicKit.Events.playbackStateDidChange, (event) => {
ipcRenderer.send('wsapi-updatePlaybackState', wsapi.getAttributes());
document.body.setAttribute("playback-state", event.state == 2 ? "playing" : "paused")
@ -1013,8 +1007,8 @@ const app = new Vue({
try {localStorage.setItem("playingBitrate", app.mk.nowPlayingItem.flavor)}
catch(e) {}
}
if (!app.cfg.audio.normalization && app.cfg.advanced.AudioContext === false) { CiderAudio.hierarchical_loading(); }
if (app.cfg.audio.normalization === false) { CiderAudio.hierarchical_loading(); } // Just Reload for Adaptive CAP if norm is off
else {
// get unencrypted audio previews to get SoundCheck's normalization tag
try {
@ -1080,17 +1074,6 @@ const app = new Vue({
app.getNowPlayingArtworkBG(32);
app.loadLyrics();
// Playback Notifications
if (this.cfg.general.playbackNotifications && !document.hasFocus() && a.artistName && a.artwork && a.name) {
if (this.notification) {
this.notification.close()
}
this.notification = new Notification(a.name, {
body: `${a.artistName}${a.albumName}`,
icon: a.artwork.url.replace('/{w}x{h}bb', '/512x512bb').replace('/2000x2000bb', '/35x35bb'),
silent: true,
});
}
setTimeout(() => {
let i = (document.querySelector('#apple-music-player')?.src ?? "")
if (i.endsWith(".m3u8") || i.endsWith(".m3u")) {
@ -1887,27 +1870,7 @@ const app = new Vue({
return dDisplay + (dDisplay && hDisplay ? ", " : "") + hDisplay + (hDisplay && mDisplay ? ", " : "") + mDisplay;
} else {
let returnTime = datetime.toISOString().substring(11, 19);
const timeGates = {
600: 15, // 10 Minutes
3600: 14, // Hour
36000: 12, // 10 Hours
}
for (let key in timeGates) {
if (seconds < key) {
returnTime = datetime.toISOString().substring(timeGates[key], 19)
break
}
}
// Add the days on the front
if (seconds >= 86400) {
returnTime = parseInt(datetime.toISOString().substring(8, 10)) - 1 + ":" + returnTime
}
return returnTime
return MusicKit.formatMediaTime(seconds);
}
},
hashCode(str) {
@ -4391,7 +4354,7 @@ const app = new Vue({
"id": "equalizer",
"icon": "../views/svg/speaker.svg",
"name": app.getLz('term.equalizer'),
"hidden": true,
"hidden": false,
"action": function () {
app.modals.equalizer = true
app.modals.audioSettings = false
@ -4401,7 +4364,7 @@ const app = new Vue({
"id": "audioLab",
"icon": "../views/svg/speaker.svg",
"name": app.getLz('settings.option.audio.audioLab'),
"hidden": true,
"hidden": false,
"action": function () {
app.openSettingsPage('audiolabs')
}
@ -4409,10 +4372,12 @@ const app = new Vue({
]
}
}
/*
if (this.cfg.advanced.AudioContext) {
menus.normal.items.find(i => i.id === 'audioLab').hidden = false
menus.normal.items.find(i => i.id === 'equalizer').hidden = false
}
*/
if (this.contextExt) {
if (this.contextExt.normal) {
menus.normal.items = menus.normal.items.concat(this.contextExt.normal)

View file

@ -65,7 +65,7 @@
</button>
<button
class="usermenu-item"
@click="cfg.advanced.AudioContext ? modals.castMenu = true :(cfg.advanced.AudioContext = true, modals.castMenu = true)"
@click="modals.castMenu = true"
>
<span class="usermenu-item-icon">
<%- include("../svg/cast.svg") %>
@ -76,7 +76,7 @@
</button>
<button
class="usermenu-item"
@click="cfg.advanced.AudioContext ? modals.audioSettings = true : (cfg.advanced.AudioContext = true, modals.audioSettings = true)"
@click="modals.audioSettings = true"
>
<span class="usermenu-item-icon">
<%- include("../svg/headphones.svg") %>

View file

@ -152,7 +152,7 @@
<button class="playback-button--small cast"
:title="$root.getLz('term.cast')"
v-b-tooltip.hover
@click="cfg.advanced.AudioContext ? modals.castMenu = true : (cfg.advanced.AudioContext = true, modals.castMenu = true)"></button>
@click="modals.castMenu = true"></button>
</div>
<div class="app-chrome-item generic">
<button class="playback-button--small queue" :class="{'active': drawer.panel == 'queue'}"

View file

@ -231,7 +231,7 @@
</div>
<div class="app-chrome-item generic">
<button class="playback-button--small cast" :title="$root.getLz('term.cast')"
@click="cfg.advanced.AudioContext ? modals.castMenu = true : (cfg.advanced.AudioContext = true, modals.castMenu = true)"
@click="modals.castMenu = true"
v-b-tooltip.hover></button>
</div>
<div class="app-chrome-item generic">

View file

@ -3,7 +3,7 @@
<div class="modal-window airplay-modal">
<div class="modal-header">
<div class="modal-title">{{'Enter password'}}</div>
<button class="close-btn" @click="close()" :aria-label="app.getLz('action.close')"></button>
<button class="close-btn" @click="close()" :aria-label="this.$root.getLz('action.close')"></button>
</div>
<div class="modal-content" style="overflow-y: overlay; padding: 3%">
<input type="text" v-model="passcode"/>

View file

@ -116,7 +116,7 @@
},
setAirPlayCast(device) {
this.activeCasts.push(device);
ipcRenderer.send("performAirplayPCM",device.host,device.port,null,"","","","",device.txt)
ipcRenderer.send("performAirplayPCM",device.host,device.port,null,"","","","",device.txt,device.airplay2)
},
stopCasting() {
CiderAudio.stopAudio();

View file

@ -143,7 +143,7 @@
return color
},
async checkLibrary() {
if ((this.item?.id ?? '').toString().startsWith('ciderlocal')){
if ((this.item?.id ?? '').toString().startsWith('ciderlocal')) {
return true
}
if (this.addedToLibrary) { return this.addedToLibrary }
@ -408,7 +408,7 @@
"icon": "./assets/arrow-bend-up.svg",
"action": function () {
let type = self.item.attributes.playParams?.kind ?? self.item.type
if (type == "podcast-episodes") {type = "episode"}
if (type == "podcast-episodes") { type = "episode" }
app.mk.playNext({ [type]: self.item.attributes.playParams?.id ?? self.item.id })
app.mk.queue._reindex()
app.selectedMediaItems = []
@ -419,7 +419,7 @@
"icon": "./assets/arrow-bend-down.svg",
"action": function () {
let type = self.item.attributes.playParams?.kind ?? self.item.type
if (type == "podcast-episodes") {type = "episode"}
if (type == "podcast-episodes") { type = "episode" }
app.mk.playLater({ [type]: self.item.attributes.playParams?.id ?? self.item.id })
app.mk.queue._reindex()
app.selectedMediaItems = []
@ -452,10 +452,16 @@
{
"icon": "./assets/feather/share.svg",
"name": app.getLz('action.share'),
"action": function () {
if (!self.item.attributes.url && self.item.relationships) {
if (self.item.relationships.catalog) {
app.mkapi(self.item.attributes.playParams?.kind, false, self.item.relationships.catalog.data[0].id).then(u => { self.app.copyToClipboard((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) })
"action": async function () {
let item = self.item
if (!item.attributes.url) {
if (item.type.includes("library")) {
let result = (await app.mk.api.v3.music(`/v1/me/library/${item.type.replace("library-", '')}/${item.id}/catalog`)).data.data[0]
if(result.attributes.url) {
self.app.copyToClipboard(result.attributes.url)
}else{
notyf.error("Failed to get share URL")
}
}
} else {
self.app.copyToClipboard(self.item.attributes.url)
@ -465,10 +471,16 @@
{
"icon": "./assets/feather/share.svg",
"name": `${app.getLz('action.share')} (song.link)`,
"action": function () {
if (!self.item.attributes.url && self.item.relationships) {
if (self.item.relationships.catalog) {
app.mkapi(self.item.attributes.playParams?.kind, false, self.item.relationships.catalog.data[0].id).then(u => { self.app.songLinkShare((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) })
"action": async function () {
let item = self.item
if (!item.attributes.url) {
if (item.type.includes("library")) {
let result = (await app.mk.api.v3.music(`/v1/me/library/${item.type.replace("library-", '')}/${item.id}/catalog`)).data.data[0]
if(result.attributes.url) {
self.app.copyToClipboard(result.attributes.url)
}else{
notyf.error("Failed to get share URL")
}
}
} else {
self.app.songLinkShare(self.item.attributes.url)
@ -649,4 +661,4 @@
}
}
});
</script>
</script>

View file

@ -45,7 +45,7 @@
<div class="title"
:title="item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? (item.attributes?.editorialNotes?.name ?? ''))"
v-if="item.attributes.artistNames == null || kind != 'card'" @click='app.routeView(item)'>
<div class="item-navigate text-overflow-elipsis">{{ item.attributes?.name ??
<div class="item-navigate text-overflow-elipsis">{{ item.attributes?.name.replace(/&nbsp;/g, ' ').replace(/Apple Music |^Apple |/g, '') ??
(item.relationships?.contents?.data[0]?.attributes?.name ??
(item.attributes?.editorialNotes?.name ?? '')) }}
</div>

View file

@ -348,20 +348,6 @@
</div>
</div>
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality')}}
<br>
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<label>
<input type="checkbox" v-model="app.cfg.advanced.AudioContext"
v-on:change="toggleAudioContext"
switch/>
</label>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
<div class="md-option-segment">
{{$root.getLz('term.equalizer')}}
</div>
@ -371,7 +357,7 @@
</button>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
<div class="md-option-line">
<div class="md-option-segment" style="white-space: pre-line;">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.audioNormalization')}}
<small>{{app.cfg.audio.equalizer.vibrantBass != 0 ||
@ -391,7 +377,7 @@
</div>
</div>
<div class="md-option-line"
v-show="app.cfg.advanced.AudioContext && app.cfg.audio.normalization && app.cfg.audio.advanced">
v-show="app.cfg.audio.normalization && app.cfg.audio.advanced">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.dbspl.display')}}
<br>
@ -419,7 +405,7 @@
</div>
</div>
</b-tab>
<b-tab v-if="app.cfg.advanced.AudioContext">
<b-tab>
<template #title>
<div>
<svg-icon url="./assets/feather/zap.svg" classes="svg-md" name="settings-audiolabs"/>
@ -1062,6 +1048,17 @@
</label>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.connectivity.lastfm.enabled">
<div class="md-option-segment">
{{$root.getLz('settings.option.connectivity.lastfmScrobble.removeFeatured')}}
</div>
<div class="md-option-segment md-option-segment_auto">
<label>
<input type="checkbox" v-model="app.cfg.connectivity.lastfm.remove_featured"
switch/>
</label>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.connectivity.lastfm.enabled">
<div class="md-option-segment">
{{$root.getLz('settings.option.connectivity.lastfmScrobble.filterTypes')}}
@ -1462,21 +1459,6 @@
removeExperiment(flag) {
app.cfg.advanced.experiments.splice(app.cfg.advanced.experiments.indexOf(flag), 1);
},
toggleAudioContext: function () {
if (app.cfg.advanced.AudioContext === true) {
if (navigator.hardwareConcurrency < 6) {
app.confirm(app.getLz("settings.warn.audio.enableAdvancedFunctionality.lowcores"), function (result) {
if (result) {
window.location.reload();
}
})
} else {
window.location.reload()
}
} else {
window.location.reload()
}
},
toggleNormalization: function () {
if (app.cfg.audio.normalization) {
CiderAudio.normalizerOn()

View file

@ -6,15 +6,7 @@
<b-jumbotron :header="$root.getLz('settings.option.audio.audioLab')"
lead="Designed by Cider Acoustic Technologies in California"></b-jumbotron>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === false">
<div class="md-option-segment">
{{$root.getLz('settings.warn.audioLab.withoutAF')}}
</div>
<button class="md-btn" style="margin-top: 5px;" onclick="app.appRoute('settings')">
{{$root.getLz('term.settings')}}
</button>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPE')}}
<br>
@ -44,7 +36,7 @@
</select>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
Cider Opportunistic Correction System
<br>
@ -59,7 +51,7 @@
</select>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer')}} [1]
<br>
@ -84,7 +76,7 @@
</select>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer')}} [2]
<br>
@ -109,7 +101,7 @@
</select>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization')}}
<br>
@ -139,7 +131,7 @@
<div class="md-option-header">
<span>{{$root.getLz('settings.header.unfinished')}}</span>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-line">
<div class="md-option-segment">
Cider Origami™ Vocal Enhancer/Remasterer
<br>

View file

@ -98,19 +98,6 @@
<div class="md-option-container">
<div class="settings-option-body">
<div class="md-option-line">
<div class="md-option-segment">
{{getLz('settings.option.audio.enableAdvancedFunctionality')}}
<br>
<small>{{getLz('settings.option.audio.enableAdvancedFunctionality.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<label>
<input type="checkbox" v-model="$root.cfg.advanced.AudioContext"
switch/>
</label>
</div>
</div>
<div class="md-option-line" v-show="$root.cfg.advanced.AudioContext === true">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPE')}}
<br>