From fea9df345c3c9033dfc505c2e5772521568f585d Mon Sep 17 00:00:00 2001 From: 2weiEmu Date: Tue, 26 May 2026 22:58:04 +0200 Subject: [PATCH] filtering of the main song list should be a thing now --- public/index.html | 1 - public/js/index.js | 45 ++++++++++++++++++++++++++++++++++++++------- songmanager | Bin 11691100 -> 11691100 bytes 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/public/index.html b/public/index.html index d4de36d..f388c40 100644 --- a/public/index.html +++ b/public/index.html @@ -17,7 +17,6 @@ In DB - Image Exists
diff --git a/public/js/index.js b/public/js/index.js index 16bf3e5..71e80ab 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -13,7 +13,6 @@ async function getSongFileList() { await fetch("/api/files/get", {'Accept': 'application/json', 'Content-type': 'application/json'}).then(async (response) => { let body = await response.json() songFileList = body - console.log(body) }) } @@ -85,7 +84,6 @@ function NewSongElement(exists, songName, artistName, imageUrl, id) { * @param {*} url - The URL that should be checked for in the song file list */ function SongURLExists(url) { - console.log(url) return songFileList.indexOf(url) != -1 } @@ -112,10 +110,10 @@ function makeSongList(listOfSongs, appendElement) { function getSongList() { // Empty the List innerSongList.innerHTML = "" + songList = [] fetch("/api/songs/get", {'Accept': 'application/json', 'Content-type': 'application/json'}).then(async (response) => { let body = await response.json() - console.log(body) for (let i = 0; i < body.length; i++) { let song = body[i] @@ -124,6 +122,8 @@ function getSongList() { innerSongList.appendChild(NewSongElement( fileAvailable, song.DisplayTrackName, song.DisplayArtistNames, song.ArtworkURL60, song.Key )) + + songList.push(song) } // using the elements in the body, create all the new songs in the list @@ -143,23 +143,54 @@ let songFilterInput = document.getElementById("songFilterInput") let songFilterName = document.getElementById("songFilterName") let songFilterArtist = document.getElementById("songFilterArtist") let songFilterInDB = document.getElementById("songFilterInDB") -let songFilterImageExist = document.getElementById("songFilterImageExist") /** - * Get the current state of filters, with fields NameFilter, ArtistFilter, DBFilter, ImageFilter + * Get the current state of filters, with fields NameFilter, ArtistFilter, DBFilter * @returns filterstates with fields mentioned above **/ function getFilterStates() { - let filterStates + let filterStates = {} filterStates.NameFilter = songFilterName.value.toLowerCase() filterStates.ArtistFilter = songFilterArtist.value.toLowerCase() filterStates.DBFilter = songFilterInDB.checked - filterStates.ImageExist = songFilterImageExist.checked return filterStates } +function updateSongListWithFilter(_) { + // get the filter states + let filters = getFilterStates() + + // deep copy + let filteredList = [...songList] + + // filter the song list using that + if (filters.DBFilter) { + filteredList = filteredList.filter((v, _1, _2) => { return SongURLExists(v.PreviewURL)}) + } + + if (filters.NameFilter != "") { + filteredList = filteredList.filter((v, _1, _2) => { + return v.TrackName.toLowerCase().includes(filters.NameFilter.toLowerCase()) + }) + } + + if (filters.ArtistFilter != "") { + filteredList = filteredList.filter((v, _1, _2) => { + return v.ArtistName.toLowerCase().includes(filters.ArtistFilter.toLowerCase()) + }) + } + + // now we have the filtered song list + innerSongList.innerHTML = "" + makeSongList(filteredList, innerSongList) +} + +songFilterName.oninput = (event) => {updateSongListWithFilter(event)} +songFilterArtist.oninput = (event) => {updateSongListWithFilter(event)} +songFilterInDB.oninput = (event) => {updateSongListWithFilter(event)} + /** * SETUP / RUN AT START SECTION **/ diff --git a/songmanager b/songmanager index d2b0a64e37f80c50538b476c61348cadafdbacc4..d9ce5422021551868b17e070fdea63f3b6a99af2 100755 GIT binary patch delta 1125 zcmca};v_2wZ@9t6q`)$L;idxN&2QQ2IqHMWJo6j_4YG;D8{7XzLGK};CJ-xHC zQ{1vlEKMxUf(<+p4U3%gb4!bhOH0BEe6xKrJOhl%4U0-D^ef#<++6ZJiab+tvfSML zLe1Pm%NSS~7#Ktt7#Nrt7#Q6BLK!%=n=t%{I>^Ek=ylRWa%on!iUyy4PG*vsiGK5I z{`S}WjP0-anc83TGq=CyXK8=U&)WW)pRN5hKYROYevbCn{G9Et`MKI(^K-Yq=I3dD z&ClEZnxC)zH9ttNK>KTc!S>huLhY~lh1*~Ai?qMy7j1vdFV_B=U%dS_zeM|Me#!RN z{8H_&`K8-m^UJiq=9g`M%`eyfnqR*CHNQgpYktM{*ZfNDulbeRU-PT9zvfqMf6cGf z{+eIC{WZTv`)hv9_SgJc?XUT@+h6nRw7=%pZGX+L*Z!Jczx_48LHlcd!}izwM(wZp zjoV-Io3y{?H*J5-Z`S^r-@N@bzeW3Ne#`dP{8sI+`K{Yu^V_t)=C^Hs&2QKKn%}^;RwtaR+T>I>d`1aWu3GK5p65D5IB(=}Z zNN%5O z*%<}xvoi|YXJ-_(&(0{`K0Bjira04W_UQ*wJnU&4WXvT+rPF^kmngO?w3M_fw3N0h zw3KaEXernD#CW^iv#g@sv#he+v#hG!v#h$^v#h4wv#hq=v#hS&v#h?|v#g=rv#hb* zv#hDzv#hz@v#h1vv#hnv#hV( zv#h_}vur}UXW7Jd&$3DFo@JBUJm2}?62spB delta 1106 zcmca};v_2wZ@9t6B)~F#;idxN&2QQ2IqLJHa$L$Xyv-xZbPEa`JtN&5gDv&bEc`3O zgI!GBaziU4@=_{Yoc%)eb4!bhOH0BEe6xKrJOhl%4U0-D^pnHf^GnTr;={Aj{8AG` zb4w%hTp3sx7#Ktt7#Nrt7#Q6BLK&`_{(2Yi`=I5gjWZ(a4lMkz+4t%~{hZ7sGZX#h z*Zl3T`5D_^^E0)-=4Wny&Ck;QnxD1(H9uSXYkv0j*ZdsqulYIKU-NUdzvky|f6dR+ z{+ge+{WU*d`)huXUV--4{DSST`GwkF^9#4X<`-#y%`e*inqRE_HNSZKYkrCL*Zh+0 zulc3gU-L`1zvh=|f6Xu3{+eH|{WZUQ`)huM_SgK1?XUTj+F$c4x4-6BX@AYH+Wwkf zt^GB>di!gBjrQ04n(eRowc20vYq!7V*J*#vuiO5bU$6Z&zkd5`euMVc{D$qX`Hk9N z^BcFn<~M17&2QTNn%}JbHNScLYkrIN*Zh|4ulcRoU-MhHzvj1Tf6Z^({+i#e{WZUR z`)huO_SgK5?XUTr+F$cKx4-6hX@AY{+Wwl~t^GB>`}WuT9wMP4Mn(q421Z7@sTL_F zmT755mS#ql+xr_zc$qbjg_4a^4UH004O1v`8BH(D@DOE5OUx;r{=d0IrhP$%NBe>d&-MiwUhNAqyxSLK__Qy`@NHj^ z;n%((!@qq&MnL<5jKKB<8A0s}GJ@L|WQ4RY$Ovs;kP+6tAS1keK}JOTf{e)a1sPH8 z3o@eH7i7e=FUW{(Uyu>kz91vMeL+S-`+|(b_5~S9?F%xJ+ZSY{v@gg=ZC{X)*1jMk zy?sGOM*D({%=QHtS?volvfCGA8Aa_2GK#k^ z$S9d2&UB4^`hgS=d)fz(;^YU6tnCUdCG83=rR@qWW!n{6$~8VQUTgO(t7!Kut8Diy zt7`Wwt8Vu!t7-Qvt8Mozt84cxt8e!#YiRc@Yi#!{Yijo_Yi{=}Yiai^Yi;)|Yisu` zYj5`~>uC2Z>umQd>uUEb>u&cf>uL8a>uvWe>udKc>u>igo6zoAHnH8aY*M>t+2nT5 zvMKGJWmDTd%ciw^mQ8Q>ESu5pSvIrXvuswoXW8s_&$2n~o@H~}Jz+da#cwR@H=Z}%))(e7EcvfZ<6)ppOa)!$7RuTOVe py;`49puKSQ>h{9bYuXD}uWc_}y{^4*_4@Y0)f=`KuHN{12LK!A#$o^f -- 2.54.0