]> git.example.dev Git - binbsis50-sm.git/commitdiff
updated: song editing should work for now
author2weiEmu <saalbach.robert@outlook.de>
Fri, 13 Mar 2026 17:26:17 +0000 (18:26 +0100)
committer2weiEmu <saalbach.robert@outlook.de>
Fri, 13 Mar 2026 17:26:17 +0000 (18:26 +0100)
main.go
pkg/dbhandling/dbhandling.go
public/css/index.css
public/index.html
public/js/index.js
songmanager

diff --git a/main.go b/main.go
index 5ea134b95a8368bc100d4b654be2fd0163882c4d..50ce94fc1f67f5492829c2242100c2e267bb7334 100644 (file)
--- a/main.go
+++ b/main.go
@@ -45,6 +45,7 @@ func main() {
        // Setting up the routing
        mux := http.NewServeMux()
        mux.HandleFunc("/api/db_status_update", DBwrapper.GetDBStatus)
+       mux.HandleFunc("/api/updateSong", DBwrapper.UpdateSongStats)
        mux.Handle("/", http.FileServer(http.Dir("./public/")))
 
        listenPort := ":" + strconv.Itoa(*paramPort)
index a2b7c5f43b872be3bd7ea26edadd542b734356ef..74dc1581d51f20d06fb017c2d44573ac486c8611 100644 (file)
@@ -48,6 +48,36 @@ func NewDbWrapper(redisLocation string) DBWrapper {
        }
 }
 
