Merge branch 'ciderapp:develop' into develop

This commit is contained in:
GamingLiamStudios 2022-03-09 11:01:12 +11:00 committed by GitHub
commit 140204ac0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 13648 additions and 411 deletions

View file

@ -39,6 +39,7 @@
"@sentry/electron": "^3.0.2",
"@sentry/integrations": "^6.18.1",
"adm-zip": "0.4.10",
"castv2-client": "^1.2.0",
"chokidar": "^3.5.3",
"discord-rpc": "^4.0.1",
@ -48,7 +49,7 @@
"electron-notarize": "^1.1.1",
"electron-store": "^8.0.1",
"electron-updater": "^4.6.5",
"electron-vibrancy-updated": "git+https://github.com/ciderapp/electron-vibrancy-updated",
"electron-window-state": "^5.0.3",
"express": "^4.17.3",
"get-port": "^5.1.1",
@ -76,7 +77,7 @@
"@types/express": "^4.17.13",
"@types/qrcode-terminal": "^0.12.0",
"@types/ws": "^8.5.1",
"electron": "git+https://github.com/castlabs/electron-releases.git#16-x-y",
"electron": "git+https://github.com/castlabs/electron-releases.git",
"electron-builder": "^22.14.13",
"electron-builder-notarize-pkg": "^1.2.0",
"electron-webpack": "^2.8.2",
@ -108,9 +109,9 @@
}
],
"build": {
"electronVersion": "16.0.7",
"electronVersion": "17.1.0",
"electronDownload": {
"version": "16.0.7+wvcus",
"version": "18.0.0-alpha.5+wvcus",
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
},
"appId": "cider",

Binary file not shown.

View file

@ -60,6 +60,7 @@ export class BrowserWindow {
"pages/replay",
"pages/audiolabs",
"pages/zoo",
"pages/plugin-renderer",
"components/mediaitem-artwork",
"components/artwork-material",
"components/menu-panel",
@ -90,8 +91,14 @@ export class BrowserWindow {
"components/miniplayer",
"components/castmenu",
"components/artist-chip",
"components/hello-world",
],
appRoutes: [
{
page: "plugin-renderer",
component: `<plugin-renderer></plugin-renderer>`,
condition: "page == 'plugin-renderer'"
},
{
page: "zoo",
component: "<cider-zoo></cider-zoo>",

View file

@ -1,6 +1,6 @@
require('v8-compile-cache');
import {app, components, ipcMain} from 'electron';
const {app, components, ipcMain} = require('electron');
import {join} from 'path';
if (!app.isPackaged) {
@ -41,8 +41,7 @@ app.on('ready', () => {
require('vue-devtools').install()
}
app.whenReady().then(async () => {
await components.whenReady();
components.whenReady().then(async () => {
const bw = new BrowserWindow()
const win = await bw.createWindow()
@ -51,11 +50,11 @@ app.on('ready', () => {
})
console.log('[Cider][Widevine] Status:', components.status());
win.show();
win.on("ready-to-show", () => {
Cider.bwCreated();
CiderPlug.callPlugins('onReady', win);
win.show();
});
});

View file

@ -439,237 +439,189 @@ const CiderAudio = {
hierarchical_loading: function (){
CiderAudio.hierarchical_unloading();
// Vibrant Bass, CAP, Analog Warmth, Spatial
if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0) { // Vibrant Bass
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
CiderAudio.analogWarmth_h2_3(true, 3);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial')
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial')
}
if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { // Vibrant Bass, CAP
CiderAudio.llpw_h2_2(true, 2);
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { // Vibrant Bass, CAP, Analog Warmth
CiderAudio.analogWarmth_h2_3(true, 3);
}
// CAP, Analog Warmth, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.analogWarmth_h2_3(true, 3);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] CAP, Analog Warmth, Spatial')
}
}
// Vibrant Bass, CAP, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
app.cfg.audio.normalization = true
console.debug('[Cider][Audio] Vibrant Bass, CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Spatial')
}
}
// Vibrant Bass, CAP, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
CiderAudio.analogWarmth_h2_3(true, 3);
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth')
}
// CAP, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.llpw_h2_2(true, 1);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] CAP, Spatial')
}
}
// Analog Warmth, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Analog Warmth, Spatial')
}
}
// CAP, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.analogWarmth_h2_3(true, 3);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] CAP and Analog Warmth')
}
// Vibrant Bass, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.analogWarmth_h2_3(true, 2);
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth')
}
// Vibrant Bass, CAP
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP')
}
// Vibrant Bass, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
if (app.cfg.audio.maikiwiAudio.spatial === true) {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass, Spatial')
}
}
// Vibrant Bass
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass')
}
// CAP
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] CAP')
}
// Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Analog Warmth')
}
// Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false){
if (app.cfg.audio.maikiwiAudio.spatial === true) {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Maikiwi Spatial')
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) { // Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial')
}
else { // Vibrant Bass, CAP, Analog Warmth, Spatial
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Spatial')
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
app.cfg.audio.normalization = true
console.debug('[Cider][Audio] Vibrant Bass, CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Vibrant Bass, CAP')
}
}
}
else {
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 2);
app.cfg.audio.normalization = true;
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth')
}
}
else {
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Vibrant Bass')
}
}
}
}
// Nothing
// Vibrant Bass ends here
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Nothing') // If CAP & vibrant bass is disabled
if (app.cfg.audio.maikiwiAudio.ciderPPE === true) {
CiderAudio.llpw_h2_2(true, 1);
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 3);
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] CAP, Analog Warmth, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] CAP and Analog Warmth')
}
}
else {
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] CAP, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] CAP')
}
}
} // CAP ends here
else {
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Analog Warmth, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Analog Warmth')
}
}
else {
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Direct Mode to Equalizer')
}
}
}
}
console.debug("[Cider][Audio] Finished hierarchical loading");

