From 417c403ba8e46dd97ffe656fc8761cb8c6380652 Mon Sep 17 00:00:00 2001 From: RaindropsSys Date: Sun, 26 Nov 2023 17:10:11 +0100 Subject: Updated 13 files and added app/studio.php (automated) --- .DS_Store | Bin 20484 -> 20484 bytes app/.DS_Store | Bin 6148 -> 6148 bytes app/index.php | 68 ++++++-- app/studio.php | 445 +++++++++++++++++++++++++++++++++++++++++++++++++++ app/ui/player.php | 6 +- app/ui/queue.php | 11 +- app/ui/settings.php | 7 +- assets/.DS_Store | Bin 10244 -> 10244 bytes assets/js/common.js | 2 +- build.sh | 2 +- desktop/main.js | 48 +++++- desktop/preload.js | 1 + includes/session.php | 1 + version | 2 +- 14 files changed, 573 insertions(+), 20 deletions(-) create mode 100644 app/studio.php diff --git a/.DS_Store b/.DS_Store index dc47f7c..0cb036b 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app/.DS_Store b/app/.DS_Store index b01224a..60beba8 100644 Binary files a/app/.DS_Store and b/app/.DS_Store differ diff --git a/app/index.php b/app/index.php index 31ca9aa..82b4791 100644 --- a/app/index.php +++ b/app/index.php @@ -553,7 +553,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI } } - function updateDisplay(initial) { + window.updateDisplay = (initial) => { if (initial) { if (playerDocument.getElementById("player-audio").paused) { document.title = "Mist"; @@ -740,6 +740,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI window.library = await (await fetch("/api/getLibrary.php?_=" + [...crypto.getRandomValues(new Uint8Array(40))].map(m=>('0'+m.toString(16)).slice(-2)).join(''))).json(); } + window.redownloadMedia = async () => { + document.getElementById("loading-text").innerText = "Downloading list of songs..."; + window.songs = await (await fetch("/assets/content/songs.json?_=" + [...crypto.getRandomValues(new Uint8Array(40))].map(m=>('0'+m.toString(16)).slice(-2)).join(''))).json(); + + document.getElementById("loading-text").innerText = "Downloading list of albums..."; + window.albums = await (await fetch("/assets/content/albums.json?_=" + [...crypto.getRandomValues(new Uint8Array(40))].map(m=>('0'+m.toString(16)).slice(-2)).join(''))).json(); + } + (async () => { document.getElementById("loading-text").innerText = "Downloading list of songs..."; window.songs = await (await fetch("/assets/content/songs.json?_=" + [...crypto.getRandomValues(new Uint8Array(40))].map(m=>('0'+m.toString(16)).slice(-2)).join(''))).json(); @@ -943,10 +951,12 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI } if (stellaCompatible) { - window.preloaded[id] = await Stella.build("/assets/content/" + id + ".stella"); - window.preloadedGains[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, 0, true); - window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .05, true); - window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .1, true); + if (!window.preloaded[id]) { + window.preloaded[id] = await Stella.build("/assets/content/" + id + ".stella"); + window.preloadedGains[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, 0, true); + window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .05, true); + window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .1, true); + } } else { if (!window.preloaded[id]) { window.buffering = true; @@ -971,9 +981,45 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI if (window.currentSongID !== id) return; + try { + window.currentNormalizationSource.disconnect(); + + if (playingStella) { + window.currentNormalizationSource2.disconnect(); + window.currentNormalizationSource3.disconnect(); + } + + window.preloadedGains[window.currentSongID].disconnect(); + } catch (e) { + console.error(e); + } + + if (playingStella) { + for (let player of [ + window.currentNormalizationSource2, + window.currentNormalizationSource3, + window.currentNormalizationSource4, + window.currentNormalizationSource5 + ]) { + try { + player.disconnect(); + window.preloadedGainsBoosted1[window.currentSongID].disconnect(); + } catch (e) { + console.error(e); + } + } + + try { + window.currentNormalizationSource1.disconnect(); + window.preloadedGainsBoosted2[window.currentSongID].disconnect(); + } catch (e) { + console.error(e); + } + } + if (!stellaCompatible) { if (!window.preloadedURLs[id]) { - window.preloadedURLs[id] = localStorage.getItem("data-saving") ? URL.createObjectURL(window.preloadedBlobs[id]) : URL.createObjectURL(window.preloadedBlobs[id]); + window.preloadedURLs[id] = URL.createObjectURL(window.preloadedBlobs[id]); } } else { window.playingStella = true; @@ -1079,10 +1125,12 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI } if (stellaCompatible) { - window.preloaded[id] = await Stella.build("/assets/content/" + id + ".stella"); - window.preloadedGains[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, 0, true); - window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .05, true); - window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .1, true); + if (!window.preloaded[id]) { + window.preloaded[id] = await Stella.build("/assets/content/" + id + ".stella"); + window.preloadedGains[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, 0, true); + window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .05, true); + window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .1, true); + } } else { if (!window.preloaded[id]) { if (localStorage.getItem("data-saving") === "true") { diff --git a/app/studio.php b/app/studio.php new file mode 100644 index 0000000..4f002f7 --- /dev/null +++ b/app/studio.php @@ -0,0 +1,445 @@ + + + + + + + + + + Mist Studio + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/ui/player.php b/app/ui/player.php index 47526f5..3fcdec1 100644 --- a/app/ui/player.php +++ b/app/ui/player.php @@ -168,7 +168,11 @@ window.parent.redoNavigation("home"); } - function openAlbum() { + async function openAlbum() { + if (Object.entries(window.parent.albums).filter(i => i[1].tracks.includes(window.parent.currentSongID))) { + await window.parent.redownloadMedia(); + } + window.parent.location.hash = "#/albums/" + Object.entries(window.parent.albums).filter(i => i[1].tracks.includes(window.parent.currentSongID))[0][0]; window.parent.redoNavigation("albums"); } diff --git a/app/ui/queue.php b/app/ui/queue.php index 81a7079..7d38625 100644 --- a/app/ui/queue.php +++ b/app/ui/queue.php @@ -25,7 +25,10 @@

-

Queue

+

+ Queue + Clear queue +

diff --git a/assets/.DS_Store b/assets/.DS_Store index b5223c8..b8d5529 100644 Binary files a/assets/.DS_Store and b/assets/.DS_Store differ diff --git a/assets/js/common.js b/assets/js/common.js index 6ccd25c..0762d07 100644 --- a/assets/js/common.js +++ b/assets/js/common.js @@ -18,5 +18,5 @@ document.head.append(style); if (navigator.userAgent.includes("MistNative/darwin")) { if (document.getElementById("native-css")) document.getElementById("native-css").disabled = false; - document.body.classList.remove("crossplatform"); + if (document.body) document.body.classList.remove("crossplatform"); } \ No newline at end of file diff --git a/build.sh b/build.sh index 79c358a..39bac3f 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash cd desktop -#npx electron-packager . Mist --asar --overwrite --platform=darwin --arch=x64 --icon=../assets/logo.icns --out=../build +npx electron-packager . Mist --asar --overwrite --platform=darwin --arch=x64 --icon=../assets/logo.icns --out=../build npx electron-packager . Mist --asar --overwrite --platform=darwin --arch=arm64 --icon=../assets/logo.icns --out=../build #npx electron-packager . Mist --asar --overwrite --platform=linux --arch=x64 --icon=../assets/logo-display.png --out=../build #npx electron-packager . Mist --asar --overwrite --platform=linux --arch=arm64 --icon=../assets/logo-display.png --out=../build diff --git a/desktop/main.js b/desktop/main.js index 1d0b322..02f153d 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -229,7 +229,6 @@ function getCopyrightYear() { } } -app.setName("Mist"); app.setAsDefaultProtocolClient("mist"); app.setAboutPanelOptions({ applicationName: "Mist", @@ -239,10 +238,12 @@ app.setAboutPanelOptions({ website: "https://mist.equestria.horse/app/" }); -const gotTheLock = app.requestSingleInstanceLock(); +if (app.getName() !== "Electron") { + const gotTheLock = app.requestSingleInstanceLock(); -if (!gotTheLock) { - app.quit(); + if (!gotTheLock) { + app.quit(); + } } let loggedIn = false; @@ -337,6 +338,40 @@ const createWindow = () => { }); } +const studioMode = () => { + if (global.studioWindow) return; + + global.studioWindow = new BrowserWindow({ + width: require('electron').screen.getPrimaryDisplay().workAreaSize.width, + minWidth: 1280, + height: require('electron').screen.getPrimaryDisplay().workAreaSize.height, + minHeight: 720, + autoHideMenuBar: true, + title: "Mist Studio", + backgroundColor: "#111111", + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + scrollBounce: true, + enableWebSQL: false + } + }); + + updateMenu(studioWindow); + + studioWindow.webContents.setUserAgent(studioWindow.webContents.getUserAgent() + " MistNative/" + process.platform); + studioWindow.loadURL("https://mist.equestria.horse/app/studio.php"); + + studioWindow.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url); + return { action: "deny" }; + }); + + studioWindow.on('close', () => { + global.studioWindow = null; + }); +} + ipcMain.handle('auth', () => { shell.openExternal("https://mist.equestria.horse/oauth/native/"); }); @@ -345,6 +380,11 @@ ipcMain.handle('about', () => { app.showAboutPanel(); }); +ipcMain.handle('studio', () => { + studioMode(); + mainWindow.close(); +}); + ipcMain.handle('userInfo', (e, userInfo) => { global.userInfo = JSON.parse(userInfo); updateMenu(mainWindow); diff --git a/desktop/preload.js b/desktop/preload.js index 2b37f60..4c85000 100644 --- a/desktop/preload.js +++ b/desktop/preload.js @@ -6,4 +6,5 @@ contextBridge.exposeInMainWorld('MistNative', { about: () => ipcRenderer.invoke('about'), notification: (song, img) => ipcRenderer.invoke('notification', song, img), userInfo: (ui) => ipcRenderer.invoke('userInfo', ui), + studio: () => ipcRenderer.invoke('studio') }) \ No newline at end of file diff --git a/includes/session.php b/includes/session.php index ee6cd85..3936a20 100644 --- a/includes/session.php +++ b/includes/session.php @@ -136,6 +136,7 @@ function displayList($list, $hasAlbum = false) { global $albums; global $favorit window.parent.playSong(id); } else { window.parent.playlist.push(id); + window.parent.updateDisplay(true); } } diff --git a/version b/version index 0bfbd57..7b378be 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.8.2 \ No newline at end of file +1.8.4 \ No newline at end of file -- cgit