diff --git a/assets/player.js b/assets/player.js
index 4fcc4d4..28727f1 100644
--- a/assets/player.js
+++ b/assets/player.js
@@ -1,64 +1,111 @@
-
-
// ==UserScript==
-// @name Breizh autoplay
-// @version 1
-// @grant none
-// @include https://fichiers.breizh.pm/*
+// @name Breizh autoplay
+// @namespace http://tampermonkey.net/
+// @version 2024-04-10
+// @description Add an audio player for audio files on fichiers.breizh.pm
+// @author Eldeberen
+// @match https://fichiers.breizh.pm/*
+// @grant none
// ==/UserScript==
+
+// Add current song to history
+function ap_add2history(event) {
+ ap_history.push(event.target);
+}
+
+// Play the next track
function ap_next(event) {
- let item = event.target;
- let autoplay = document.getElementById("ap-autoplay").checked;
+ let item = ap_history.at(-1);
+ let autoplay = document.getElementById("ap-player").open;
let random = document.getElementById("ap-random").checked;
let loop = document.getElementById("ap-loop").checked;
- let currentId = medias.indexOf(item);
+ let currentId = ap_medias.indexOf(item);
let nextId = -1;
-
+
// If no autoplay, exit
if(!autoplay) return;
-
+
// If function applied to something that is not an audio song, exit
// Note that this should not happen in a regular use
if(currentId == -1) return;
-
+
+ // Make sure to pause the current track
+ item.pause();
+
// If random, pick a random song in the list
// Else pick the next one
if(random) {
- nextId = Math.floor(Math.random() * medias.length);
+ nextId = Math.floor(Math.random() * ap_medias.length);
} else {
nextId = currentId + 1;
}
-
+
// If looping, stay in the range
if(loop) {
- nextId %= medias.length;
+ nextId %= ap_medias.length;
}
-
+
// If the next song is out, exit
- if(nextId == medias.length) return;
-
+ if(nextId == ap_medias.length) return;
+
// Finally, set the volume back and jump to the selected song
- medias[nextId].volume = item.volume;
- medias[nextId].play();
+ ap_medias[nextId].volume = item.volume;
+ ap_medias[nextId].play();
}
+// Play/pause current
+function ap_playpause() {
+ if(ap_paused == null) {
+ ap_paused = ap_history.pop();
+ ap_paused.pause();
+ } else {
+ ap_paused.play();
+ ap_paused = null;
+ }
+}
+
+// Play previous song
+function ap_prev() {
+ let current = ap_history.pop();
+ let prev = ap_history.pop();
+ current.pause();
+ prev.currentTime = 0;
+ prev.play();
+}
// Get all audio medias on the page
-let medias = Array.from(document.querySelectorAll("audio"));
+let ap_medias = Array.from(document.querySelectorAll("audio"));
+
+// Define a playing history
+let ap_history = [];
+let ap_paused = null;
// If there is at least one media
-if(medias.length > 0) {
+if(ap_medias.length > 0) {
// Create the menu
var ap_menu = document.createElement("div");
- ap_menu.id = "ap-menu";
- ap_menu.innerHTML = `
-
- `;
+ ap_menu.id = "ap-manu";
+ ap_menu.innerHTML = `
+ Player
+
+
+
+
+
+ `;
document.querySelector("body").insertBefore(ap_menu, document.getElementById("maintable"));
+ // Add event listeners
+ [["ap-prev", ap_prev],
+ ["ap-playpause", ap_playpause],
+ ["ap-next", ap_next]].map((e) => {
+ document.getElementById(e[0]).addEventListener("click", e[1]);
+ });
+
// Apply the event listener to all medias
- medias.map(function(e) {
+ ap_medias.map(function(e) {
e.addEventListener("ended", ap_next);
+ e.addEventListener("play", ap_add2history);
});
}
diff --git a/generator.sh b/generator.sh
index 6a36372..7c9b111 100755
--- a/generator.sh
+++ b/generator.sh
@@ -184,7 +184,7 @@ do
if [[ ! -f "${cache}/${thumbname}" ]] && [[ ${kbytes} -le 20480 ]] && [[ ! ${i} =~ \.v2m$ ]]
then
# Création de la miniature
- convert "${i}" -strip -thumbnail 'x60>' "${cache}/${thumbname}"
+ magick "${i}" -strip -thumbnail 'x60>' "${cache}/${thumbname}"
fi
# Si une miniature est présente, on l'affiche