View file

@ -1,17 +1,32 @@
const MusicKitTools = {
async v3Continuous (href, options = {}, reqOptions = {}) {
async v3Continuous ({
href,
options = {},
reqOptions = {},
onProgress = () => {},
onError = () => {},
onSuccess = () => {}
} = {}) {
let returnData = []
async function sendReq(href, options) {
const response = await app.mk.api.v3.music(href, options)
const response = await app.mk.api.v3.music(href, options).catch(error => onError)
returnData = returnData.concat(response.data.data)
if(response.data.next) {
await sendReq(response.data.next, options)
onProgress({
response: response,
total: returnData.length
})
try {
await sendReq(response.data.next, options)
}catch(e){
await sendReq(response.data.next, options)
}
}
}
await sendReq(href, options)
onSuccess(returnData)
return returnData
},
getHeader() {

View file

@ -1,4 +1,4 @@
import {store} from './vuex-store.js';
import { store } from './vuex-store.js';
Vue.use(VueHorizontal);
Vue.use(VueObserveVisibility);
@ -217,7 +217,11 @@ const app = new Vue({
}
},
pauseButtonTimer: null,
activeCasts: []
activeCasts: [],
pluginPages: {
page: "hello-world",
pages: [],
}
},
watch: {
cfg: {
@ -542,13 +546,13 @@ const app = new Vue({
this.modals.addToPlaylist = false
await app.mk.api.v3.music(
`/v1/me/library/playlists/${playlist_id}/tracks`, {}, {
fetchOptions: {
method: "POST",
body: JSON.stringify({
data: pl_items
})
}
fetchOptions: {
method: "POST",
body: JSON.stringify({
data: pl_items
})
}
}
).then(() => {
if (this.page == 'playlist_' + this.showingPlaylist.id) {
this.getPlaylistFromID(this.showingPlaylist.id, true)
@ -1017,7 +1021,7 @@ const app = new Vue({
console.log("playlist has no cache")
}
if(cachedTrackMapping) {
if (cachedTrackMapping) {
console.log("using cached track mapping")
this.playlists.trackMapping = cachedTrackMapping
}
@ -1033,7 +1037,7 @@ const app = new Vue({
const playlistData = await app.mk.api.v3.music(`/v1/me/library/playlist-folders/${parent}/children/`)
await asyncForEach(playlistData.data.data, async (playlist) => {
playlist.parent = parent
if(
if (
playlist.type != "library-playlist-folders" &&
typeof playlist.attributes.playParams["versionHash"] != "undefined"
) {
@ -1103,12 +1107,12 @@ const app = new Vue({
this.newPlaylist()
}
},
{
name: app.getLz('term.createNewPlaylistFolder'),
action: () => {
this.newPlaylistFolder()
}
{
name: app.getLz('term.createNewPlaylistFolder'),
action: () => {
this.newPlaylistFolder()
}
}
]
}
this.showMenuPanel(menu, event)
@ -1117,13 +1121,13 @@ const app = new Vue({
let self = this
this.mk.api.v3.music(
`/v1/me/library/playlist-folders/${id}`, {}, {
fetchOptions: {
method: "PATCH",
body: JSON.stringify({
attributes: { name: name }
})
}
fetchOptions: {
method: "PATCH",
body: JSON.stringify({
attributes: { name: name }
})
}
}
).then(res => {
self.refreshPlaylists()
})
@ -1132,13 +1136,13 @@ const app = new Vue({
let self = this
this.mk.api.v3.music(
`/v1/me/library/playlists/${id}`, {}, {
fetchOptions: {
method: "PATCH",
body: JSON.stringify({
attributes: { name: name }
})
}
fetchOptions: {
method: "PATCH",
body: JSON.stringify({
attributes: { name: name }
})
}
}
).then(res => {
self.refreshPlaylists()
})
@ -1401,7 +1405,7 @@ const app = new Vue({
*/
convertTime(time = 0, format = 'short') {
if(isNaN(time)) {
if (isNaN(time)) {
time = 0
}
if (typeof time !== "number") {
@ -1488,6 +1492,11 @@ const app = new Vue({
let page = hash[0]
let id = hash[1]
let isLibrary = hash[2] ?? false
if(page == "plugin") {
this.pluginPages.page = "plugin." + id
this.page = "plugin-renderer"
return
}
this.routeView({
kind: page,
id: id,
@ -1516,9 +1525,9 @@ const app = new Vue({
document.querySelector("#app-content").scrollTop = 0
} else if (kind == "editorial-elements") {
console.log(item)
if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0){
if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) {
this.routeView(item.relationships.contents.data[0])
} else if (item.attributes?.link?.url != null){
} else if (item.attributes?.link?.url != null) {
window.open(item.attributes.link.url)
}
@ -2048,7 +2057,7 @@ const app = new Vue({
}
let librarySongs = await CiderCache.getCache(cacheId)
if (librarySongs) {
this.library.songs.listing = librarySongs
this.library.songs.listing.data = librarySongs
this.searchLibrarySongs()
}
if (this.songstest) {
@ -2058,8 +2067,9 @@ const app = new Vue({
this.library.backgroundNotification.show = true
this.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs')
function downloadChunk() {
const params = {
library = await MusicKitTools.v3Continuous({
href: `/v1/me/library/songs/`,
options: {
"include[library-songs]": "catalog,artists,albums",
"fields[artists]": "name,url,id",
"fields[albums]": "name,url,id",
@ -2067,80 +2077,28 @@ const app = new Vue({
"fields[catalog]": "artistUrl,albumUrl",
"fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url",
limit: 100,
l: self.mklang
}
const safeparams = {
"platform": "web",
"limit": 80
}
self.library.songs.downloadState = 1
if (downloaded == null) {
app.mk.api.v3.music(`/v1/me/library/songs/`, params).then((response) => {
processChunk(response.data)
}).catch((error) => {
console.log('safe loading');
app.mk.api.v3.music(`/v1/me/library/songs/`, safeparams).then((response) => {
processChunk(response.data)
}).catch((error) => {
console.log('safe loading failed', error)
app.library.songs.downloadState = 2
app.library.backgroundNotification.show = false
})
})
} else {
if (downloaded.next != null) {
app.mk.api.v3.music(downloaded.next, params).then((response) => {
processChunk(response.data)
}).catch((error) => {
console.log('safe loading');
app.mk.api.v3.music(downloaded.next, safeparams).then((response) => {
processChunk(response.data)
}).catch((error) => {
console.log('safe loading failed', error)
app.library.songs.downloadState = 2
app.library.backgroundNotification.show = false
})
})
} else {
console.log("Download next", downloaded.next)
}
}
}
l: app.mklang,
},
onProgress: (data) => {
console.log(`${data.total}/${data.response.data.meta.total}`)
self.library.backgroundNotification.show = true
self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs')
self.library.backgroundNotification.total = data.response.data.meta.total
self.library.backgroundNotification.progress = data.total
},
onSuccess: () => {
function processChunk(response) {
downloaded = response
library = library.concat(downloaded.data)
self.library.backgroundNotification.show = true
self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs')
self.library.backgroundNotification.total = downloaded.meta.total
self.library.backgroundNotification.progress = library.length
}
})
if (downloaded.meta.total == 0) {
self.library.songs.downloadState = 3
return
}
if (typeof downloaded.next == "undefined") {
console.log("downloaded.next is undefined")
self.library.songs.listing = library
self.library.songs.downloadState = 2
self.library.backgroundNotification.show = false
self.searchLibrarySongs()
CiderCache.putCache(cacheId, library)
}
if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") {
console.log(`downloading next chunk - ${library.length} songs so far`)
downloadChunk()
} else {
self.library.songs.listing = library
self.library.songs.downloadState = 2
self.library.backgroundNotification.show = false
self.searchLibrarySongs()
CiderCache.putCache(cacheId, library)
// console.log(library)
}
}
self.library.songs.listing = library
self.library.songs.downloadState = 2
self.library.backgroundNotification.show = false
self.searchLibrarySongs()
CiderCache.putCache(cacheId, library)
console.log("Done!")
downloadChunk()
return
},
// copy the getLibrarySongsFull function except change Songs to Albums
async getLibraryAlbumsFull(force = false, index) {
@ -2239,7 +2197,7 @@ const app = new Vue({
}
if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") {
console.log(`downloading next chunk - ${library.length
} albums so far`)
} albums so far`)
downloadChunk()
} else {
self.library.albums.listing = library
@ -2348,7 +2306,7 @@ const app = new Vue({
}
if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") {
console.log(`downloading next chunk - ${library.length
} artists so far`)
} artists so far`)
downloadChunk()
} else {
self.library.artists.listing = library
@ -2484,13 +2442,13 @@ const app = new Vue({
let self = this
this.mk.api.v3.music(
"/v1/me/library/playlist-folders/", {}, {
fetchOptions: {
method: "POST",
body: JSON.stringify({
attributes: { name: name }
})
}
fetchOptions: {
method: "POST",
body: JSON.stringify({
attributes: { name: name }
})
}
}
).then((res) => {
let playlist = (res.data.data[0])
self.playlists.listing.push({
@ -3055,21 +3013,21 @@ const app = new Vue({
if (ids.length > 0) {
if (app.mk.queue._itemIDs.length > 0) {
app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }).then(function () {
ind += 1;
console.log(ind, Object.keys(itemsToPlay).length)
if (ind >= Object.keys(itemsToPlay).length) {
app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id))
}
ind += 1;
console.log(ind, Object.keys(itemsToPlay).length)
if (ind >= Object.keys(itemsToPlay).length) {
app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id))
}
}
)
} else {
app.mk.setQueue({ [kind + "s"]: itemsToPlay[kind] }).then(function () {
ind += 1;
console.log(ind, Object.keys(itemsToPlay).length)
if (ind >= Object.keys(itemsToPlay).length) {
app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id))
}
ind += 1;
console.log(ind, Object.keys(itemsToPlay).length)
if (ind >= Object.keys(itemsToPlay).length) {
app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id))
}
}
)
}
}
@ -3379,7 +3337,7 @@ const app = new Vue({
if (app.getThemeDirective("lcdArtworkSize") != "") {
artworkSize = app.getThemeDirective("lcdArtworkSize")
} else if (this.cfg.visual.directives.windowLayout == "twopanel") {
artworkSize = 70
artworkSize = 80
}
this.currentArtUrl = '';
this.currentArtUrlRaw = '';
@ -3648,36 +3606,36 @@ const app = new Vue({
app.love(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/heart.svg",
"id": "unlove",
"active": true,
"name": app.getLz('action.unlove'),
"hidden": true,
"action": function () {
app.unlove(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/thumbs-down.svg",
"id": "dislike",
"name": app.getLz('action.dislike'),
"hidden": false,
"disabled": true,
"action": function () {
app.dislike(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/thumbs-down.svg",
"id": "undo_dislike",
"name": app.getLz('action.undoDislike'),
"active": true,
"hidden": true,
"action": function () {
app.unlove(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/heart.svg",
"id": "unlove",
"active": true,
"name": app.getLz('action.unlove'),
"hidden": true,
"action": function () {
app.unlove(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/thumbs-down.svg",
"id": "dislike",
"name": app.getLz('action.dislike'),
"hidden": false,
"disabled": true,
"action": function () {
app.dislike(app.mk.nowPlayingItem)
}
},
{
"icon": "./assets/feather/thumbs-down.svg",
"id": "undo_dislike",
"name": app.getLz('action.undoDislike'),
"active": true,
"hidden": true,
"action": function () {
app.unlove(app.mk.nowPlayingItem)
}
},
],
items: [
{
@ -3868,14 +3826,15 @@ const app = new Vue({
}
},
pinMiniPlayer(status = false) {
if (!status){
if (!this.cfg.visual.miniplayer_top_toggle) {
ipcRenderer.send('windowontop', true)
this.cfg.visual.miniplayer_top_toggle = true;
if (!status) {
if (!this.cfg.visual.miniplayer_top_toggle) {
ipcRenderer.send('windowontop', true)
this.cfg.visual.miniplayer_top_toggle = true;
} else {
ipcRenderer.send('windowontop', false)
this.cfg.visual.miniplayer_top_toggle = false;
}
} else {
ipcRenderer.send('windowontop', false)
this.cfg.visual.miniplayer_top_toggle = false;
}} else {
ipcRenderer.send('windowontop', this.cfg.visual.miniplayer_top_toggle ?? false)
}
},

13152
src/renderer/style.css Normal file

File diff suppressed because it is too large Load diff

View file

@ -558,14 +558,14 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
.app-sidebar-notification {
text-align: center;
font-size: 12px;
min-height: 60px;
min-height: 36px;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid rgb(200 200 200 / 15%);
background: rgb(0 0 0 / 15%);
flex-direction: column;
padding: 20px 0px;
padding: 10px 0px;
&.libraryNotification {
flex-direction: row;

View file

@ -0,0 +1,40 @@
.menu-panel .menu-panel-body {
background-color: rgba(30, 30, 30, 0.45);
backdrop-filter: blur(32px) saturate(180%);
animation: menuIn 0.1s var(--appleEase);
}
@keyframes menuIn {
0% {
opacity: 0;
transform: translateY(-10px) translate3d(0, 0, 0);
background: #1e1e1e;
}
100% {
opacity: 1;
transform: translateY(0);
background: rgba(30, 30, 30, 0.45);
}
}
.cd-mediaitem-square:not(.mediaitem-card) {
transition: transform 0.2s var(--appleEase);
transition-delay: 0.1s;
padding: 12px;
height: 250px;
}
.cd-mediaitem-square:not(.mediaitem-card) .artwork-container,
.cd-mediaitem-square:not(.mediaitem-card) .info-rect {
transition: transform 0.22s var(--appleEase);
transition-delay: 0.05s;
}
.cd-mediaitem-square:not(.mediaitem-card):hover .artwork-container {
transform: scale(1.1);
transition: transform 0.1s var(--appleEase);
transition-delay: 0s;
transform-origin: center;
}
.cd-mediaitem-square:not(.mediaitem-card):hover .info-rect {
z-index: 1;
transition: transform 0.1s var(--appleEase);
transition-delay: 0s;
transform: translateY(8px) translate3d(0, 0, 0);
}

View file

@ -47,7 +47,7 @@
&:hover {
.artwork-container {
transform : scale(1.1) translate3d(0,0,0);
transform : scale(1.1);
transition : transform .1s var(--appleEase);
transition-delay: 0s;
transform-origin: center;

View file

@ -57,6 +57,7 @@
platformInfo: {requiresCDMAttachOnStart: !0, maxSecurityLevel: d, keySystemConfig: h},
appData: {serviceName: "Apple Music"}
}
this.hls.attachMedia(this.$refs.video);
this.hls.loadSource(this.video);
let u = this.hls;
@ -80,8 +81,8 @@
quality = qualities[qualities.length - 1].level
}
}
this.hls.loadLevel = parseInt( quality || 1);},200)
try{
this.hls.loadLevel = parseInt( quality || 1);} catch(e){}},200)
}
})
}

View file

@ -295,11 +295,19 @@
},
changeVibrantBass() {
app.cfg.audio.maikiwiAudio.vibrantBass.multiplier = app.cfg.audio.equalizer.vibrantBass / 10
CiderAudio.hierarchical_loading();
if (app.cfg.audio.equalizer.vibrantBass != 0) {
for (var i = 0; i < 21; i++) {
if (app.cfg.audio.equalizer.vibrantBass !== 0) {
try {
for (var i = 0; i < 21; i++) {
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.maikiwiAudio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10);
}}
}}
catch(e) {
CiderAudio.hierarchical_loading();
}
}
else {
CiderAudio.hierarchical_loading();
}
},
changeMix() {
for (var i = 0; i < 10; i++) {

View file

@ -3,7 +3,7 @@
</script>
<script>
Vue.component('hello-world', {
var hw = Vue.component('hello-world', {
template: '#hello-world',
methods: {
sayHello: function () {

View file

@ -30,10 +30,10 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.5; CiderAudio.hierarchical_loading();">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="ciderPPEStandard">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard')}}
</button>
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.55; CiderAudio.hierarchical_loading();">
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="ciderPPEClarity">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive')}}
</button>
</div>
@ -55,10 +55,10 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.25" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.25; CiderAudio.hierarchical_loading();">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.25" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="analogWarmthSmooth">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth')}}
</button>
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.75" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.75; CiderAudio.hierarchical_loading();">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.75" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="analogWarmthWarm">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm')}}
</button>
</div>
@ -98,6 +98,59 @@
</button>
</div>
</div>
<div style="opacity: 0.5; pointer-events: none">
<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-segment">
Cider Atmosphere Realizer™
<br>
<small>Realizes an entirely different musical atmosphere only to be found on state of the art audio setups.</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn">
Signature
</button>
<button class="md-btn">
Signature+
</button>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext === true">
<div class="md-option-segment">
Cider Origami Vocal Enhance/Remaster™
<br>
<small>Re-textures the vocals by carving out the frequencies and adjusts them to the selected profile.<br>
<b>Modern:</b>
Embracing 21st Century Equipment, this revives old recordings while preserving the Master's original intent.<br>
<b>Intimate:</b>
Bringing the vocals closer to your heart, communicating only the most personal connection between you and the artist.<br>
<b>Breathy:</b>
Giving the perfectionists a new voice, this adds naturality to the vocals by making them more breathy and more natural. <br>
<b>Articulate:</b>
Wrapping every detail of the vocal to your ear, resulting in a more expressive voice.
</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<select class="md-select">
<option value="none">{{$root.getLz('settings.header.visual.windowBackgroundStyle.none')}}
</option>
<option value="modern">
Modern
</option>
<option value="intimate">
Intimate
</option>
<option value="breathy">
Breathy
</option>
<option value="articulate">
Articulate
</option>
</select>
</div>
</div>
</div>
</div>
</script>
@ -125,5 +178,33 @@
}
},
ciderPPEStandard: function () {
app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.5;
let LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33];
for (let i = 0; i < 24; i++) {
CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i];
}
},
ciderPPEClarity: function () {
app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.55;
let c_LLPW_GAIN = [-0.11, 0.27, -0.8, 0.57, 1.84, -0.38, 0.47, -1.56, 0.83, 1.58, -1.79, -0.45, 0.48, 1.22, -1.58, -1.59, -2.03, 2.56, -2.2, -2.48, 4.75, 10.5, 1.43, 3.76];
for (let i = 0; i < 24; i++) {
CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i];
}
},
analogWarmthSmooth: function () {
app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.25
let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86];
for (let i = 0; i < 23; i++) {
CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25;
}
},
analogWarmthWarm: function () {
app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.75
let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86];
for (let i = 0; i < 23; i++) {
CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.75;
}
}
}})
</script>

View file

@ -0,0 +1,22 @@
<script>
Vue.component('plugin-renderer', {
/*html*/
template: `
<component :is="getPage()"></component>
`,
data: function () {
return {
app: this.$root,
}
},
props: {},
mounted() {
},
methods: {
getPage() {
return this.$root.pluginPages.page
}
},
}
);
</script>