}
}
+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)
<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>
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")
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)
}
}
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()
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)
}
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")
+}