+func (dbw *DBWrapper) UpdateSongStats(w http.ResponseWriter, r *http.Request) {
+       if r.Method != "POST" {
+               w.WriteHeader(http.StatusMethodNotAllowed)
+               return
+       }
+
+       changeSong := DBSong{}
+       err := json.NewDecoder(r.Body).Decode(&changeSong)
+       if err != nil {
+               panic(err)
+       }
+
+       _, err = dbw.RedisDb.HMSet(dbw.ctx, changeSong.Key, map[string]interface{}{
+               "artistName": changeSong.ArtistName,
+               "trackName": changeSong.TrackName,
+               "trackViewUrl": changeSong.TrackViewURL,
+               "previewUrl": changeSong.PreviewURL,
+               "artworkUrl60": changeSong.ArtworkURL60,
+               "artworkUrl100": changeSong.ArtworkURL100,
+               "displayArtistNames": changeSong.DisplayArtistNames,
+               "displayTrackName": changeSong.DisplayTrackName,
+       }).Result()
+
+       if err != nil {
+               panic(err)
+       }
+
+       w.WriteHeader(http.StatusOK)
+}
+
 func (dbw *DBWrapper) GetDBStatus(w http.ResponseWriter, r *http.Request) {
        if r.Method != "GET" {
                w.WriteHeader(http.StatusMethodNotAllowed)
index b9c15fc30ffaf8f23ce77e2efcfe7d29bca3cec4..76fbc32cd72e1a292325edf294018377c9322c2e 100644 (file)
@@ -1,3 +1,7 @@
 :root {
        font-family: sans-serif;
 }
+
+#editElement {
+       background-color: red;
+}
index 0472affad3dd0b64f4da7e5a02b24e88498745e2..4c0f66f765d23ffdc367a0f52492491ac39ff54b 100644 (file)
                        <h1>Song Overview</h1>
                </div>
        </body>
+
+       <div id="editElement" style="display: none; position: absolute; top: 20px; left: 20px;">
+               <h2>Edit Song Menu</h2>
+               <button onclick="closeEditElement()">Close</button>
+
+               <p>Guessable Artist Names</p>
+               <input id="editArtistName" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>Guessable Track Names</p>
+               <input id="editTrackName" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>TrackViewURL (Not relevant)</p>
+               <input id="editTrackViewUrl" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>Preview URL (which song file)</p>
+               <input id="editPreviewUrl" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>Artwork URL 60</p>
+               <input id="editArtworkUrl60" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>Artwork URL 100</p>
+               <input id="editArtworkUrl100" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <p>Display Names for list of Artists</p>
+               <input id="editDisplayArtistNames" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+               
+               <p>Display Names for track name</p>
+               <input id="editDisplayTrackName" pattern="[a-zA-Z0-9~\!]" type="text"></input>
+
+               <button onclick="setNewSongValue()">Insert Changes</button>
+       </div>
        <script type="text/javascript" src="/js/index.js"></script>
 </html>
 
index de9d782786e68bd6d710731ccb4c0642aec22794..13d2cc7098518675c462963dc0b2266b4cd3c75b 100644 (file)
@@ -1,5 +1,74 @@
 let AllSongs = null
+let currentEditSong = null
 let dbSongList = document.getElementById("db_status_song_list")
+let editElement = document.getElementById("editElement")
+
+
+let editArtistName = document.getElementById("editArtistName")
+let editTrackName = document.getElementById("editTrackName")
+let editTrackViewUrl = document.getElementById("editTrackViewUrl")
+let editPreviewUrl = document.getElementById("editPreviewUrl")
+let editArtworkUrl60 = document.getElementById("editArtworkUrl60")
+let editArtworkUrl100 = document.getElementById("editArtworkUrl100")
+let editDisplayArtistNames = document.getElementById("editDisplayArtistNames")
+let editDisplayTrackName = document.getElementById("editDisplayTrackName")
+
+
+function getSongUsingKey(key) {
+       for (let song of AllSongs) {
+               if (song.Key == key) {
+                       return song
+               }
+       }
+       return null
+}
+
+
+function openEditElement(song) {
+       editElement.style.display = "block"
+       editArtistName.value = song.ArtistName
+       editTrackName.value = song.TrackName
+       editTrackViewUrl.value = song.TrackViewURL
+       editPreviewUrl.value = song.PreviewURL
+       editArtworkUrl60.value = song.ArtworkURL60
+       editArtworkUrl100.value = song.ArtworkURL100
+       editDisplayArtistNames.value = song.DisplayArtistNames
+       editDisplayTrackName.value = song.DisplayTrackName
+}
+
+function closeEditElement() {
+       editElement.style.display = "none"
+}
+
+function editSong(event) {
+       console.log(event.srcElement.parentNode.id)
+       let id = event.srcElement.parentNode.id
+       let songKey = id.split("=")[1]
+
+       let song = getSongUsingKey(songKey)
+       currentEditSong = songKey
+       console.log(song)
+
+       openEditElement(song)
+}
+
+function newSongDisplayWithEdit(song) {
+       let wrap = document.createElement("div")
+       wrap.id = "key=" + song.Key
+       let info = document.createElement("p")
+       info.innerText = "(" + song.Key + ") " + song.DisplayTrackName + " by " + song.DisplayArtistNames
+
+       let but = document.createElement("button")
+       but.innerText = "Edit"
+
+       but.onclick = (event) => {editSong(event)}
+
+
+       wrap.appendChild(info)
+       wrap.appendChild(but)
+
+       return wrap
+}
 
 
 let allSongFilterList = document.getElementById("allSongFilterList")
@@ -25,7 +94,7 @@ function filterAllSongs(event) {
        for (let song of AllSongs) {
                if (filterSongByAllAttrs(filterBy, song)) {
                        let li = document.createElement("li")
-                       li.innerText = song.Key
+                       li.appendChild(newSongDisplayWithEdit(song))
                        dbSongList.appendChild(li)
                }
        }
@@ -36,6 +105,7 @@ function filterAllSongs(event) {
 
 async function get_updated_status() {
        console.log("updating database status...")
+       dbSongList.innerHTML = ""
 
        fetch("http://localhost:8000/api/db_status_update", {'Accept': 'application/json', 'Content-type': 'application/json'}).then(async (response) => {
                const body = await response.json()
@@ -44,7 +114,7 @@ async function get_updated_status() {
                AllSongs = body.AllSongs
                for (let song of body.AllSongs) {
                        let li = document.createElement("li")
-                       li.innerText = song.Key
+                       li.appendChild(newSongDisplayWithEdit(song))
                        dbSongList.appendChild(li)
                }
 
@@ -66,3 +136,31 @@ window.onload = () => {
        get_updated_status()
 }
 
+async function setNewSongValue() {
+       let newArtistName = editArtistName.value
+       let newTrackName = editTrackName.value
+       let newTrackViewUrl = editTrackViewUrl.value
+       let newPreviewUrl = editPreviewUrl.value
+       let newArtworkUrl60 = editArtworkUrl60.value
+       let newArtworkUrl100 = editArtworkUrl100.value
+       let newDisplayArtistNames = editDisplayArtistNames.value
+       let newDisplayTrackName = editDisplayTrackName.value
+
+       await fetch("/api/updateSong", {
+               method: "POST",
+               body: JSON.stringify({
+                       Key: currentEditSong,
+                       ArtistName: newArtistName,
+                       TrackName: newTrackName,
+                       TrackViewURL: newTrackViewUrl,
+                       PreviewURL: newPreviewUrl,
+                       ArtworkURL60: newArtworkUrl60,
+                       ArtworkURL100: newArtworkUrl100,
+                       DisplayArtistNames: newDisplayArtistNames,
+                       DisplayTrackName: newDisplayTrackName,
+               })
+       })
+       
+       get_updated_status()
+       //await fetch("https://binb.sis50.nl/reloadRooms")
+}
index bf81630300eaf6d101f71085540bec436a5e1db6..1385a4b133fc552304cdb65073af9f19629e0553 100755 (executable)
Binary files a/songmanager and b/songmanager differ