summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaindropsSys <raindrops@equestria.dev>2023-11-08 20:59:42 +0100
committerRaindropsSys <raindrops@equestria.dev>2023-11-08 20:59:42 +0100
commitb83a38434156038bc02db74cb93fa8460d0f2f32 (patch)
tree5229c62153ad640f164ff3d4a837bd8345305e02
parent4755889793a36a1f33282ee4759445bef1eb2bb2 (diff)
downloadmist-b83a38434156038bc02db74cb93fa8460d0f2f32.tar.gz
mist-b83a38434156038bc02db74cb93fa8460d0f2f32.tar.bz2
mist-b83a38434156038bc02db74cb93fa8460d0f2f32.zip
Updated 16 files, added 3 files, deleted android/app/release/app-release.apk.zip and renamed android/app/release/app-release.apk (automated)
-rw-r--r--.DS_Storebin18436 -> 18436 bytes
-rw-r--r--android/.idea/deploymentTargetDropDown.xml15
-rw-r--r--android/app/release/app-release.apk.zipbin8301290 -> 0 bytes
-rw-r--r--android/app/release/app-release.apka (renamed from android/app/release/app-release.apk)bin22997059 -> 23034331 bytes
-rw-r--r--android/gradle/libs.versions.toml2
-rw-r--r--android/gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--api/lyrics.php14
-rw-r--r--api/randomFavorites.php8
-rw-r--r--app/.DS_Storebin6148 -> 6148 bytes
-rw-r--r--app/index.php300
-rw-r--r--app/notes/update-1.7.2.php12
-rw-r--r--app/ui/listing.php4
-rw-r--r--app/ui/settings.php7
-rw-r--r--app/ui/update.php2
-rw-r--r--assets/.DS_Storebin10244 -> 10244 bytes
-rw-r--r--assets/icons/notes-bugs.svg1
-rw-r--r--assets/styles.css4
-rw-r--r--oauth/.DS_Storebin6148 -> 6148 bytes
-rw-r--r--oauth/callback-native/index.php4
-rw-r--r--oauth/callback/index.php4
-rw-r--r--version2
21 files changed, 215 insertions, 166 deletions
diff --git a/.DS_Store b/.DS_Store
index 10781c2..ef436c2 100644
--- a/.DS_Store
+++ b/.DS_Store
Binary files differ
diff --git a/android/.idea/deploymentTargetDropDown.xml b/android/.idea/deploymentTargetDropDown.xml
index 462cfeb..0c0c338 100644
--- a/android/.idea/deploymentTargetDropDown.xml
+++ b/android/.idea/deploymentTargetDropDown.xml
@@ -3,20 +3,7 @@
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
- <State>
- <targetSelectedWithDropDown>
- <Target>
- <type value="QUICK_BOOT_TARGET" />
- <deviceKey>
- <Key>
- <type value="VIRTUAL_DEVICE_PATH" />
- <value value="$USER_HOME$/.android/avd/Pixel_4a_API_31.avd" />
- </Key>
- </deviceKey>
- </Target>
- </targetSelectedWithDropDown>
- <timeTargetWasSelectedWithDropDown value="2023-10-31T18:25:15.979904Z" />
- </State>
+ <State />
</entry>
</value>
</component>
diff --git a/android/app/release/app-release.apk.zip b/android/app/release/app-release.apk.zip
deleted file mode 100644
index aa5811b..0000000
--- a/android/app/release/app-release.apk.zip
+++ /dev/null
Binary files differ
diff --git a/android/app/release/app-release.apk b/android/app/release/app-release.apka
index 5dc2a7d..0b3aa69 100644
--- a/android/app/release/app-release.apk
+++ b/android/app/release/app-release.apka
Binary files differ
diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml
index fde57b9..43e3982 100644
--- a/android/gradle/libs.versions.toml
+++ b/android/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.3.0-alpha07"
+agp = "8.3.0-alpha11"
kotlin = "1.9.0"
core-ktx = "1.10.1"
junit = "4.13.2"
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 2ff99f2..b3f0697 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Oct 27 08:52:38 CEST 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-rc-2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/api/lyrics.php b/api/lyrics.php
index 11910d9..d72a17c 100644
--- a/api/lyrics.php
+++ b/api/lyrics.php
@@ -48,9 +48,17 @@ $id = array_values(array_filter(json_decode(file_get_contents("https://api.geniu
$data = [];
exec('bash -c "cd /opt/spotify/spotify-lyrics-api; python genius.py ' . $id . '"', $data);
$data = array_slice(array_map(function ($i) {
- if (str_ends_with($i, "1Embed")) {
- return substr($i, 0, -6);
- } elseif (str_ends_with($i, "2Embed")) {
+ if (str_ends_with($i, "1Embed")
+ || str_ends_with($i, "2Embed")
+ || str_ends_with($i, "3Embed")
+ || str_ends_with($i, "4Embed")
+ || str_ends_with($i, "5Embed")
+ || str_ends_with($i, "6Embed")
+ || str_ends_with($i, "7Embed")
+ || str_ends_with($i, "8Embed")
+ || str_ends_with($i, "9Embed")
+ || str_ends_with($i, "0Embed")
+ ) {
return substr($i, 0, -6);
} elseif (str_ends_with($i, "Embed")) {
return substr($i, 0, -5);
diff --git a/api/randomFavorites.php b/api/randomFavorites.php
new file mode 100644
index 0000000..8994c6f
--- /dev/null
+++ b/api/randomFavorites.php
@@ -0,0 +1,8 @@
+<?php
+
+header("X-Frame-Options: SAMEORIGIN");
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php";
+header("Content-Type: application/json");
+global $favorites;
+shuffle($favorites);
+die(json_encode($favorites)); \ No newline at end of file
diff --git a/app/.DS_Store b/app/.DS_Store
index 1ab3b24..eb8b571 100644
--- a/app/.DS_Store
+++ b/app/.DS_Store
Binary files differ
diff --git a/app/index.php b/app/index.php
index 6de3cdf..b53bb43 100644
--- a/app/index.php
+++ b/app/index.php
@@ -304,7 +304,10 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
}
if (window.discordRichPresenceData !== null) window.discordRichPresenceData = {
- largeImageKey: "logo"
+ largeImageKey: "logo",
+ buttons : [
+ { label: 'View profile', url: 'https://mist.equestria.horse/profile/?/<?= $_PROFILE["id"] ?>' }
+ ]
};
document.title = "Mist";
@@ -388,7 +391,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
function initializePlayerDocument() {
playerDocument.getElementById("player-audio").ontimeupdate = playerDocument.getElementById("player-audio").onchange = playerDocument.getElementById("player-audio").onunload = playerDocument.getElementById("player-audio").onstop = () => {
- updateDisplay();
+ updateDisplay(false);
if (playingStella) {
if (playerDocument.getElementById("player-audio").paused) {
@@ -466,7 +469,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.preloadedGainsBoosted2[window.currentSongID].connect(window.currentNormalizationContext.destination);
}
- updateDisplay();
+ updateDisplay(false);
}
window.needsDurationChange = true;
@@ -481,14 +484,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
playerDocument.getElementById("player-audio").onpause = () => {
if (window.preloadedGains[window.currentSongID]) {
try {
- window.currentNormalizationSource.disconnect(window.preloadedGains[window.currentSongID]);
+ window.currentNormalizationSource.disconnect();
if (playingStella) {
- window.currentNormalizationSource2.disconnect(window.preloadedGainsBoosted1[window.currentSongID]);
- window.currentNormalizationSource3.disconnect(window.preloadedGainsBoosted2[window.currentSongID]);
+ window.currentNormalizationSource2.disconnect();
+ window.currentNormalizationSource3.disconnect();
}
- window.preloadedGains[window.currentSongID].disconnect(window.currentNormalizationContext.destination);
+ window.preloadedGains[window.currentSongID].disconnect();
} catch (e) {
console.error(e);
}
@@ -501,16 +504,16 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.currentNormalizationSource5
]) {
try {
- player.disconnect(window.preloadedGainsBoosted1[window.currentSongID]);
- window.preloadedGainsBoosted1[window.currentSongID].disconnect(window.currentNormalizationContext.destination);
+ player.disconnect();
+ window.preloadedGainsBoosted1[window.currentSongID].disconnect();
} catch (e) {
console.error(e);
}
}
try {
- window.currentNormalizationSource1.disconnect(window.preloadedGainsBoosted2[window.currentSongID]);
- window.preloadedGainsBoosted2[window.currentSongID].disconnect(window.currentNormalizationContext.destination);
+ window.currentNormalizationSource1.disconnect();
+ window.preloadedGainsBoosted2[window.currentSongID].disconnect();
} catch (e) {
console.error(e);
}
@@ -522,7 +525,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
return;
}
- updateDisplay();
+ updateDisplay(false);
updateAndroidNotification();
}
}
@@ -535,67 +538,53 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
}
}
- function updateDisplay() {
- if (playerDocument.getElementById("player-audio").paused) {
- document.title = "Mist";
- } else if (currentSong) {
- document.title = currentSong.artist + " — " + currentSong.title;
- } else {
- document.title = "Mist";
- }
-
- if (window.discordRichPresenceData !== null && currentSong) window.discordRichPresenceData = {
- largeImageKey: "https://" + location.hostname + "/albumart.php?i=" + currentSongID,
- state: currentSong.title,
- details: currentSong.artist,
- smallImageKey: "logo",
- smallImageText: "Listening on Mist",
- largeImageText: currentSong.album ?? currentSong.artist
- };
-
- playerDocument.getElementById("info").style.display = "grid";
- playerDocument.getElementById("cover").style.display = "none";
-
- if ('mediaSession' in document.getElementById("player").contentWindow.navigator) {
- document.getElementById("player").contentWindow.navigator.mediaSession.playbackState = playerDocument.getElementById("player-audio").paused ? "paused" : "playing";
- let state = {
- duration: isFinite(playerDocument.getElementById("player-audio").duration) ? playerDocument.getElementById("player-audio").duration : 0,
- position: playerDocument.getElementById("player-audio").currentTime,
- playbackRate: 1
+ function updateDisplay(initial) {
+ if (initial) {
+ if (playerDocument.getElementById("player-audio").paused) {
+ document.title = "Mist";
+ } else if (currentSong) {
+ document.title = currentSong.artist + " — " + currentSong.title;
+ } else {
+ document.title = "Mist";
}
- document.getElementById("player").contentWindow.navigator.mediaSession.setPositionState(state);
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("play", () => {
- playPause();
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("pause", () => {
- playPause();
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("stop", () => {
- stop();
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekbackward", (e) => {
- let time = e.seekOffset ?? 10;
+ if (window.discordRichPresenceData !== null && currentSong) window.discordRichPresenceData = {
+ largeImageKey: "https://" + location.hostname + "/albumart.php?i=" + currentSongID,
+ buttons : [
+ { label: 'View profile', url: 'https://mist.equestria.horse/profile/?/<?= $_PROFILE["id"] ?>' }
+ ],
+ state: currentSong.title,
+ details: currentSong.artist,
+ smallImageKey: "logo",
+ smallImageText: "Listening on Mist",
+ largeImageText: currentSong.album ?? currentSong.artist
+ };
+
+ playerDocument.getElementById("info").style.display = "grid";
+ playerDocument.getElementById("cover").style.display = "none";
+ }
- if (playerDocument.getElementById("player-audio").currentTime >= time) {
- playerDocument.getElementById("player-audio").currentTime -= time;
- } else {
- playerDocument.getElementById("player-audio").currentTime = 0;
- }
+ if ('mediaSession' in document.getElementById("player").contentWindow.navigator) {
+ if (initial) {
+ document.getElementById("player").contentWindow.navigator.mediaSession.playbackState = playerDocument.getElementById("player-audio").paused ? "paused" : "playing";
- if (playingStella) {
- playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
- }
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekforward", (e) => {
- let time = e.seekOffset ?? 10;
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("play", () => {
+ playPause();
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("pause", () => {
+ playPause();
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("stop", () => {
+ stop();
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekbackward", (e) => {
+ let time = e.seekOffset ?? 10;
- if (playerDocument.getElementById("player-audio").currentTime + time < playerDocument.getElementById("player-audio").duration) {
- playerDocument.getElementById("player-audio").currentTime += time;
+ if (playerDocument.getElementById("player-audio").currentTime >= time) {
+ playerDocument.getElementById("player-audio").currentTime -= time;
+ } else {
+ playerDocument.getElementById("player-audio").currentTime = 0;
+ }
if (playingStella) {
playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
@@ -604,57 +593,99 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
}
- } else {
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekforward", (e) => {
+ let time = e.seekOffset ?? 10;
+
+ if (playerDocument.getElementById("player-audio").currentTime + time < playerDocument.getElementById("player-audio").duration) {
+ playerDocument.getElementById("player-audio").currentTime += time;
+
+ if (playingStella) {
+ playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ }
+ } else {
+ next();
+ }
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekto", (e) => {
+ if (e.seekTime) {
+ playerDocument.getElementById("player-audio").currentTime = e.seekTime;
+
+ if (playingStella) {
+ playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ }
+ }
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("previoustrack", () => {
+ if (playlist[currentPlaylistPosition - 1]) {
+ previous();
+ } else {
+ playerDocument.getElementById("player-audio").currentTime = 0;
+
+ if (playingStella) {
+ playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
+ }
+ }
+ });
+ document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("nexttrack", () => {
next();
- }
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("seekto", (e) => {
- if (e.seekTime) {
- playerDocument.getElementById("player-audio").currentTime = e.seekTime;
+ });
+ }
- if (playingStella) {
- playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
- }
- }
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("previoustrack", () => {
- if (playlist[currentPlaylistPosition - 1]) {
- previous();
- } else {
- playerDocument.getElementById("player-audio").currentTime = 0;
+ let state = {
+ duration: isFinite(playerDocument.getElementById("player-audio").duration) ? playerDocument.getElementById("player-audio").duration : 0,
+ position: playerDocument.getElementById("player-audio").currentTime,
+ playbackRate: 1
+ }
+ document.getElementById("player").contentWindow.navigator.mediaSession.setPositionState(state);
+ }
- if (playingStella) {
- playerDocument.getElementById("player-audio-stella-side1").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side2").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side3").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side4").currentTime = playerDocument.getElementById("player-audio").currentTime;
- playerDocument.getElementById("player-audio-stella-side5").currentTime = playerDocument.getElementById("player-audio").currentTime;
- }
- }
- });
- document.getElementById("player").contentWindow.navigator.mediaSession.setActionHandler("nexttrack", () => {
- next();
- });
+ if (initial) {
+ if (currentPlaylistPosition === 0) {
+ playerDocument.getElementById("btn-previous").classList.add("disabled");
+ playerDocumentMobile.getElementById("btn-previous").classList.add("disabled");
+ } else {
+ playerDocument.getElementById("btn-previous").classList.remove("disabled");
+ playerDocumentMobile.getElementById("btn-previous").classList.remove("disabled");
+ }
+
+ if (currentPlaylistPosition === playlist.length - 1) {
+ playerDocument.getElementById("btn-next").classList.add("disabled");
+ playerDocumentMobile.getElementById("btn-next").classList.add("disabled");
+ } else {
+ playerDocument.getElementById("btn-next").classList.remove("disabled");
+ playerDocumentMobile.getElementById("btn-next").classList.remove("disabled");
+ }
}
- if (currentPlaylistPosition === 0) {
- playerDocument.getElementById("btn-previous").classList.add("disabled");
- playerDocumentMobile.getElementById("btn-previous").classList.add("disabled");
- } else {
- playerDocument.getElementById("btn-previous").classList.remove("disabled");
- playerDocumentMobile.getElementById("btn-previous").classList.remove("disabled");
+ if (initial) {
+ if (window.currentSong) {
+ playerDocument.getElementById("title").innerText = playerDocumentMobile.getElementById("title").innerText = window.currentSong.title;
+ playerDocument.getElementById("artist").innerText = playerDocumentMobile.getElementById("artist").innerText = window.currentSong.artist;
+ playerDocument.getElementById("album").innerText = playerDocumentMobile.getElementById("album").innerText = window.currentSong.album;
+ playerDocument.getElementById("album-art").src = playerDocumentMobile.getElementById("album-art").src = "/assets/content/" + window.currentSongID + ".jpg";
+ playerDocumentMobile.getElementById("album-art-bg").style.backgroundImage = "url('/assets/content/" + window.currentSongID + ".jpg')";
+ }
}
- if (currentPlaylistPosition === playlist.length - 1) {
- playerDocument.getElementById("btn-next").classList.add("disabled");
- playerDocumentMobile.getElementById("btn-next").classList.add("disabled");
+ if (document.hidden) return;
+
+ if (isFinite(playerDocument.getElementById("player-audio").duration)) {
+ playerDocument.getElementById("seekbar").style.width = playerDocumentMobile.getElementById("seekbar").style.width = ((playerDocument.getElementById("player-audio").currentTime / playerDocument.getElementById("player-audio").duration) * 100) + "%";
} else {
- playerDocument.getElementById("btn-next").classList.remove("disabled");
- playerDocumentMobile.getElementById("btn-next").classList.remove("disabled");
+ playerDocument.getElementById("seekbar").style.width = playerDocumentMobile.getElementById("seekbar").style.width = "0";
}
if (isFinite(playerDocument.getElementById("player-audio").duration)) {
@@ -670,20 +701,6 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
} else {
playerDocument.getElementById("btn-play-icon").src = playerDocumentMobile.getElementById("btn-play-icon").src = "/assets/icons/pause.svg";
}
-
- if (window.currentSong) {
- playerDocument.getElementById("title").innerText = playerDocumentMobile.getElementById("title").innerText = window.currentSong.title;
- playerDocument.getElementById("artist").innerText = playerDocumentMobile.getElementById("artist").innerText = window.currentSong.artist;
- playerDocument.getElementById("album").innerText = playerDocumentMobile.getElementById("album").innerText = window.currentSong.album;
- playerDocument.getElementById("album-art").src = playerDocumentMobile.getElementById("album-art").src = "/assets/content/" + window.currentSongID + ".jpg";
- playerDocumentMobile.getElementById("album-art-bg").style.backgroundImage = "url('/assets/content/" + window.currentSongID + ".jpg')";
- }
-
- if (isFinite(playerDocument.getElementById("player-audio").duration)) {
- playerDocument.getElementById("seekbar").style.width = playerDocumentMobile.getElementById("seekbar").style.width = ((playerDocument.getElementById("player-audio").currentTime / playerDocument.getElementById("player-audio").duration) * 100) + "%";
- } else {
- playerDocument.getElementById("seekbar").style.width = playerDocumentMobile.getElementById("seekbar").style.width = "0";
- }
}
window.playPause = () => {
@@ -755,7 +772,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.updateRepeat = () => {
if (window.currentSong) {
- updateDisplay();
+ updateDisplay(false);
}
if (window.repeat) {
@@ -792,7 +809,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.updateShuffle = () => {
if (window.currentSong) {
- updateDisplay();
+ updateDisplay(false);
}
if (window.shuffle) {
@@ -815,14 +832,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
}
}
- window.shuffleList = (playlistID) => {
+ window.shuffleList = async (playlistID) => {
window.shuffle = true;
playerDocument.getElementById("btn-shuffle-icon").src = playerDocumentMobile.getElementById("btn-shuffle-icon").src = "/assets/icons/shuffle-on.svg";
if (playlistID) {
if (playlistID === "favorites") {
window.currentPlaylistID = playlistID;
- window.playlist = favorites;
+ window.playlist = await (await fetch("/api/randomFavorites.php")).json();
} else if (playlistID.startsWith("album:")) {
window.currentPlaylistID = playlistID;
window.playlist = albums[playlistID.substring(6)].tracks;
@@ -834,7 +851,10 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.playlist = [];
}
- window.playlist = shuffleArray(window.playlist);
+ if (playlistID && playlistID !== "favorites") {
+ window.playlist = shuffleArray(window.playlist);
+ }
+
window.playSong(window.playlist[0], "keep");
}
@@ -866,6 +886,11 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
}
playerDocument.getElementById("player-audio").pause();
+ playerDocument.getElementById("player-audio-stella-side1").pause();
+ playerDocument.getElementById("player-audio-stella-side2").pause();
+ playerDocument.getElementById("player-audio-stella-side3").pause();
+ playerDocument.getElementById("player-audio-stella-side4").pause();
+ playerDocument.getElementById("player-audio-stella-side5").pause();
playerDocument.getElementById("player-audio").currentTime = 0;
window.playingStella = false;
@@ -892,7 +917,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.currentSong = songs[id];
window.currentSongID = id;
- updateDisplay();
+ updateDisplay(true);
updateAndroidNotification();
if (document.getElementById("ui").contentWindow.refreshQueue) document.getElementById("ui").contentWindow.refreshQueue();
@@ -904,9 +929,9 @@ 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);
- window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .05);
- window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.other.buffer, .1);
+ window.preloadedGains[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, 0);
+ window.preloadedGainsBoosted1[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .05);
+ window.preloadedGainsBoosted2[id] = await normalizeAudio(window.preloaded[id].stems.vocals.buffer, .1);
} else {
if (!window.preloaded[id]) {
window.buffering = true;
@@ -929,6 +954,8 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
preloadMore();
window.needsDurationChange = true;
+ if (window.currentSongID !== id) return;
+
if (!stellaCompatible) {
if (!window.preloadedURLs[id]) {
window.preloadedURLs[id] = localStorage.getItem("data-saving") ? URL.createObjectURL(window.preloadedBlobs[id]) : URL.createObjectURL(window.preloadedBlobs[id]);
@@ -1098,7 +1125,10 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFI
window.discordRichPresenceData = null;
} else {
window.discordRichPresenceData = {
- largeImageKey: "logo"
+ largeImageKey: "logo",
+ buttons : [
+ { label: 'View profile', url: 'https://mist.equestria.horse/profile/?/<?= $_PROFILE["id"] ?>' }
+ ]
};
}
</script>
diff --git a/app/notes/update-1.7.2.php b/app/notes/update-1.7.2.php
new file mode 100644
index 0000000..ee9d110
--- /dev/null
+++ b/app/notes/update-1.7.2.php
@@ -0,0 +1,12 @@
+<?php if (!isset($releaseNotes)) die(); ?>
+<h2 style="margin-top: 30px;">What's new in Mist?</h2>
+
+<div style="text-align: left; margin-top: 50px;">
+ <div style="display: grid; grid-template-columns: 48px 1fr; grid-gap: 20px; margin-bottom: 20px;">
+ <img src="/assets/icons/notes-bugs.svg" style="width: 48px;" class="icon" alt="">
+ <div>
+ <div><b>Application improvements</b></div>
+ <div>We have caught and fixed numerous issues you might have encountered with the app to improve your experience.</div>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/ui/listing.php b/app/ui/listing.php
index 510fa58..d29b355 100644
--- a/app/ui/listing.php
+++ b/app/ui/listing.php
@@ -116,8 +116,8 @@ if (!$presetList) {
</div>
</div>
<div id="album-info-buttons">
- <a class="btn btn-primary <?= count(array_keys($list)) <= 0 ? "disabled" : "" ?>" onclick="window.parent.playSong('<?= array_keys($list)[0] ?? '' ?>', 'favorites');" style="width: 100px;">Play</a>
- <a class="btn btn-outline-primary <?= count(array_keys($list)) <= 0 ? "disabled" : "" ?>" style="width: 100px;" onclick="window.parent.shuffleList('favorites');">Shuffle</a>
+ <a class="btn btn-primary <?= count(array_keys($list)) <= 0 || $userId !== $_PROFILE["id"] ? "disabled" : "" ?>" onclick="window.parent.playSong('<?= array_keys($list)[0] ?? '' ?>', 'favorites');" style="width: 100px;">Play</a>
+ <a class="btn btn-outline-primary <?= count(array_keys($list)) <= 0 || $userId !== $_PROFILE["id"] ? "disabled" : "" ?>" style="width: 100px;" onclick="window.parent.shuffleList('favorites');">Shuffle</a>
</div>
</div>
</div>
diff --git a/app/ui/settings.php b/app/ui/settings.php
index 3ef243d..fe421a0 100644
--- a/app/ui/settings.php
+++ b/app/ui/settings.php
@@ -110,7 +110,10 @@
window.parent.discordRichPresenceData = null;
} else {
window.parent.discordRichPresenceData = {
- largeImageKey: "logo"
+ largeImageKey: "logo",
+ buttons : [
+ { label: 'View profile', url: 'https://mist.equestria.horse/profile/?/<?= $_PROFILE["id"] ?>' }
+ ]
};
}
}
@@ -239,7 +242,6 @@
<img class="icon" src="/assets/logo-transparent.svg" style="vertical-align: middle; filter: grayscale(1) invert(1); width: 32px; height: 32px;" alt="">
<span style="vertical-align: middle;">Mist version <?= str_replace("|", " ", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version")) ?> (build <?= trim(file_exists("/opt/spotify/build.txt") ? file_get_contents("/opt/spotify/build.txt") : "trunk") ?>)<span id="copyright-separator-desktop"> · </span><span id="copyright-separator-mobile"><br></span>© <?= date('Y') ?> Equestria.dev</span>
</div>
- <br><br>
<style>
@media (min-width: 768px) {
#copyright-separator-mobile {
@@ -254,6 +256,7 @@
}
</style>
<?php endif; global $privacy; global $profile; ?>
+ <br><br>
<script>
async function saveCustom() {
document.getElementById("banner").disabled = true;
diff --git a/app/ui/update.php b/app/ui/update.php
index a5776f3..3915992 100644
--- a/app/ui/update.php
+++ b/app/ui/update.php
@@ -25,7 +25,7 @@
<script src="/assets/js/common.js"></script>
<div style="padding: 1rem;">
<div style="text-align: center;">
- <?php $releaseNotes = true; require_once "../notes/update-1.0.0.php" ?>
+ <?php $releaseNotes = true; require_once "../notes/update-1.7.2.php" ?>
<a style="margin-top: 50px; margin-bottom: 30px; display: block;" class="btn btn-primary" onclick="localStorage.setItem('lastUpdate', '<?= trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version")) ?>'); window.parent._modal.hide();">Continue</a>
</div>
diff --git a/assets/.DS_Store b/assets/.DS_Store
index 45c9d8c..1f9a269 100644
--- a/assets/.DS_Store
+++ b/assets/.DS_Store
Binary files differ
diff --git a/assets/icons/notes-bugs.svg b/assets/icons/notes-bugs.svg
new file mode 100644
index 0000000..ad79b28
--- /dev/null
+++ b/assets/icons/notes-bugs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M480.248-194Q548-194 596-242.175T644-358v-162q0-67.65-48.248-115.825t-116-48.175Q412-684 364-635.825T316-520v162q0 67.65 48.248 115.825t116 48.175ZM406-330h148v-54H406v54Zm0-164h148v-54H406v54Zm74 55Zm0 299q-58 0-108-28.5T292-248H180v-54h92q-9-26-9.5-54.5T262-412h-82v-54h82q0-28-.75-55.5T272-574h-92v-54h112q14-27 37-47.5t49-34.5l-74-72 38-36 86 86q26-10 53-10t53 10l86-86 36 36-72 72q26 14 47.5 35t36.5 47h112v54h-92q11.5 25 10.75 52.5T698-466h82v54h-82q0 27-.5 55.5T688-302h92v54H668q-30 51-80 79.5T480-140Z"/></svg> \ No newline at end of file
diff --git a/assets/styles.css b/assets/styles.css
index 890a13e..f661cdd 100644
--- a/assets/styles.css
+++ b/assets/styles.css
@@ -447,10 +447,6 @@ body.native #lyrics-page {
}
}
-#badges {
- -webkit-app-region: drag;
-}
-
.dropdown-item:active img {
filter: invert(1);
}
diff --git a/oauth/.DS_Store b/oauth/.DS_Store
index 1333ff9..d23a8fa 100644
--- a/oauth/.DS_Store
+++ b/oauth/.DS_Store
Binary files differ
diff --git a/oauth/callback-native/index.php b/oauth/callback-native/index.php
index c289957..5095734 100644
--- a/oauth/callback-native/index.php
+++ b/oauth/callback-native/index.php
@@ -38,7 +38,9 @@ if (isset($result["access_token"])) {
$result = $result_orig = curl_exec($crl);
$result = json_decode($result, true);
- if (!in_array($result["id"], $app["allowed"])) {
+ $isAllowed = in_array("5fe2cdf1-cff8-470e-a54a-ad1c713b0387", array_map(function ($i) { return $i["id"]; }, $result["transitiveGroups"]));
+
+ if (!$isAllowed) {
header("HTTP/1.1 403 Forbidden");
die("Not allowed to log in to this application. This will be reported.");
}
diff --git a/oauth/callback/index.php b/oauth/callback/index.php
index bbb3322..f57e124 100644
--- a/oauth/callback/index.php
+++ b/oauth/callback/index.php
@@ -38,7 +38,9 @@ if (isset($result["access_token"])) {
$result = $result_orig = curl_exec($crl);
$result = json_decode($result, true);
- if (!in_array($result["id"], $app["allowed"])) {
+ $isAllowed = in_array("5fe2cdf1-cff8-470e-a54a-ad1c713b0387", array_map(function ($i) { return $i["id"]; }, $result["transitiveGroups"]));
+
+ if (!$isAllowed) {
header("HTTP/1.1 403 Forbidden");
die("Not allowed to log in to this application. This will be reported.");
}
diff --git a/version b/version
index 9dbb0c0..bbf649f 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-1.7.0 \ No newline at end of file
+1.7.3 \ No newline at end of file