diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f5e127..a6a7d76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 2.6) project (mympd C) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") set(CPACK_PACKAGE_VERSION_MAJOR "4") -set(CPACK_PACKAGE_VERSION_MINOR "1") -set(CPACK_PACKAGE_VERSION_PATCH "2") +set(CPACK_PACKAGE_VERSION_MINOR "2") +set(CPACK_PACKAGE_VERSION_PATCH "0") if(CMAKE_BUILD_TYPE MATCHES RELEASE) set(ASSETS_PATH "/usr/share/${PROJECT_NAME}/htdocs") @@ -43,7 +43,7 @@ install(TARGETS mympd DESTINATION bin) install(FILES contrib/mympd.1 DESTINATION share/man/man1) install(PROGRAMS contrib/crcert.sh DESTINATION share/${PROJECT_NAME}/) install(FILES contrib/mympd.service DESTINATION share/${PROJECT_NAME}/) -install(FILES contrib/mympd.conf DESTINATION ../etc/${PROJECT_NAME}/) +install(FILES contrib/mympd.conf.dist DESTINATION ../etc/${PROJECT_NAME}/) install(FILES htdocs/mympd.webmanifest DESTINATION share/${PROJECT_NAME}/htdocs/) install(FILES dist/htdocs/index.html DESTINATION share/${PROJECT_NAME}/htdocs/) install(FILES dist/htdocs/player.html DESTINATION share/${PROJECT_NAME}/htdocs/) diff --git a/PKGBUILD b/PKGBUILD index eab2876..a689af7 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,7 +5,7 @@ pkgname=mympd _pkgname=myMPD -pkgver=4.1.2 +pkgver=4.2.0 pkgrel=1 pkgdesc="A standalone MPD Web GUI based on YMPD - Default port set to 80" arch=('x86_64' 'armv7h' 'aarch64') @@ -77,9 +77,6 @@ package() { cd "${srcdir}/${_pkgname}-${pkgver}/release" make DESTDIR="$pkgdir/" install - ### DON'T OVERWRITE CURRENT CONFIG ### - mv "${pkgdir}/etc/mympd/mympd.conf" "${pkgdir}/etc/mympd/mympd.conf.dist" - install -Dm644 "${srcdir}/${_pkgname}-${pkgver}/contrib/mympd.service" "$pkgdir/usr/lib/systemd/system/mympd.service" /usr/share/mympd/crcert.sh } diff --git a/contrib/archlinux.install b/contrib/archlinux.install index ee038fb..6e10041 100644 --- a/contrib/archlinux.install +++ b/contrib/archlinux.install @@ -49,15 +49,10 @@ post_upgrade() { /usr/share/mympd/crcert.sh fi - # disable ssl by default on mympd.conf.dist (chrome hates localhost.localdomain) - echo "INFO: Disabling SSL by default in dist config" - sed '/^ssl = true/c ssl = false' -i "/etc/mympd/mympd.conf.dist" - # move config into place unless already existing if [ ! -f /etc/mympd/mympd.conf ] then mv /etc/mympd/mympd.conf.dist /etc/mympd/mympd.conf - echo -e "\e[93mWARNING\e[0m: \e[1mSSL Disabled by default! You must enable SSL in /etc/mympd/mympd.conf if you wish to use SSL\e[0m" else echo -e "\e[93mWARNING\e[0m: \e[1mmympd.conf \e[0minstalled as \e[1mmympd.conf.dist\e[0m" fi @@ -84,13 +79,7 @@ post_remove() { # unlink music dir echo "unlinking musicdir to library" - if [ -f /etc/mpd.conf ] - then - LIBRARY=$(grep ^music_directory /etc/mpd.conf | awk {'print $2'} | sed -e 's/"//g') - [ "$LIBRARY" != "" ] && [ -e /usr/share/mympd/htdocs/library ] && rm /usr/share/mympd/htdocs/library - else - echo -e "\e[93mWARNING\e[0m: /etc/mpd.conf not found, you must unlink your musicdir manually from \e[1m/usr/share/mympd/htdocs/library\e[0m" - fi + [ -e /usr/share/mympd/htdocs/library ] && rm -v /usr/share/mympd/htdocs/library # remove mympd user and group getent passwd mympd > /dev/null diff --git a/contrib/myMPD.spec b/contrib/myMPD.spec index c6d2306..9b7da3f 100644 --- a/contrib/myMPD.spec +++ b/contrib/myMPD.spec @@ -4,13 +4,13 @@ # (c) 2018 Juergen Mang /dev/null [ "$?" = "2" ] && groupadd -r mympd getent passwd mympd > /dev/null [ "$?" = "2" ] && useradd -r mympd -g mympd -d /var/lib/mympd -s /usr/sbin/nologin + +if ! [ $(stat -c '%U:%G' /var/lib/mympd/) == 'mympd:mympd' ] +then + echo "Fixing ownership of /var/lib/mympd" + chown -R mympd.mympd /var/lib/mympd +fi + if [ -d /usr/lib/systemd/ ] then [ -d /usr/lib/systemd/system ] || sudo mkdir /usr/lib/systemd/system cp /usr/share/mympd/mympd.service /usr/lib/systemd/system/ + systemctl daemon-reload + systemctl enable mympd fi + if [ -f /etc/mpd.conf ] then LIBRARY=$(grep ^music_directory /etc/mpd.conf | awk {'print $2'} | sed -e 's/"//g') [ "$LIBRARY" != "" ] && [ ! -e /usr/share/mympd/htdocs/library ] && ln -s "$LIBRARY" /usr/share/mympd/htdocs/library fi -chown -R mympd /var/lib/mympd + +if [ ! -f /etc/mympd/mympd.conf ] +then + mv /etc/mympd/mympd.conf.dist /etc/mympd/mympd.conf +else + echo "mympd.conf installed as mympd.conf.dist" +fi + /usr/share/mympd/crcert.sh +%postun +if [ -f /usr/lib/systemd/system/mympd.service ] +then + if `systemctl is-active --quiet mympd` + then + echo "stopping mympd.service" && systemctl stop mympd + fi + echo "disabling mympd.service" && systemctl disable mympd + rm -v -f /usr/lib/systemd/system/mympd.service + systemctl daemon-reload +fi + +rm -v -fr /var/lib/mympd +[ -e /usr/share/mympd/htdocs/library ] && rm -v /usr/share/mympd/htdocs/library +rmdir -v /usr/share/{mympd/htdocs/,mympd/} + +getent passwd mympd > /dev/null +echo "Removing mympd user and group" +[ "$?" != "2" ] && userdel -r mympd +getent group mympd > /dev/null +[ "$?" != "2" ] && groupdel mympd + + %files %defattr(-,root,root,-) %doc README.md LICENSE @@ -65,5 +106,5 @@ chown -R mympd /var/lib/mympd /var/lib/mympd %changelog -* Wed Sep 05 2018 Juergen Mang - master +* Wed Sep 17 2018 Juergen Mang - master - Version from master diff --git a/contrib/mympd.conf b/contrib/mympd.conf.dist similarity index 73% rename from contrib/mympd.conf rename to contrib/mympd.conf.dist index edda539..f3e55a9 100644 --- a/contrib/mympd.conf +++ b/contrib/mympd.conf.dist @@ -31,3 +31,7 @@ mixramp = false #Enable usage of mpd stickers for play statistics and voting stickers = true + +#List of tags in myMPD gui +#Supported tags: Artist,Album,AlbumArtist,Title,Track,Genre,Date,Composer,Performer +taglist = Artist,Album,AlbumArtist,Title,Track,Genre,Date,Composer,Performer diff --git a/contrib/uninstall.sh b/contrib/uninstall.sh deleted file mode 100755 index e7ca3b9..0000000 --- a/contrib/uninstall.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -rm -r /etc/mympd -rm -r /var/lib/mympd -rm -r /usr/share/mympd -rm -f /usr/lib/systemd/system/mympd.service - -userdel mympd -groupdel mympd diff --git a/debian/changelog b/debian/changelog index b9129cc..0a70634 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -mympd (4.1.2-1) unstable; urgency=medium +mympd (4.2.0-1) stable; urgency=medium - * Initial release + * Release from master - -- Juergen Mang Thu, 06 Sep 2018 22:57:18 +0200 + -- Juergen Mang Mon, 17 Sep 2018 17:59:00 +0200 diff --git a/debian/postinst b/debian/postinst index 8c27229..199efbc 100755 --- a/debian/postinst +++ b/debian/postinst @@ -1,12 +1,16 @@ #/bin/bash -echo "Fixing ownership of /var/lib/mympd" +echo "Checking status of mympd system user and group" getent group mympd > /dev/null [ "$?" = "2" ] && groupadd -r mympd getent passwd mympd > /dev/null [ "$?" = "2" ] && useradd -r mympd -g mympd -d /var/lib/mympd -s /usr/sbin/nologin -chown -R mympd.mympd /var/lib/mympd +if ! [ $(stat -c '%U:%G' /var/lib/mympd/) == 'mympd:mympd' ] +then + echo "Fixing ownership of /var/lib/mympd" + chown -R mympd.mympd /var/lib/mympd +fi echo "Trying to link musicdir to library" if [ -f /etc/mpd.conf ] @@ -24,7 +28,17 @@ then if [ contrib/mympd.service -nt /usr/lib/systemd/system/mympd.service ] then cp contrib/mympd.service /usr/lib/systemd/system/ + systemctl daemon-reload fi + systemctl enable mympd +fi + +# move config into place unless already existing +if [ ! -f /etc/mympd/mympd.conf ] +then + mv /etc/mympd/mympd.conf.dist /etc/mympd/mympd.conf +else + echo "mympd.conf installed as mympd.conf.dist" fi if [ -d /etc/mympd/ssl ] diff --git a/debian/postrm b/debian/postrm new file mode 100755 index 0000000..d93626e --- /dev/null +++ b/debian/postrm @@ -0,0 +1,21 @@ +if [ -f /usr/lib/systemd/system/mympd.service ] +then + if `systemctl is-active --quiet mympd` + then + echo "stopping mympd.service" && systemctl stop mympd + fi + echo "disabling mympd.service" && systemctl disable mympd + rm -v -f /usr/lib/systemd/system/mympd.service + systemctl daemon-reload +fi + +rm -v -fr /var/lib/mympd + +[ -e /usr/share/mympd/htdocs/library ] && rm -v /usr/share/mympd/htdocs/library +rmdir -v /usr/share/{mympd/htdocs/,mympd/} + +getent passwd mympd > /dev/null +echo "Removing mympd user and group" +[ "$?" != "2" ] && userdel -r mympd +getent group mympd > /dev/null +[ "$?" != "2" ] && groupdel mympd diff --git a/dist/htdocs/index.html b/dist/htdocs/index.html index fbbe905..c20df44 100644 --- a/dist/htdocs/index.html +++ b/dist/htdocs/index.html @@ -1 +1 @@ -myMPD
Playback

Artist

Album

Queue
#TitleArtistAlbumDuration
PlaylistLast modified
Playlist List
#TitleArtistAlbumDuration
Artist

TitleArtistAlbumDuration
Search
TitleArtistAlbumDuration
\ No newline at end of file +myMPD
Playback

Artist

Album

Queue
#TitleArtistAlbumDuration
PlaylistLast modified
Playlist List
#TitleArtistAlbumDuration
Artist

TitleArtistAlbumDuration
Search
TitleArtistAlbumDuration
\ No newline at end of file diff --git a/dist/htdocs/js/bootstrap-native-v4.min.js b/dist/htdocs/js/bootstrap-native-v4.min.js index 37cdd7b..db7cc62 100644 --- a/dist/htdocs/js/bootstrap-native-v4.min.js +++ b/dist/htdocs/js/bootstrap-native-v4.min.js @@ -1,2 +1,42 @@ -// Native Javascript for Bootstrap 4 v2.0.23 | © dnp_theme | MIT-License -!function(t,e){if("function"==typeof define&&define.amd)define([],e);else if("object"==typeof module&&module.exports)module.exports=e();else{var n=e();t.Alert=n.Alert,t.Button=n.Button,t.Carousel=n.Carousel,t.Collapse=n.Collapse,t.Dropdown=n.Dropdown,t.Modal=n.Modal,t.Popover=n.Popover,t.ScrollSpy=n.ScrollSpy,t.Tab=n.Tab,t.Tooltip=n.Tooltip}}(this,function(){"use strict";var t="undefined"!=typeof global?global:this||window,e=document,n=e.documentElement,i="body",o=t.BSN={},a=o.supports=[],l="data-toggle",r="data-dismiss",c="data-spy",u="data-ride",s="Alert",f="Button",h="Carousel",d="Collapse",v="Dropdown",p="Modal",m="Popover",g="ScrollSpy",w="Tab",b="Tooltip",y="data-backdrop",T="data-keyboard",x="data-target",C="data-interval",A="data-height",k="data-pause",I="data-title",N="data-original-title",L="data-dismissible",E="data-trigger",S="data-animation",B="data-container",D="data-placement",M="data-delay",P="backdrop",H="keyboard",O="delay",W="content",j="target",q="interval",R="pause",U="animation",z="placement",F="container",X="offsetTop",Y="offsetLeft",G="scrollTop",J="scrollLeft",K="clientWidth",Q="clientHeight",V="offsetWidth",Z="offsetHeight",$="innerWidth",_="innerHeight",tt="scrollHeight",et="height",nt="aria-expanded",it="aria-hidden",ot="click",at="hover",lt="keydown",rt="keyup",ct="resize",ut="scroll",st="show",ft="shown",ht="hide",dt="hidden",vt="close",pt="closed",mt="slid",gt="slide",wt="change",bt="getAttribute",yt="setAttribute",Tt="hasAttribute",xt="createElement",Ct="appendChild",At="innerHTML",kt="getElementsByTagName",It="preventDefault",Nt="getBoundingClientRect",Lt="querySelectorAll",Et="getElementsByClassName",St="getComputedStyle",Bt="indexOf",Dt="parentNode",Mt="length",Pt="toLowerCase",Ht="Transition",Ot="Duration",Wt="Webkit",jt="style",qt="push",Rt="tabindex",Ut="contains",zt="active",Ft="show",Xt="collapsing",Yt="left",Gt="right",Jt="top",Kt="bottom",Qt="onmouseleave"in e?["mouseenter","mouseleave"]:["mouseover","mouseout"],Vt=/\b(top|bottom|left|right)+/,Zt=0,$t="fixed-top",_t="fixed-bottom",te=Wt+Ht in n[jt]||Ht[Pt]()in n[jt],ee=Wt+Ht in n[jt]?Wt[Pt]()+Ht+"End":Ht[Pt]()+"end",ne=Wt+Ot in n[jt]?Wt[Pt]()+Ht+Ot:Ht[Pt]()+Ot,ie=function(t){t.focus?t.focus():t.setActive()},oe=function(t,e){t.classList.add(e)},ae=function(t,e){t.classList.remove(e)},le=function(t,e){return t.classList[Ut](e)},re=function(t,e){return[].slice.call(t[Et](e))},ce=function(t,n){var i=n?n:e;return"object"==typeof t?t:i.querySelector(t)},ue=function(t,n){var i=n.charAt(0),o=n.substr(1);if("."===i){for(;t&&t!==e;t=t[Dt])if(null!==ce(n,t[Dt])&&le(t,o))return t}else if("#"===i)for(;t&&t!==e;t=t[Dt])if(t.id===o)return t;return!1},se=function(t,e,n){t.addEventListener(e,n,!1)},fe=function(t,e,n){t.removeEventListener(e,n,!1)},he=function(t,e,n){se(t,e,function i(o){n(o),fe(t,e,i)})},de=function(e){var n=t[St](e)[ne];return n=parseFloat(n),n="number"!=typeof n||isNaN(n)?0:1e3*n,n+50},ve=function(t,e){var n=0,i=de(t);te&&he(t,ee,function(t){e(t),n=1}),setTimeout(function(){!n&&e()},i)},pe=function(t,e,n){var i=new CustomEvent(t+".bs."+e);i.relatedTarget=n,this.dispatchEvent(i)},me=function(){return{y:t.pageYOffset||n[G],x:t.pageXOffset||n[J]}},ge=function(t,o,a,l){var r,c,u,s,f,h,d={w:o[V],h:o[Z]},v=n[K]||e[i][K],p=n[Q]||e[i][Q],m=t[Nt](),g=l===e[i]?me():{x:l[Y]+l[J],y:l[X]+l[G]},w={w:m[Gt]-m[Yt],h:m[Kt]-m[Jt]},b=le(o,"popover"),y=ce(".arrow",o),T=m[Jt]+w.h/2-d.h/2<0,x=m[Yt]+w.w/2-d.w/2<0,C=m[Yt]+d.w/2+w.w/2>=v,A=m[Jt]+d.h/2+w.h/2>=p,k=m[Jt]-d.h<0,I=m[Yt]-d.w<0,N=m[Jt]+d.h+w.h>=p,L=m[Yt]+d.w+w.w>=v;a=(a===Yt||a===Gt)&&I&&L?Jt:a,a=a===Jt&&k?Kt:a,a=a===Kt&&N?Jt:a,a=a===Yt&&I?Gt:a,a=a===Gt&&L?Yt:a,o.className[Bt](a)===-1&&(o.className=o.className.replace(Vt,a)),f=y[V],h=y[Z],a===Yt||a===Gt?(c=a===Yt?m[Yt]+g.x-d.w-(b?f:0):m[Yt]+g.x+w.w,T?(r=m[Jt]+g.y,u=w.h/2-f):A?(r=m[Jt]+g.y-d.h+w.h,u=d.h-w.h/2-f):(r=m[Jt]+g.y-d.h/2+w.h/2,u=d.h/2-(b?.9*h:h/2))):a!==Jt&&a!==Kt||(r=a===Jt?m[Jt]+g.y-d.h-(b?h:0):m[Jt]+g.y+w.h,x?(c=0,s=m[Yt]+w.w/2-f):C?(c=v-1.01*d.w,s=d.w-(v-m[Yt])+w.w/2-f/2):(c=m[Yt]+g.x-d.w/2+w.w/2,s=d.w/2-f/2)),o[jt][Jt]=r+"px",o[jt][Yt]=c+"px",u&&(y[jt][Jt]=u+"px"),s&&(y[jt][Yt]=s+"px")};o.version="2.0.23";var we=function(t){t=ce(t);var e=this,n="alert",i=ue(t,"."+n),o=function(){le(i,"fade")?ve(i,l):l()},a=function(o){i=ue(o[j],"."+n),t=ce("["+r+'="'+n+'"]',i),t&&i&&(t===o[j]||t[Ut](o[j]))&&e.close()},l=function(){pe.call(i,pt,n),fe(t,ot,a),i[Dt].removeChild(i)};this.close=function(){i&&t&&le(i,Ft)&&(pe.call(i,vt,n),ae(i,Ft),i&&o())},s in t||se(t,ot,a),t[s]=e};a[qt]([s,we,"["+r+'="alert"]']);var be=function(t){t=ce(t);var n=!1,i="button",o="checked",a="LABEL",l="INPUT",r=function(t){var n=t.which||t.keyCode;32===n&&t[j]===e.activeElement&&u(t)},c=function(t){var e=t.which||t.keyCode;32===e&&t[It]()},u=function(e){var r=e[j].tagName===a?e[j]:e[j][Dt].tagName===a?e[j][Dt]:null;if(r){var c=e[j],u=re(c[Dt],"btn"),s=r[kt](l)[0];if(s){if("checkbox"===s.type&&(s[o]?(ae(r,zt),s[bt](o),s.removeAttribute(o),s[o]=!1):(oe(r,zt),s[bt](o),s[yt](o,o),s[o]=!0),n||(n=!0,pe.call(s,wt,i),pe.call(t,wt,i))),"radio"===s.type&&!n&&!s[o]){oe(r,zt),s[yt](o,o),s[o]=!0,pe.call(s,wt,i),pe.call(t,wt,i),n=!0;for(var f=0,h=u[Mt];f=0},W=function(t){for(var e=0,n=E[Mt];et||o===x-1&&0===t)&&(A=m[d]=Gt),t<0?t=x-1:t===x&&(t=0),g=t,n=A===Yt?"next":"prev",pe.call(i,gt,s,y[t]),b=!0,clearInterval(w),W(t),te&&le(i,"slide")?(oe(y[t],v+"-"+n),y[t][V],oe(y[t],v+"-"+A),oe(y[o],v+"-"+A),he(y[t],ee,function(a){var l=a[j]!==y[t]?1e3*a.elapsedTime+100:20;b&&setTimeout(function(){b=!1,oe(y[t],zt),ae(y[o],zt),ae(y[t],v+"-"+n),ae(y[t],v+"-"+A),ae(y[o],v+"-"+A),pe.call(i,mt,s,y[t]),e.hidden||!m[q]||le(i,f)||m.cycle()},l)})):(oe(y[t],zt),y[t][V],ae(y[o],zt),setTimeout(function(){b=!1,m[q]&&!le(i,f)&&m.cycle(),pe.call(i,mt,s,y[t])},100))}},this.getActiveIndex=function(){return y[Bt](re(i,v+" active")[0])||0},h in i||(m[R]&&m[q]&&(se(i,Qt[0],S),se(i,Qt[1],B),se(i,"touchstart",S),se(i,"touchend",B)),N&&se(N,ot,M),I&&se(I,ot,M),L&&se(L,ot,D),m[H]===!0&&se(t,lt,P)),m.getActiveIndex()<0&&(y[Mt]&&oe(y[0],zt),E[Mt]&&W(0)),m[q]&&m.cycle(),i[h]=m};a[qt]([h,ye,"["+u+'="carousel"]']);var Te=function(t,e){t=ce(t),e=e||{};var n,i,o=null,a=null,r=this,c=t[bt]("data-parent"),u="collapse",s="collapsed",f="isAnimating",h=function(t,e){pe.call(t,st,u),t[f]=!0,oe(t,Xt),ae(t,u),t[jt][et]=t[tt]+"px",ve(t,function(){t[f]=!1,t[yt](nt,"true"),e[yt](nt,"true"),ae(t,Xt),oe(t,u),oe(t,Ft),t[jt][et]="",pe.call(t,ft,u)})},v=function(t,e){pe.call(t,ht,u),t[f]=!0,t[jt][et]=t[tt]+"px",ae(t,u),ae(t,Ft),oe(t,Xt),t[V],t[jt][et]="0px",ve(t,function(){t[f]=!1,t[yt](nt,"false"),e[yt](nt,"false"),ae(t,Xt),oe(t,u),t[jt][et]="",pe.call(t,dt,u)})},p=function(){var e=t.href&&t[bt]("href"),n=t[bt](x),i=e||n&&"#"===n.charAt(0)&&n;return i&&ce(i)};this.toggle=function(t){t[It](),le(a,Ft)?r.hide():r.show()},this.hide=function(){a[f]||(v(a,t),oe(t,s))},this.show=function(){o&&(n=ce("."+u+"."+Ft,o),i=n&&(ce("["+l+'="'+u+'"]['+x+'="#'+n.id+'"]',o)||ce("["+l+'="'+u+'"][href="#'+n.id+'"]',o))),(!a[f]||n&&!n[f])&&(i&&n!==a&&(v(n,i),oe(i,s)),h(a,t),ae(t,s))},d in t||se(t,ot,r.toggle),a=p(),a[f]=!1,o=ce(e.parent)||c&&ue(t,c),t[d]=r};a[qt]([d,Te,"["+l+'="collapse"]']);var xe=function(t,n){t=ce(t),this.persist=n===!0||"true"===t[bt]("data-persist")||!1;var i=this,o="children",a=t[Dt],l="dropdown",r="open",c=null,u=ce(".dropdown-menu",a),s=function(){for(var t=u[o],e=[],n=0;n1?l-1:0:40===o&&ln[Q],b=S()},D=function(){s[jt][d]=!g&&w?b+"px":"",s[jt][v]=g&&!w?b+"px":""},M=function(){s[jt][d]="",s[jt][v]=""},O=function(){Zt=1;var t=e[xt]("div");C=ce("."+m),null===C&&(t[yt]("class",m+" fade"),C=t,e[i][Ct](C))},q=function(){C=ce("."+m),C&&null!==C&&"object"==typeof C&&(Zt=0,e[i].removeChild(C),C=null),pe.call(s,dt,f)},R=function(){le(s,Ft)?se(e,lt,G):fe(e,lt,G)},U=function(){le(s,Ft)?se(t,ct,A.update):fe(t,ct,A.update)},z=function(){le(s,Ft)?se(s,ot,J):fe(s,ot,J)},F=function(){ie(s),pe.call(s,ft,f,k)},X=function(){s[jt].display="",o&&ie(o),function(){re(e,f+" "+Ft)[0]||(M(),E(),ae(e[i],f+"-open"),C&&le(C,"fade")?(ae(C,Ft),ve(C,q)):q(),U(),z(),R())}()},Y=function(t){var e=t[j];e=e[Tt](x)||e[Tt]("href")?e:e[Dt],e!==o||le(s,Ft)||(s.modalTrigger=o,k=o,A.show(),t[It]())},G=function(t){A[H]&&27==t.which&&le(s,Ft)&&A.hide()},J=function(t){var e=t[j];le(s,Ft)&&(e[Dt][bt](r)===f||e[bt](r)===f||e===s&&A[P]!==h)&&(A.hide(),k=null,t[It]())};this.toggle=function(){le(s,Ft)?this.hide():this.show()},this.show=function(){pe.call(s,st,f,k);var t=re(e,f+" "+Ft)[0];t&&t!==s&&t.modalTrigger[p].hide(),this[P]&&!Zt&&O(),C&&Zt&&!le(C,Ft)&&(C[V],l=de(C),oe(C,Ft)),setTimeout(function(){s[jt].display="block",B(),L(),D(),oe(e[i],f+"-open"),oe(s,Ft),s[yt](it,!1),U(),z(),R(),le(s,"fade")?ve(s,F):F()},te&&C?l:0)},this.hide=function(){pe.call(s,ht,f),C=ce("."+m),l=C&&de(C),ae(s,Ft),s[yt](it,!0),setTimeout(function(){le(s,"fade")?ve(s,X):X()},te&&C?l:0)},this.setContent=function(t){ce("."+f+"-content",s)[At]=t},this.update=function(){le(s,Ft)&&(B(),L(),D())},!o||p in o||se(o,ot,Y),A[W]&&A.setContent(A[W]),!!o&&(o[p]=A)}};a[qt]([p,Ce,"["+l+'="modal"]']);var Ae=function(n,o){n=ce(n),o=o||{};var a=n[bt](E),l=n[bt](S),r=n[bt](D),c=n[bt](L),u=n[bt](M),s=n[bt](B),f="popover",h="template",d="trigger",v="class",p="div",g="fade",w="data-content",b="dismissible",y='',T=ce(o[F]),x=ce(s),C=ue(n,".modal"),A=ue(n,"."+$t),k=ue(n,"."+_t);this[h]=o[h]?o[h]:null,this[d]=o[d]?o[d]:a||at,this[U]=o[U]&&o[U]!==g?o[U]:l||g,this[z]=o[z]?o[z]:r||Jt,this[O]=parseInt(o[O]||u)||200,this[b]=!(!o[b]&&"true"!==c),this[F]=T?T:x?x:A?A:k?k:C?C:e[i];var N=this,P=n[bt](I)||null,H=n[bt](w)||null;if(H||this[h]){var W=null,q=0,R=this[z],X=function(t){null!==W&&t[j]===ce(".close",W)&&N.hide()},Y=function(){N[F].removeChild(W),q=null,W=null},G=function(){P=n[bt](I),H=n[bt](w),W=e[xt](p);var t=e[xt](p);if(t[yt](v,"arrow"),W[Ct](t),null!==H&&null===N[h]){if(W[yt]("role","tooltip"),null!==P){var i=e[xt]("h3");i[yt](v,f+"-header"),i[At]=N[b]?P+y:P,W[Ct](i)}var o=e[xt](p);o[yt](v,f+"-body"),o[At]=N[b]&&null===P?H+y:H,W[Ct](o)}else{var a=e[xt](p);a[At]=N[h],W[At]=a.firstChild[At]}N[F][Ct](W),W[jt].display="block",W[yt](v,f+" bs-"+f+"-"+R+" "+N[U])},J=function(){!le(W,Ft)&&oe(W,Ft)},K=function(){ge(n,W,R,N[F])},Q=function(i){ot!=N[d]&&"focus"!=N[d]||!N[b]&&i(n,"blur",N.hide),N[b]&&i(e,ot,X),i(t,ct,N.hide)},V=function(){Q(se),pe.call(n,ft,f)},Z=function(){Q(fe),Y(),pe.call(n,dt,f)};this.toggle=function(){null===W?N.show():N.hide()},this.show=function(){clearTimeout(q),q=setTimeout(function(){null===W&&(R=N[z],G(),K(),J(),pe.call(n,st,f),N[U]?ve(W,V):V())},20)},this.hide=function(){clearTimeout(q),q=setTimeout(function(){W&&null!==W&&le(W,Ft)&&(pe.call(n,ht,f),ae(W,Ft),N[U]?ve(W,Z):Z())},N[O])},m in n||(N[d]===at?(se(n,Qt[0],N.show),N[b]||se(n,Qt[1],N.hide)):ot!=N[d]&&"focus"!=N[d]||se(n,N[d],N.toggle)),n[m]=N}};a[qt]([m,Ae,"["+l+'="popover"]']);var ke=function(e,n){e=ce(e);var i=ce(e[bt](x)),o=e[bt]("data-offset");if(n=n||{},n[j]||i){for(var a,l=this,r=n[j]&&ce(n[j])||i,c=r&&r[kt]("A"),u=parseInt(o||n.offset)||10,s=[],f=[],h=e[Z]=h&&v>a;if(!c&&p)le(n,zt)||(oe(n,zt),l&&!le(l,zt)&&oe(l,zt),pe.call(e,"activate","scrollspy",s[t]));else if(p){if(!p&&!c||c&&p)return}else le(n,zt)&&(ae(n,zt),l&&le(l,zt)&&!re(n[Dt],zt).length&&ae(l,zt))},y=function(){a=d?me().y:e[G];for(var t=0,n=s[Mt];t1&&(t=e[e[Mt]-1]):t=e[0],t},k=function(){return ce(C()[bt]("href"))},I=function(t){var e=t[j][bt]("href");t[It](),c=t[j][bt](l)===i||e&&"#"===e.charAt(0)?t[j]:t[j][Dt],!m[r]&&!le(c,zt)&&p.show()};this.show=function(){c=c||t,f=ce(c[bt]("href")),u=C(),s=k(),m[r]=!0,ae(u,zt),oe(c,zt),b&&(le(t[Dt],"dropdown-menu")?le(b,zt)||oe(b,zt):le(b,zt)&&ae(b,zt)),pe.call(u,ht,i,c),le(s,"fade")?(ae(s,Ft),ve(s,x)):x()},w in t||se(t,ot,I),p[o]&&(g=k()[Dt]),t[w]=p}};a[qt]([w,Ie,"["+l+'="tab"]']);var Ne=function(n,o){n=ce(n),o=o||{};var a=n[bt](S),l=n[bt](D),r=n[bt](M),c=n[bt](B),u="tooltip",s="class",f="title",h="fade",d="div",v=ce(o[F]),p=ce(c),m=ue(n,".modal"),g=ue(n,"."+$t),w=ue(n,"."+_t);this[U]=o[U]&&o[U]!==h?o[U]:a||h,this[z]=o[z]?o[z]:l||Jt,this[O]=parseInt(o[O]||r)||200,this[F]=v?v:p?p:g?g:w?w:m?m:e[i];var y=this,T=0,x=this[z],C=null,A=n[bt](f)||n[bt](I)||n[bt](N);if(A&&""!=A){var k=function(){y[F].removeChild(C),C=null,T=null},L=function(){if(A=n[bt](f)||n[bt](I)||n[bt](N),!A||""==A)return!1;C=e[xt](d),C[yt]("role",u);var t=e[xt](d);t[yt](s,"arrow"),C[Ct](t);var i=e[xt](d);i[yt](s,u+"-inner"),C[Ct](i),i[At]=A,y[F][Ct](C),C[yt](s,u+" bs-"+u+"-"+x+" "+y[U])},E=function(){ge(n,C,x,y[F])},P=function(){!le(C,Ft)&&oe(C,Ft)},H=function(){se(t,ct,y.hide),pe.call(n,ft,u)},W=function(){fe(t,ct,y.hide),k(),pe.call(n,dt,u)};this.show=function(){clearTimeout(T),T=setTimeout(function(){if(null===C){if(x=y[z],0==L())return;E(),P(),pe.call(n,st,u),y[U]?ve(C,H):H()}},20)},this.hide=function(){clearTimeout(T),T=setTimeout(function(){C&&le(C,Ft)&&(pe.call(n,ht,u),ae(C,Ft),y[U]?ve(C,W):W())},y[O])},this.toggle=function(){C?y.hide():y.show()},b in n||(n[yt](N,A),n.removeAttribute(f),se(n,Qt[0],y.show),se(n,Qt[1],y.hide)),n[b]=y}};a[qt]([b,Ne,"["+l+'="tooltip"]']);var Le=function(t,e){for(var n=0,i=e[Mt];na.top+k/2-f/2,r=0>a.left+v/2-m/2,x=a.left+m/2+v/2>=h,t=a.top+f/2+k/2>=n;var C=0>a.top-f;var F=0>a.left-m;n=a.top+f+k>=n;var M=a.left+m+v>=h;e=("left"===e||"right"===e)&&F&&M?"top":e;e="top"===e&&C?"bottom":e;e="bottom"===e&&n?"top":e;e="left"===e&&F?"right":e;e="right"===e&&M?"left":e;-1===c.className.indexOf(e)&&(c.className=c.className.replace(ja,e));n=A.offsetWidth;C=A.offsetHeight;if("left"=== +e||"right"===e){var J="left"===e?a.left+b.x-m-(d?n:0):a.left+b.x+v;if(l){var w=a.top+b.y;var u=k/2-n}else t?(w=a.top+b.y-f+k,u=f-k/2-n):(w=a.top+b.y-f/2+k/2,u=f/2-(d?.9*C:C/2))}else if("top"===e||"bottom"===e)if(w="top"===e?a.top+b.y-f-(d?C:0):a.top+b.y+k,r){J=0;var y=a.left+v/2-n}else x?(J=h-1.01*m,y=m-(h-a.left)+v/2-n/2):(J=a.left+b.x-m/2+v/2,y=m/2-n/2);c.style.top=w+"px";c.style.left=J+"px";u&&(A.style.top=u+"px");y&&(A.style.left=y+"px")};Q.version="2.0.23";var X=function(a){a=q(a);var c=this, +e=G(a,".alert"),b=function(b){e=G(b.target,".alert");(a=q('[data-dismiss="alert"]',e))&&e&&(a===b.target||a.contains(b.target))&&c.close()},m=function(){x.call(e,"closed","alert");L(a,"click",b);e.parentNode.removeChild(e)};this.close=function(){e&&a&&p(e,"show")&&(x.call(e,"close","alert"),y(e,"show"),e&&(p(e,"fade")?H(e,m):m()))};"Alert"in a||u(a,"click",b);a.Alert=c};D.push(["Alert",X,'[data-dismiss="alert"]']);var Y=function(a){a=q(a);var c=!1,e=function(a){32===(a.which||a.keyCode)&&a.target=== +g.activeElement&&m(a)},b=function(a){32===(a.which||a.keyCode)&&a.preventDefault()},m=function(b){var e="LABEL"===b.target.tagName?b.target:"LABEL"===b.target.parentNode.tagName?b.target.parentNode:null;if(e){b=I(b.target.parentNode,"btn");var f=e.getElementsByTagName("INPUT")[0];if(f){"checkbox"===f.type&&(f.checked?(y(e,"active"),f.getAttribute("checked"),f.removeAttribute("checked"),f.checked=!1):(w(e,"active"),f.getAttribute("checked"),f.setAttribute("checked","checked"),f.checked=!0),c||(c=!0, +x.call(f,"change","button"),x.call(a,"change","button")));if("radio"===f.type&&!c&&!f.checked){w(e,"active");f.setAttribute("checked","checked");f.checked=!0;x.call(f,"change","button");x.call(a,"change","button");c=!0;f=0;for(var h=b.length;fb||c===A-1&&0===b)l=h.direction="right";0>b?b=A-1:b===A&&(b=0);n=b;var e="left"===l?"next":"prev";x.call(a,"slide","carousel",d[b]);k=!0;clearInterval(v);F(b);N&&p(a,"slide")?(w(d[b],"carousel-item-"+e),d[b].offsetWidth,w(d[b],"carousel-item-"+l),w(d[c],"carousel-item-"+l),U(d[b],T,function(f){f=f.target!== +d[b]?1E3*f.elapsedTime+100:20;k&&setTimeout(function(){k=!1;w(d[b],"active");y(d[c],"active");y(d[b],"carousel-item-"+e);y(d[b],"carousel-item-"+l);y(d[c],"carousel-item-"+l);x.call(a,"slid","carousel",d[b]);g.hidden||!h.interval||p(a,"paused")||h.cycle()},f)})):(w(d[b],"active"),d[b].offsetWidth,y(d[c],"active"),setTimeout(function(){k=!1;h.interval&&!p(a,"paused")&&h.cycle();x.call(a,"slid","carousel",d[b])},100))}};this.getActiveIndex=function(){return d.indexOf(I(a,"carousel-item active")[0])|| +0};"Carousel"in a||(h.pause&&h.interval&&(u(a,K[0],b),u(a,K[1],e),u(a,"touchstart",b),u(a,"touchend",e)),B&&u(B,"click",f),r&&u(r,"click",f),c&&u(c,"click",m),!0===h.keyboard&&u(z,"keydown",C));0>h.getActiveIndex()&&(d.length&&w(d[0],"active"),t.length&&F(0));h.interval&&h.cycle();a.Carousel=h};D.push(["Carousel",Z,'[data-ride="carousel"]']);var aa=function(a,c){a=q(a);c=c||{};var e=null,b=null,m=this,f=a.getAttribute("data-parent"),h,g,v=function(a,b){x.call(a,"show","collapse");a.isAnimating=!0; +w(a,"collapsing");y(a,"collapse");a.style.height=a.scrollHeight+"px";H(a,function(){a.isAnimating=!1;a.setAttribute("aria-expanded","true");b.setAttribute("aria-expanded","true");y(a,"collapsing");w(a,"collapse");w(a,"show");a.style.height="";x.call(a,"shown","collapse")})},k=function(a,b){x.call(a,"hide","collapse");a.isAnimating=!0;a.style.height=a.scrollHeight+"px";y(a,"collapse");y(a,"show");w(a,"collapsing");a.offsetWidth;a.style.height="0px";H(a,function(){a.isAnimating=!1;a.setAttribute("aria-expanded", +"false");b.setAttribute("aria-expanded","false");y(a,"collapsing");w(a,"collapse");a.style.height="";x.call(a,"hidden","collapse")})};this.toggle=function(a){a.preventDefault();p(b,"show")?m.hide():m.show()};this.hide=function(){b.isAnimating||(k(b,a),w(a,"collapsed"))};this.show=function(){e&&(g=(h=q(".collapse.show",e))&&(q('[data-toggle="collapse"][data-target="#'+h.id+'"]',e)||q('[data-toggle="collapse"][href="#'+h.id+'"]',e)));if(!b.isAnimating||h&&!h.isAnimating)g&&h!==b&&(k(h,g),w(g,"collapsed")), +v(b,a),y(a,"collapsed")};"Collapse"in a||u(a,"click",m.toggle);b=function(){var b=a.href&&a.getAttribute("href"),c=a.getAttribute("data-target");return(b=b||c&&"#"===c.charAt(0)&&c)&&q(b)}();b.isAnimating=!1;e=q(c.parent)||f&&G(a,f);a.Collapse=m};D.push(["Collapse",aa,'[data-toggle="collapse"]']);var ba=function(a,c){a=q(a);this.persist=!0===c||"true"===a.getAttribute("data-persist")||!1;var e=this,b=a.parentNode,m=null,f=q(".dropdown-menu",b),h=function(){for(var a=f.children,b=[],c=0;cE.clientHeight;a=g.createElement("div");a.className="modal-scrollbar-measure";g.body.appendChild(a);c=a.offsetWidth-a.clientWidth;g.body.removeChild(a); +k=c},B=function(){b.style.paddingLeft=!n&&v?k+"px":"";b.style.paddingRight=n&&!v?k+"px":""},t=function(){P=1;var a=g.createElement("div");d=q(".modal-backdrop");null===d&&(a.setAttribute("class","modal-backdrop fade"),d=a,g.body.appendChild(d))},C=function(){(d=q(".modal-backdrop"))&&null!==d&&"object"===typeof d&&(P=0,g.body.removeChild(d),d=null);x.call(b,"hidden","modal")},F=function(){p(b,"show")?u(g,"keydown",S):L(g,"keydown",S)},M=function(){p(b,"show")?u(z,"resize",f.update):L(z,"resize",f.update)}, +J=function(){p(b,"show")?u(b,"click",K):L(b,"click",K)},D=function(){O(b);x.call(b,"shown","modal",h)},G=function(){b.style.display="";a&&O(a);if(!I(g,"modal show")[0]){b.style.paddingLeft="";b.style.paddingRight="";g.body.style.paddingRight="";if(A.length)for(var c=0;c\u00d7':r,t.appendChild(b)),b=g.createElement("div"),b.setAttribute("class","popover-body"),b.innerHTML=l.dismissible&&null===r?B+'':B,t.appendChild(b)):(b=g.createElement("div"), +b.innerHTML=l.template,t.innerHTML=b.firstChild.innerHTML);l.container.appendChild(t);t.style.display="block";t.setAttribute("class","popover bs-popover-"+F+" "+l.animation);W(a,t,F,l.container);!p(t,"show")&&w(t,"show");x.call(a,"show","popover");l.animation?H(t,D):D()}},20)};this.hide=function(){clearTimeout(C);C=setTimeout(function(){t&&null!==t&&p(t,"show")&&(x.call(a,"hide","popover"),y(t,"show"),l.animation?H(t,E):E())},l.delay)};"Popover"in a||("hover"===l.trigger?(u(a,K[0],l.show),l.dismissible|| +u(a,K[1],l.hide)):"click"!=l.trigger&&"focus"!=l.trigger||u(a,l.trigger,l.toggle));a.Popover=l}};D.push(["Popover",da,'[data-toggle="popover"]']);var ea=function(a,c){a=q(a);var e=q(a.getAttribute("data-target")),b=a.getAttribute("data-offset");c=c||{};if(c.target||e){e=(e=c.target&&q(c.target)||e)&&e.getElementsByTagName("A");var m=parseInt(b||c.offset)||10,f=[],h=[],g;c=a.offsetHeight=(v?q.top+g:n.offsetTop)-m&&z>g;!u&&n?p(e,"active")||(w(e,"active"),k&&!p(k,"active")&&w(k,"active"),x.call(a,"activate","scrollspy",f[d])):!n&&p(e,"active")&&(y(e, +"active"),k&&p(k,"active")&&!I(e.parentNode,"active").length&&y(k,"active"))}};"ScrollSpy"in a||(u(c,"scroll",this.refresh),u(z,"resize",this.refresh));this.refresh();a.ScrollSpy=this}};D.push(["ScrollSpy",ea,'[data-spy="scroll"]']);var fa=function(a,c){a=q(a);var e=a.getAttribute("data-height");c=c||{};this.height=N?c.height||"true"===e:!1;var b=this,g,f=G(a,".nav"),h=!1,n=f&&q(".dropdown-toggle",f),v,k,d,A,l,r,z=function(){h.style.height="";y(h,"collapsing");f.isAnimating=!1},t=function(){h?l?z(): +setTimeout(function(){h.style.height=r+"px";h.offsetWidth;H(h,z)},50):f.isAnimating=!1;x.call(g,"shown","tab",v)},C=function(){h&&(k.style["float"]="left",d.style["float"]="left",A=k.scrollHeight);w(d,"active");x.call(g,"show","tab",v);y(k,"active");x.call(v,"hidden","tab",g);h&&(r=d.scrollHeight,l=r===A,w(h,"collapsing"),h.style.height=A+"px",h.offsetHeight,k.style["float"]="",d.style["float"]="");p(d,"fade")?setTimeout(function(){w(d,"show");H(d,t)},20):t()};if(f){f.isAnimating=!1;var F=function(){var a= +I(f,"active"),b;1!==a.length||p(a[0].parentNode,"dropdown")?1a||1342177279>>=1)b+=b;return e}},"es6","es3"); -var socket,lastSong="",lastState,currentSong={},playstate="",settings={},alertTimeout,progressTimer,deferredPrompt,dragEl,app={apps:{Playback:{state:"0/-/",scrollPos:0},Queue:{state:"0/any/",scrollPos:0},Browse:{active:"Database",tabs:{Filesystem:{state:"0/-/",scrollPos:0},Playlists:{active:"All",views:{All:{state:"0/-/",scrollPos:0},Detail:{state:"0/-/",scrollPos:0}}},Database:{active:"AlbumArtist",views:{AlbumArtist:{state:"0/-/",scrollPos:0},Genre:{state:"0/-/",scrollPos:0},Artist:{state:"0/-/", +$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(".");for(d=0;da||1342177279>>=1)b+=b;return d}},"es6","es3"); +var socket,lastSong="",lastState,currentSong={},playstate="",settings={},alertTimeout,progressTimer,deferredPrompt,dragEl,playlistEl,app={apps:{Playback:{state:"0/-/",scrollPos:0},Queue:{state:"0/any/",scrollPos:0},Browse:{active:"Database",tabs:{Filesystem:{state:"0/-/",scrollPos:0},Playlists:{active:"All",views:{All:{state:"0/-/",scrollPos:0},Detail:{state:"0/-/",scrollPos:0}}},Database:{active:"AlbumArtist",views:{AlbumArtist:{state:"0/-/",scrollPos:0},Genre:{state:"0/-/",scrollPos:0},Artist:{state:"0/-/", scrollPos:0},Composer:{state:"0/-/",scrollPos:0},Performer:{state:"0/-/",scrollPos:0},Date:{state:"0/-/",scrollPos:0},Album:{state:"0/-/",scrollPos:0}}}}},Search:{state:"0/any/",scrollPos:0}},current:{app:"Playback",tab:void 0,view:void 0,page:0,filter:"",search:"",scrollPos:0},last:{app:void 0,tab:void 0,view:void 0,filter:"",search:"",scrollPos:0}},domCache={};domCache.navbarBottomBtns=document.getElementById("navbar-bottom").getElementsByTagName("div");domCache.navbarBottomBtnsLen=domCache.navbarBottomBtns.length; domCache.panelHeadingBrowse=document.getElementById("panel-heading-browse").getElementsByTagName("a");domCache.panelHeadingBrowseLen=domCache.panelHeadingBrowse.length;domCache.counter=document.getElementById("counter");domCache.volumePrct=document.getElementById("volumePrct");domCache.volumeControl=document.getElementById("volumeControl");domCache.volumeIcon=document.getElementById("volumeIcon");domCache.btnsPlay=document.getElementsByClassName("btnPlay");domCache.btnsPlayLen=domCache.btnsPlay.length; domCache.btnPrev=document.getElementById("btnPrev");domCache.btnNext=document.getElementById("btnNext");domCache.progressBar=document.getElementById("progressBar");domCache.volumeBar=document.getElementById("volumeBar");domCache.outputs=document.getElementById("outputs");domCache.btnAdd=document.getElementById("nav-add2homescreen");domCache.currentTrack=document.getElementById("currentTrack");domCache.currentArtist=document.getElementById("currentArtist");domCache.currentAlbum=document.getElementById("currentAlbum"); domCache.currentCover=document.getElementById("currentCover");domCache.btnVoteUp=document.getElementById("btnVoteUp");domCache.btnVoteDown=document.getElementById("btnVoteDown"); -var modalConnectionError=new Modal(document.getElementById("modalConnectionError")),modalSettings=new Modal(document.getElementById("modalSettings")),modalSavequeue=new Modal(document.getElementById("modalSaveQueue")),modalSongDetails=new Modal(document.getElementById("modalSongDetails")),modalAddToPlaylist=new Modal(document.getElementById("modalAddToPlaylist")),modalRenamePlaylist=new Modal(document.getElementById("modalRenamePlaylist")),modalUpdateDB=new Modal(document.getElementById("modalUpdateDB")); +var modalConnectionError=new Modal(document.getElementById("modalConnectionError"),{backdrop:"static",keyboard:!1}),modalSettings=new Modal(document.getElementById("modalSettings")),modalSavequeue=new Modal(document.getElementById("modalSaveQueue")),modalSongDetails=new Modal(document.getElementById("modalSongDetails")),modalAddToPlaylist=new Modal(document.getElementById("modalAddToPlaylist")),modalRenamePlaylist=new Modal(document.getElementById("modalRenamePlaylist")),modalUpdateDB=new Modal(document.getElementById("modalUpdateDB")); function appPrepare(a){if(app.current.app!=app.last.app||app.current.tab!=app.last.tab||app.current.view!=app.last.view){for(var b=0;b'+c[a]+"";break}d+=c[a];b+='";d+="/"}a=document.getElementById("BrowseBreadcrumb");a.innerHTML=b;b=a.getElementsByTagName("a");c=b.length;for(a=0;a'+c[a]+"";break}e+=c[a];b+='";e+="/"}a=document.getElementById("BrowseBreadcrumb");a.innerHTML=b;b=a.getElementsByTagName("a");c=b.length;for(a=0;asearchSearching...'),2<=app.current.search.length?sendAPI({cmd:"MPD_API_DATABASE_SEARCH",data:{plist:"",offset:app.current.page,filter:app.current.filter,searchstr:app.current.search}},parseSearch):(document.getElementById("SearchList").getElementsByTagName("tbody")[0].innerHTML="",document.getElementById("searchAddAllSongs").setAttribute("disabled", "disabled"),document.getElementById("searchAddAllSongsBtn").setAttribute("disabled","disabled"),document.getElementById("panel-heading-search").innerText="",document.getElementById("SearchList").classList.remove("opacity05"),setPagination(0)),selectTag("searchtags","searchtagsdesc",app.current.filter)):appGoto("Playback");app.last.app=app.current.app;app.last.tab=app.current.tab;app.last.view=app.current.view}else appGoto("Playback")} function appInit(){getSettings();sendAPI({cmd:"MPD_API_PLAYER_STATE"},parseState);webSocketConnect();domCache.volumeBar.value=0;domCache.volumeBar.addEventListener("click",function(a){a.stopPropagation()},!1);domCache.volumeBar.addEventListener("change",function(a){sendAPI({cmd:"MPD_API_PLAYER_VOLUME",data:{volume:domCache.volumeBar.value}})},!1);domCache.progressBar.value=0;domCache.progressBar.addEventListener("change",function(a){currentSong&&0<=currentSong.currentSongId&&sendAPI({cmd:"MPD_API_PLAYER_SEEK", @@ -38,108 +38,109 @@ function(a){"TD"==a.target.nodeName&&appGoto("Browse","Database",app.current.vie a.target.nodeName&&("Add all to queue"==a.target.innerText?addAllFromBrowse():"Add all to playlist"==a.target.innerText&&showAddToPlaylist(app.current.search))},!1);document.getElementById("searchAddAllSongsDropdown").addEventListener("click",function(a){"BUTTON"==a.target.nodeName&&("Add all to queue"==a.target.innerText?addAllFromSearchPlist("queue"):"Add all to playlist"==a.target.innerText&&showAddToPlaylist("SEARCH"))},!1);document.getElementById("BrowseDatabaseAddAllSongsDropdown").addEventListener("click", function(a){"BUTTON"==a.target.nodeName&&("Add all to queue"==a.target.innerText?addAllFromBrowseDatabasePlist("queue"):"Add all to playlist"==a.target.innerText&&showAddToPlaylist("DATABASE"))},!1);document.getElementById("searchtags").addEventListener("click",function(a){"BUTTON"==a.target.nodeName&&appGoto(app.current.app,app.current.tab,app.current.view,"0/"+a.target.getAttribute("data-tag")+"/"+app.current.search)},!1);document.getElementById("searchqueuestr").addEventListener("keyup",function(a){appGoto(app.current.app, app.current.tab,app.current.view,"0/"+app.current.filter+"/"+this.value)},!1);document.getElementById("searchqueuetag").addEventListener("click",function(a){"BUTTON"==a.target.nodeName&&appGoto(app.current.app,app.current.tab,app.current.view,app.current.page+"/"+a.target.getAttribute("data-tag")+"/"+app.current.search)},!1);document.getElementById("search").addEventListener("submit",function(){return!1},!1);document.getElementById("searchqueue").addEventListener("submit",function(){return!1},!1); -document.getElementById("searchstr").addEventListener("keyup",function(a){appGoto("Search",void 0,void 0,"0/"+app.current.filter+"/"+this.value)},!1);document.getElementById("BrowseDatabaseByTagDropdown").addEventListener("click",function(a){"BUTTON"==a.target.nodeName&&appGoto(app.current.app,app.current.tab,a.target.getAttribute("data-tag"),"0/"+app.current.filter+"/"+app.current.search)},!1);document.getElementsByTagName("body")[0].addEventListener("click",function(a){(a=document.getElementsByClassName("popover")[0])&& -a.remove()},!1);dragAndDropTable("QueueList");dragAndDropTable("BrowsePlaylistsDetailList");window.addEventListener("hashchange",appRoute,!1);window.addEventListener("focus",function(){sendAPI({cmd:"MPD_API_PLAYER_STATE"},parseState)},!1);document.addEventListener("keydown",function(a){if("INPUT"!=a.target.tagName){switch(a.which){case 37:clickPrev();break;case 39:clickNext();break;case 32:clickPlay();break;default:return}a.preventDefault()}},!1);"serviceWorker"in navigator&&"https"==document.URL.substring(0, -5)&&window.addEventListener("load",function(){navigator.serviceWorker.register("/sw.min.js",{scope:"/"}).then(function(a){console.log("ServiceWorker registration successful with scope: ",a.scope);a.update()},function(a){console.log("ServiceWorker registration failed: ",a)})});window.addEventListener("beforeinstallprompt",function(a){a.preventDefault();deferredPrompt=a});window.addEventListener("beforeinstallprompt",function(a){a.preventDefault();deferredPrompt=a;domCache.btnAdd.classList.remove("hide")}); +document.getElementById("searchstr").addEventListener("keyup",function(a){appGoto("Search",void 0,void 0,"0/"+app.current.filter+"/"+this.value)},!1);document.getElementById("BrowseDatabaseByTagDropdown").addEventListener("click",function(a){"BUTTON"==a.target.nodeName&&appGoto(app.current.app,app.current.tab,a.target.getAttribute("data-tag"),"0/"+app.current.filter+"/"+app.current.search)},!1);document.getElementsByTagName("body")[0].addEventListener("click",function(a){a=document.getElementsByClassName("popover"); +for(var b=0;b";domCache.outputs.innerHTML=b} -function setCounter(a,b,c){currentSong.totalTime=b;currentSong.elapsedTime=c;currentSong.currentSongId=a;var e=Math.floor(b/60),d=b-60*e,f=Math.floor(c/60),g=c-60*f;domCache.progressBar.value=Math.floor(100*c/b);b=f+":"+(10>g?"0":"")+g+" / "+e+":"+(10>d?"0":"")+d;domCache.counter.innerText=b;lastState&&(c=document.getElementById("queueTrackId"+lastState.data.currentSongId))&&(e=c.getElementsByTagName("td"),e[4].innerText=c.getAttribute("data-duration"),e[0].classList.remove("material-icons"),e[0].innerText= -c.getAttribute("data-songpos"),c.classList.remove("font-weight-bold"));if(c=document.getElementById("queueTrackId"+a))e=c.getElementsByTagName("td"),e[4].innerText=b,e[0].classList.add("material-icons"),e[0].innerText="play_arrow",c.classList.add("font-weight-bold");progressTimer&&clearTimeout(progressTimer);"play"==playstate&&(progressTimer=setTimeout(function(){currentSong.elapsedTime++;setCounter(currentSong.currentSongId,currentSong.totalTime,currentSong.elapsedTime)},1E3))} -function parseState(a){if(JSON.stringify(a)!==JSON.stringify(lastState)){if(1==a.data.state){for(var b=0;b=a.data.songPos?domCache.btnPrev.setAttribute("disabled","disabled"):domCache.btnPrev.removeAttribute("disabled");if(0==a.data.queueLength)for(b=0;ba.data.volume?"volume_down":"volume_up");domCache.volumeBar.value=a.data.volume;setCounter(a.data.currentSongId,a.data.totalTime,a.data.elapsedTime);sendAPI({cmd:"MPD_API_PLAYER_CURRENT_SONG"},songChange);"-1"==a.data.songPos&&(domCache.currentTrack.innerText="Not playing",domCache.currentAlbum.innerText="",domCache.currentArtist.innerText="",domCache.currentCover.style.backgroundImage="");lastState=a}} -function getQueue(){2<=app.current.search.length?sendAPI({cmd:"MPD_API_QUEUE_SEARCH",data:{filter:app.current.filter,offset:app.current.page,searchstr:app.current.search}},parseQueue):sendAPI({cmd:"MPD_API_QUEUE_LIST",data:{offset:app.current.page}},parseQueue)} +notificationsSupported()?a.data.notificationWeb?(toggleBtn("btnnotifyWeb",a.data.notificationWeb),Notification.requestPermission(function(b){"permission"in Notification||(Notification.permission=b);"granted"===b?toggleBtn("btnnotifyWeb",1):(toggleBtn("btnnotifyWeb",0),a.data.notificationWeb=!0)})):toggleBtn("btnnotifyWeb",0):(b.setAttribute("disabled","disabled"),toggleBtn("btnnotifyWeb",0));toggleBtn("btnnotifyPage",a.data.notificationPage);b=document.getElementsByClassName("stickers");for(var c= +b.length,d=1==a.data.stickers?"":"none",e=0;e";domCache.outputs.innerHTML=b} +function setCounter(a,b,c){currentSong.totalTime=b;currentSong.elapsedTime=c;currentSong.currentSongId=a;var d=Math.floor(b/60),e=b-60*d,f=Math.floor(c/60),g=c-60*f;domCache.progressBar.value=Math.floor(100*c/b);b=f+":"+(10>g?"0":"")+g+" / "+d+":"+(10>e?"0":"")+e;domCache.counter.innerText=b;lastState&&(c=document.getElementById("queueTrackId"+lastState.data.currentSongId))&&(d=c.getElementsByTagName("td"),d[4].innerText=c.getAttribute("data-duration"),d[0].classList.remove("material-icons"),d[0].innerText= +c.getAttribute("data-songpos"),c.classList.remove("font-weight-bold"));if(c=document.getElementById("queueTrackId"+a))d=c.getElementsByTagName("td"),d[4].innerText=b,d[0].classList.add("material-icons"),d[0].innerText="play_arrow",c.classList.add("font-weight-bold");progressTimer&&clearTimeout(progressTimer);"play"==playstate&&(progressTimer=setTimeout(function(){currentSong.elapsedTime++;setCounter(currentSong.currentSongId,currentSong.totalTime,currentSong.elapsedTime)},1E3))} +function parseState(a){if(JSON.stringify(a)!==JSON.stringify(lastState)){if(1==a.data.state){for(var b=0;b=a.data.songPos?domCache.btnPrev.setAttribute("disabled","disabled"):domCache.btnPrev.removeAttribute("disabled");if(0==a.data.queueLength)for(b=0;ba.data.volume?"volume_down":"volume_up");domCache.volumeBar.value=a.data.volume;setCounter(a.data.currentSongId,a.data.totalTime,a.data.elapsedTime);sendAPI({cmd:"MPD_API_PLAYER_CURRENT_SONG"},songChange);"-1"==a.data.songPos&&(domCache.currentTrack.innerText="Not playing",domCache.currentAlbum.innerText="",domCache.currentArtist.innerText="",domCache.currentCover.style.backgroundImage= +"");lastState=a}}function getQueue(){2<=app.current.search.length?sendAPI({cmd:"MPD_API_QUEUE_SEARCH",data:{filter:app.current.filter,offset:app.current.page,searchstr:app.current.search}},parseQueue):sendAPI({cmd:"MPD_API_QUEUE_LIST",data:{offset:app.current.page}},parseQueue)} function parseQueue(a){if("Queue"===app.current.app){0g?"0":"")+g;g=document.createElement("tr");g.setAttribute("draggable","true");g.setAttribute("data-trackid",a.data[d].id);g.setAttribute("id","queueTrackId"+a.data[d].id);g.setAttribute("data-songpos",a.data[d].pos+1);g.setAttribute("data-duration", -f);g.setAttribute("data-uri",a.data[d].uri);g.innerHTML=""+(a.data[d].pos+1)+""+a.data[d].title+""+a.data[d].artist+""+a.data[d].album+""+f+'playlist_add';d=b;d--)e[d].remove();"queuesearch"==a.type&&0==b?c.innerHTML='error_outlineNo results, please refine your search!': +c=c.getElementsByTagName("tbody")[0];for(var d=c.getElementsByTagName("tr"),e=0;eg?"0":"")+g;g=document.createElement("tr");g.setAttribute("draggable","true");g.setAttribute("data-trackid",a.data[e].id);g.setAttribute("id","queueTrackId"+a.data[e].id);g.setAttribute("data-songpos",a.data[e].pos+1);g.setAttribute("data-duration", +f);g.setAttribute("data-uri",a.data[e].uri);g.innerHTML=""+(a.data[e].pos+1)+""+a.data[e].title+""+a.data[e].artist+""+a.data[e].album+""+f+'playlist_add';e=b;e--)d[e].remove();"queuesearch"==a.type&&0==b?c.innerHTML='error_outlineNo results, please refine your search!': "queue"==a.type&&0==b&&(c.innerHTML='error_outlineEmpty queue');setPagination(a.totalEntities);document.getElementById("QueueList").classList.remove("opacity05")}} function parseSearch(a){"Search"===app.current.app&&(document.getElementById("panel-heading-search").innerHTML=a.totalEntities+" Songs found",0playlist_add';break;case "song":f=Math.floor(a.data[d].duration/60);var h=a.data[d].duration-60*f;g.innerHTML='music_note'+a.data[d].title+""+a.data[d].artist+""+a.data[d].album+""+f+":"+(10>h?"0":"")+h+'playlist_add'; -break;case "plist":g.innerHTML='list'+a.data[d].name+'playlist_add'}d=b;d--)e[d].remove();setPagination(a.totalEntities);0==b&&(c.innerHTML='error_outlineNo results');document.getElementById(app.current.app+(void 0==app.current.tab?"": +function parseFilesystem(a){if("Browse"===app.current.app||"Filesystem"===app.current.tab||"Search"===app.current.app){for(var b=a.data.length,c=document.getElementById(app.current.app+(void 0==app.current.tab?"":app.current.tab)+"List").getElementsByTagName("tbody")[0],d=c.getElementsByTagName("tr"),e=0;eplaylist_add';break;case "song":f=Math.floor(a.data[e].duration/60);var h=a.data[e].duration-60*f;g.innerHTML='music_note'+a.data[e].title+""+a.data[e].artist+""+a.data[e].album+""+f+":"+(10>h?"0":"")+h+'playlist_add'; +break;case "plist":g.innerHTML='list'+a.data[e].name+'playlist_add'}e=b;e--)d[e].remove();setPagination(a.totalEntities);0==b&&(c.innerHTML='error_outlineNo results');document.getElementById(app.current.app+(void 0==app.current.tab?"": app.current.tab)+"List").classList.remove("opacity05")}} function parsePlaylists(a){if("Browse"===app.current.app||"Playlists"===app.current.tab){"All"==app.current.view?(document.getElementById("BrowsePlaylistsAllList").classList.remove("hide"),document.getElementById("BrowsePlaylistsDetailList").classList.add("hide"),document.getElementById("btnBrowsePlaylistsAll").parentNode.classList.add("hide"),document.getElementById("btnPlaylistClear").parentNode.classList.add("hide")):(-1"+g.toUTCString()+'playlist_add';d"+g+""+a.data[d].title+""+a.data[d].artist+""+a.data[d].album+""+f+":"+(10>k?"0":"")+k+'playlist_add'; -d=b;d--)e[d].remove();setPagination(a.totalEntities);0==b&&(c.innerHTML="All"==app.current.view?'error_outlineNo playlists found.':'error_outlineEmpty playlist.');document.getElementById(app.current.app+app.current.tab+app.current.view+"List").classList.remove("opacity05")}} +document.getElementById("BrowsePlaylistsAllList").classList.add("hide"),document.getElementById("btnBrowsePlaylistsAll").parentNode.classList.remove("hide"));var b=a.data.length,c=document.getElementById(app.current.app+app.current.tab+app.current.view+"List").getElementsByTagName("tbody")[0],d=c.getElementsByTagName("tr");if("All"==app.current.view)for(var e=0;e"+g.toUTCString()+'playlist_add';e"+g+""+a.data[e].title+""+a.data[e].artist+""+a.data[e].album+""+f+":"+(10>k?"0":"")+k+'playlist_add'; +e=b;e--)d[e].remove();setPagination(a.totalEntities);0==b&&(c.innerHTML="All"==app.current.view?'error_outlineNo playlists found.':'error_outlineEmpty playlist.');document.getElementById(app.current.app+app.current.tab+app.current.view+"List").classList.remove("opacity05")}} function parseListDBtags(a){if(""!=app.current.search){document.getElementById("BrowseDatabaseAlbumList").classList.remove("hide");document.getElementById("BrowseDatabaseTagList").classList.add("hide");document.getElementById("btnBrowseDatabaseByTag").parentNode.classList.add("hide");document.getElementById("btnBrowseDatabaseTag").parentNode.classList.remove("hide");document.getElementById("BrowseDatabaseAddAllSongs").parentNode.parentNode.classList.remove("hide");document.getElementById("btnBrowseDatabaseTag").innerHTML= -"« "+app.current.view;document.getElementById("BrowseDatabaseAlbumListCaption").innerText=a.searchtagtype+": "+a.searchstr;var b=a.data.length;1==b&&""==a.data[0].value&&(b=0);for(var c=document.getElementById("BrowseDatabaseAlbumList"),e=c.getElementsByClassName("col-md"),d=0;d

'+a.data[d].value+'

';d=b;d--)e[d].remove();setPagination(a.totalEntities);document.getElementById("BrowseDatabaseAlbumList").classList.remove("opacity05")}else{document.getElementById("BrowseDatabaseAlbumList").classList.add("hide");document.getElementById("BrowseDatabaseTagList").classList.remove("hide");document.getElementById("btnBrowseDatabaseByTag").parentNode.classList.remove("hide");document.getElementById("BrowseDatabaseAddAllSongs").parentNode.parentNode.classList.add("hide");document.getElementById("btnBrowseDatabaseTag").parentNode.classList.add("hide"); -a.data[0]&&""==a.data[0].value&&a.data.shift();b=a.data.length;c=document.getElementById(app.current.app+app.current.tab+"TagList").getElementsByTagName("tbody")[0];e=c.getElementsByTagName("tr");for(d=0;dalbum'+a.data[d].value+"",d=b;d--)e[d].remove(); -setPagination(a.totalEntities);0==b&&(c.innerHTML='error_outlineNo entries found.');document.getElementById("BrowseDatabaseTagList").classList.remove("opacity05")}} -function parseListTitles(a){var b=genId(a.album),c=document.getElementById("card"+b),e=c.getElementsByTagName("tbody")[0],d=c.getElementsByTagName("img")[0];c=d.parentNode;d.setAttribute("src",a.cover);c.setAttribute("data-uri",encodeURI(a.data[0].uri.replace(/\/[^\/]+$/,"")));c.setAttribute("data-name",a.album);c.setAttribute("data-type","dir");document.getElementById("albumartist"+b).innerText=a.albumartist;b="";d=a.data.length;for(var f=0;f'+a.data[f].track+""+a.data[f].title+'playlist_add';e.innerHTML=b;c.addEventListener("click",function(a){showMenu(this,a)},!1);e.parentNode.addEventListener("click",function(a){"TD"==a.target.nodeName?appendQueue("song",decodeURI(a.target.parentNode.getAttribute("data-uri")),a.target.parentNode.getAttribute("data-name")):"A"==a.target.nodeName&&showMenu(a.target,a)},!1)} -function setPagination(a){var b=Math.ceil(a/settings.maxElementsPerPage),c=app.current.app+(void 0==app.current.tab?"":app.current.tab);0==b&&(b=1);for(var e=["PaginationTop","PaginationBottom"],d=0;2>d;d++){document.getElementById(c+e[d]+"Page").innerText=app.current.page/settings.maxElementsPerPage+1+" / "+b;if(1'+ -(g+1)+"";document.getElementById(c+e[d]+"Pages").innerHTML=f}else document.getElementById(c+e[d]+"Page").setAttribute("disabled","disabled");a>app.current.page+settings.maxElementsPerPage?(document.getElementById(c+e[d]+"Next").removeAttribute("disabled"),document.getElementById(c+e[d]).classList.remove("hide"),document.getElementById(c+"ButtonsBottom").classList.remove("hide")):(document.getElementById(c+e[d]+"Next").setAttribute("disabled","disabled"),document.getElementById(c+e[d]).classList.add("hide"), -document.getElementById(c+"ButtonsBottom").classList.add("hide"));0

'+a.data[e].value+'

';e=b;e--)d[e].remove();setPagination(a.totalEntities);document.getElementById("BrowseDatabaseAlbumList").classList.remove("opacity05")}else{document.getElementById("BrowseDatabaseAlbumList").classList.add("hide"); +document.getElementById("BrowseDatabaseTagList").classList.remove("hide");document.getElementById("btnBrowseDatabaseByTag").parentNode.classList.remove("hide");document.getElementById("BrowseDatabaseAddAllSongs").parentNode.parentNode.classList.add("hide");document.getElementById("btnBrowseDatabaseTag").parentNode.classList.add("hide");b=a.data.length;c=document.getElementById(app.current.app+app.current.tab+"TagList").getElementsByTagName("tbody")[0];d=c.getElementsByTagName("tr");for(e=0;ealbum'+a.data[e].value+"",e=b;e--)d[e].remove();setPagination(a.totalEntities);0==b&&(c.innerHTML='error_outlineNo entries found.');document.getElementById("BrowseDatabaseTagList").classList.remove("opacity05")}} +function parseListTitles(a){var b=genId(a.album),c=document.getElementById("card"+b),d=c.getElementsByTagName("tbody")[0],e=c.getElementsByTagName("img")[0];c=e.parentNode;e.setAttribute("src",a.cover);c.setAttribute("data-uri",encodeURI(a.data[0].uri.replace(/\/[^\/]+$/,"")));c.setAttribute("data-name",a.album);c.setAttribute("data-type","dir");document.getElementById("albumartist"+b).innerText=a.albumartist;b="";e=a.data.length;for(var f=0;f'+a.data[f].track+""+a.data[f].title+'playlist_add';d.innerHTML=b;c.addEventListener("click",function(a){showMenu(this,a)},!1);d.parentNode.addEventListener("click",function(a){"TD"==a.target.nodeName?appendQueue("song",decodeURI(a.target.parentNode.getAttribute("data-uri")),a.target.parentNode.getAttribute("data-name")):"A"==a.target.nodeName&&showMenu(a.target,a)},!1)} +function setPagination(a){var b=Math.ceil(a/settings.maxElementsPerPage),c=app.current.app+(void 0==app.current.tab?"":app.current.tab);0==b&&(b=1);for(var d=["PaginationTop","PaginationBottom"],e=0;2>e;e++){document.getElementById(c+d[e]+"Page").innerText=app.current.page/settings.maxElementsPerPage+1+" / "+b;if(1'+ +(g+1)+"";document.getElementById(c+d[e]+"Pages").innerHTML=f}else document.getElementById(c+d[e]+"Page").setAttribute("disabled","disabled");a>app.current.page+settings.maxElementsPerPage?(document.getElementById(c+d[e]+"Next").removeAttribute("disabled"),document.getElementById(c+d[e]).classList.remove("hide"),document.getElementById(c+"ButtonsBottom").classList.remove("hide")):(document.getElementById(c+d[e]+"Next").setAttribute("disabled","disabled"),document.getElementById(c+d[e]).classList.add("hide"), +document.getElementById(c+"ButtonsBottom").classList.add("hide"));0e?"0":"")+e}c+=""+f+""+e+""}c+='Uri'+a.data.uri+"";if(1==settings.stickers){var f="not voted";0==a.data.like?f='thumb_down_alt':2==a.data.like&&(f='thumb_up_alt');c+='StatisticsPlay count'+a.data.playCount+"Skip count"+a.data.skipCount+"Last played"+(0==a.data.lastPlayed?"never":(new Date(1E3*e)).toUTCString())+"Like"+ +function parseSongDetails(a){var b=document.getElementById("modalSongDetails");b.getElementsByClassName("album-cover")[0].style.backgroundImage='url("'+a.data.cover+'")';b.getElementsByTagName("h1")[0].innerText=a.data.title;var c="";for(f in settings.tags)if(1==settings.tags[f]){var d=a.data[f.toLowerCase()];if("duration"==f){var e=Math.floor(d/60);d-=60*e;d=e+":"+(10>d?"0":"")+d}c+=""+f+""+d+""}c+='Uri'+a.data.uri+"";if(1==settings.stickers){var f="not voted";0==a.data.like?f='thumb_down_alt':2==a.data.like&&(f='thumb_up_alt');c+='StatisticsPlay count'+a.data.playCount+"Skip count"+a.data.skipCount+"Last played"+(0==a.data.lastPlayed?"never":(new Date(1E3*d)).toUTCString())+"Like"+ f+""}b.getElementsByTagName("tbody")[0].innerHTML=c}function playlistDetails(a){appGoto("Browse","Playlists","Detail","0/-/"+a)}function removeFromPlaylist(a,b){b--;sendAPI({cmd:"MPD_API_PLAYLIST_RM_TRACK",data:{uri:a,track:b}});document.getElementById("BrowsePlaylistsDetailList").classList.add("opacity05");sendAPI({cmd:"MPD_API_PLAYLIST_CONTENT_LIST",data:{offset:app.current.page,filter:app.current.filter,uri:app.current.search}},parsePlaylists)} function playlistClear(){var a=document.getElementById("BrowsePlaylistsDetailList").getAttribute("data-uri");sendAPI({cmd:"MPD_API_PLAYLIST_CLEAR",data:{uri:a}});document.getElementById("BrowsePlaylistsDetailList").classList.add("opacity05");sendAPI({cmd:"MPD_API_PLAYLIST_CONTENT_LIST",data:{offset:app.current.page,filter:app.current.filter,uri:app.current.search}},parsePlaylists)} -function getAllPlaylists(a){for(var b=a.data.length,c="",e=0;e"+a.data[e].uri+"";document.getElementById("addToPlaylistPlaylist").innerHTML+=c;a.totalEntities>a.returnedEntities&&(a.offset+=settings.maxElementsPerPage,sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:a.offset,filter:"-"}},getAllPlaylists))} -function voteSong(a){var b=domCache.currentTrack.getAttribute("data-uri");""!=b&&(2==a&&domCache.btnVoteUp.classList.contains("active-fg-green")?a=1:0==a&&domCache.btnVoteDown.classList.contains("active-fg-red")&&(a=1),sendAPI({cmd:"MPD_API_LIKE",data:{uri:b,like:a}}),setVoteSongBtns(a,b))} +function getAllPlaylists(a){var b=a.data.length,c="";0==a.offset&&("addToPlaylistPlaylist"==playlistEl?c="":"jukeboxPlaylist"==playlistEl&&(c=""));for(var d=0;d";0==a.offset?document.getElementById(playlistEl).innerHTML=c:document.getElementById(playlistEl).innerHTML+=c;a.totalEntities>a.returnedEntities&& +(a.offset+=settings.maxElementsPerPage,sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:a.offset,filter:"-"}},getAllPlaylists))}function voteSong(a){var b=domCache.currentTrack.getAttribute("data-uri");""!=b&&(2==a&&domCache.btnVoteUp.classList.contains("active-fg-green")?a=1:0==a&&domCache.btnVoteDown.classList.contains("active-fg-red")&&(a=1),sendAPI({cmd:"MPD_API_LIKE",data:{uri:b,like:a}}),setVoteSongBtns(a,b))} function setVoteSongBtns(a,b){""==b||0==b.indexOf("http://")||0==b.indexOf("https://")?(domCache.btnVoteUp.setAttribute("disabled","disabled"),domCache.btnVoteDown.setAttribute("disabled","disabled")):(domCache.btnVoteUp.removeAttribute("disabled"),domCache.btnVoteDown.removeAttribute("disabled"));0==a?(domCache.btnVoteUp.classList.remove("active-fg-green"),domCache.btnVoteDown.classList.add("active-fg-red")):1==a?(domCache.btnVoteUp.classList.remove("active-fg-green"),domCache.btnVoteDown.classList.remove("active-fg-red")): 2==a&&(domCache.btnVoteUp.classList.add("active-fg-green"),domCache.btnVoteDown.classList.remove("active-fg-red"))} function toggleAddToPlaylistFrm(){var a=document.getElementById("toggleAddToPlaylistBtn");toggleBtn("toggleAddToPlaylistBtn");a.classList.contains("active")?(document.getElementById("addToPlaylistFrm").classList.remove("hide"),document.getElementById("addStreamFooter").classList.add("hide"),document.getElementById("addToPlaylistFooter").classList.remove("hide")):(document.getElementById("addToPlaylistFrm").classList.add("hide"),document.getElementById("addStreamFooter").classList.remove("hide"),document.getElementById("addToPlaylistFooter").classList.add("hide"))} function showAddToPlaylist(a){document.getElementById("addToPlaylistUri").value=a;document.getElementById("addToPlaylistPlaylist").innerHTML="";document.getElementById("addToPlaylistNewPlaylist").value="";document.getElementById("addToPlaylistNewPlaylistDiv").classList.add("hide");document.getElementById("addToPlaylistFrm").classList.remove("was-validated");document.getElementById("addToPlaylistNewPlaylist").classList.remove("is-invalid");toggleBtn("toggleAddToPlaylistBtn",0);var b=document.getElementById("streamUrl"); b.focus();b.value="";b.classList.remove("is-invalid");document.getElementById("addStreamFrm").classList.remove("was-validated");"stream"!=a?(document.getElementById("addStreamFooter").classList.add("hide"),document.getElementById("addStreamFrm").classList.add("hide"),document.getElementById("addToPlaylistFooter").classList.remove("hide"),document.getElementById("addToPlaylistFrm").classList.remove("hide"),document.getElementById("addToPlaylistLabel").innerText="Add to playlist"):(document.getElementById("addStreamFooter").classList.remove("hide"), -document.getElementById("addStreamFrm").classList.remove("hide"),document.getElementById("addToPlaylistFooter").classList.add("hide"),document.getElementById("addToPlaylistFrm").classList.add("hide"),document.getElementById("addToPlaylistLabel").innerText="Add Stream");modalAddToPlaylist.show();sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:0,filter:"-"}},getAllPlaylists)} +document.getElementById("addStreamFrm").classList.remove("hide"),document.getElementById("addToPlaylistFooter").classList.add("hide"),document.getElementById("addToPlaylistFrm").classList.add("hide"),document.getElementById("addToPlaylistLabel").innerText="Add Stream");modalAddToPlaylist.show();playlistEl="addToPlaylistPlaylist";sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:0,filter:"-"}},getAllPlaylists)} function addToPlaylist(){var a=document.getElementById("addToPlaylistUri").value;if("stream"==a&&(a=document.getElementById("streamUrl").value,""==a||-1==a.indexOf("http"))){document.getElementById("streamUrl").classList.add("is-invalid");document.getElementById("addStreamFrm").classList.add("was-validated");return}var b=document.getElementById("addToPlaylistPlaylist");b=b.options[b.selectedIndex].text;if("New Playlist"==b){b=document.getElementById("addToPlaylistNewPlaylist").value;var c=b.replace(/\w\-/g, "");if(""==b||""!=c){document.getElementById("addToPlaylistNewPlaylist").classList.add("is-invalid");document.getElementById("addToPlaylistFrm").classList.add("was-validated");return}}""!=b?("SEARCH"==a?addAllFromSearchPlist(b):"DATABASE"==a?addAllFromBrowseDatabasePlist(b):sendAPI({cmd:"MPD_API_PLAYLIST_ADD_TRACK",data:{uri:a,plist:b}}),modalAddToPlaylist.hide()):(document.getElementById("addToPlaylistPlaylist").classList.add("is-invalid"),document.getElementById("addToPlaylistFrm").classList.add("was-validated"))} function addStream(){var a=document.getElementById("streamUrl").value;""!=a&&0==a.indexOf("http")?(sendAPI({cmd:"MPD_API_QUEUE_ADD_TRACK",data:{uri:a}}),modalAddToPlaylist.hide(),showNotification("Added stream "+a+"to queue","","","success")):(document.getElementById("streamUrl").classList.add("is-invalid"),document.getElementById("addStreamFrm").classList.add("was-validated"))} function showRenamePlaylist(a){document.getElementById("renamePlaylistFrm").classList.remove("was-validated");document.getElementById("renamePlaylistTo").classList.remove("is-invalid");modalRenamePlaylist.show();document.getElementById("renamePlaylistFrom").value=a;document.getElementById("renamePlaylistTo").value=""} function renamePlaylist(){var a=document.getElementById("renamePlaylistFrom").value,b=document.getElementById("renamePlaylistTo").value,c=b.replace(/\w\-/g,"");""!=b&&b!=a&&""==c?(sendAPI({cmd:"MPD_API_PLAYLIST_RENAME",data:{from:a,to:b}}),modalRenamePlaylist.hide(),sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:app.current.page,filter:app.current.filter}},parsePlaylists)):(document.getElementById("renamePlaylistTo").classList.add("is-invalid"),document.getElementById("renamePlaylistFrm").classList.add("was-validated"))} function dirname(a){return a.replace(/\/[^\/]*$/,"")}function addMenuItem(a,b){return'"+b+""} -function showMenu(a,b){b.preventDefault();b.stopPropagation();(b=document.getElementsByClassName("popover")[0])&&b.remove();b=a.getAttribute("data-type");var c=decodeURI(a.getAttribute("data-uri")),e=a.getAttribute("data-name"),d=0;if(null==b||null==c)b=a.parentNode.parentNode.getAttribute("data-type"),c=decodeURI(a.parentNode.parentNode.getAttribute("data-uri")),e=a.parentNode.parentNode.getAttribute("data-name");lastState&&(d=lastState.data.nextsongpos);var f="";"Browse"==app.current.app&&"Filesystem"== -app.current.tab||"Search"==app.current.app||"Browse"==app.current.app&&"Database"==app.current.tab?(f+=addMenuItem({cmd:"appendQueue",options:[b,c,e]},"Append to queue")+("song"==b?addMenuItem({cmd:"appendAfterQueue",options:[b,c,d,e]},"Add after current playing song"):"")+addMenuItem({cmd:"replaceQueue",options:[b,c,e]},"Replace queue")+("plist"!=b?addMenuItem({cmd:"showAddToPlaylist",options:[c]},"Add to playlist"):"")+("song"==b?addMenuItem({cmd:"songDetails",options:[c]},"Songdetails"):"")+("plist"== -b?addMenuItem({cmd:"playlistDetails",options:[c]},"Show playlist"):""),"Search"==app.current.app&&(c=dirname(c),f+='keyboard_arrow_rightAlbum actions
'+addMenuItem({cmd:"appendQueue",options:[b,c,e]},"Append to queue")+addMenuItem({cmd:"appendAfterQueue",options:[b,c,d, -e]},"Add after current playing song")+addMenuItem({cmd:"replaceQueue",options:[b,c,e]},"Replace queue")+addMenuItem({cmd:"showAddToPlaylist",options:[c]},"Add to playlist")+"
")):"Browse"==app.current.app&&"Playlists"==app.current.tab&&"All"==app.current.view?f+=addMenuItem({cmd:"appendQueue",options:[b,c,e]},"Append to queue")+addMenuItem({cmd:"replaceQueue",options:[b,c,e]},"Replace queue")+addMenuItem({cmd:"playlistDetails",options:[c]},"Edit playlist")+addMenuItem({cmd:"showRenamePlaylist", -options:[c]},"Rename playlist")+addMenuItem({cmd:"delPlaylist",options:[c]},"Delete playlist"):"Browse"==app.current.app&&"Playlists"==app.current.tab&&"Detail"==app.current.view?(d=document.getElementById("BrowsePlaylistsDetailList"),f+=addMenuItem({cmd:"appendQueue",options:[b,c,e]},"Append to queue")+addMenuItem({cmd:"replaceQueue",options:[b,c,e]},"Replace queue")+("false"==d.getAttribute("data-ro")?addMenuItem({cmd:"removeFromPlaylist",options:[d.getAttribute("data-uri"),a.parentNode.parentNode.getAttribute("data-songpos")]}, -"Remove"):"")+("plist"!=b?addMenuItem({cmd:"showAddToPlaylist",options:[c]},"Add to playlist"):"")):"Queue"==app.current.app&&(f+=addMenuItem({cmd:"delQueueSong",options:["single",a.parentNode.parentNode.getAttribute("data-trackid")]},"Remove")+addMenuItem({cmd:"delQueueSong",options:["range",0,a.parentNode.parentNode.getAttribute("data-songpos")]},"Remove all upwards")+addMenuItem({cmd:"delQueueSong",options:["range",parseInt(a.parentNode.parentNode.getAttribute("data-songpos"))-1,-1]},"Remove all downwards")+ -(-1==c.indexOf("http")?addMenuItem({cmd:"songDetails",options:[c]},"Songdetails"):""));new Popover(a,{trigger:"click",delay:0,dismissible:!0,template:'"});var g=a.Popover;a.addEventListener("shown.bs.popover",function(a){document.getElementsByClassName("popover-content")[0].addEventListener("click",function(a){a.preventDefault();a.stopPropagation();if("A"==a.target.nodeName&&(a=a.target.getAttribute("data-href"))){a= -JSON.parse(atob(a));if("function"===typeof window[a.cmd])switch(a.cmd){case "sendAPI":sendAPI.apply(null,$jscomp.arrayFromIterable(a.options));break;default:window[a.cmd].apply(null,$jscomp.arrayFromIterable(a.options))}g.hide()}},!1);if(a=document.getElementById("advancedMenuLink"))a.addEventListener("click",function(a){a=this.getElementsByTagName("span")[0];a.innerText="keyboard_arrow_right"==a.innerText?"keyboard_arrow_down":"keyboard_arrow_right"},!1),new Collapse(a)},!1);g.show()} -function sendAPI(a,b){var c=new XMLHttpRequest;c.open("POST","/api",!0);c.setRequestHeader("Content-type","application/json");c.onreadystatechange=function(){if(4==c.readyState)if(""!=c.responseText){var e=JSON.parse(c.responseText);"error"==e.type?(showNotification("Error",e.data,e.data,"danger"),console.log("Error: "+e.data)):"result"==e.type&&"ok"!=e.data?showNotification(e.data,"","","success"):void 0!=b&&"function"==typeof b&&b(e)}else console.log("Empty response for request: "+JSON.stringify(a))}; +function showMenu(a,b){b.preventDefault();b.stopPropagation();b=document.getElementsByClassName("popover");for(var c=0;ckeyboard_arrow_rightAlbum actions
'+addMenuItem({cmd:"appendQueue",options:[b,d,c]},"Append to queue")+addMenuItem({cmd:"appendAfterQueue", +options:[b,d,e,c]},"Add after current playing song")+addMenuItem({cmd:"replaceQueue",options:[b,d,c]},"Replace queue")+addMenuItem({cmd:"showAddToPlaylist",options:[d]},"Add to playlist")+"
")):"Browse"==app.current.app&&"Playlists"==app.current.tab&&"All"==app.current.view?f+=addMenuItem({cmd:"appendQueue",options:[b,d,c]},"Append to queue")+addMenuItem({cmd:"replaceQueue",options:[b,d,c]},"Replace queue")+addMenuItem({cmd:"playlistDetails",options:[d]},"Edit playlist")+addMenuItem({cmd:"showRenamePlaylist", +options:[d]},"Rename playlist")+addMenuItem({cmd:"delPlaylist",options:[d]},"Delete playlist"):"Browse"==app.current.app&&"Playlists"==app.current.tab&&"Detail"==app.current.view?(e=document.getElementById("BrowsePlaylistsDetailList"),f+=addMenuItem({cmd:"appendQueue",options:[b,d,c]},"Append to queue")+addMenuItem({cmd:"replaceQueue",options:[b,d,c]},"Replace queue")+("false"==e.getAttribute("data-ro")?addMenuItem({cmd:"removeFromPlaylist",options:[e.getAttribute("data-uri"),a.parentNode.parentNode.getAttribute("data-songpos")]}, +"Remove"):"")+("plist"!=b?addMenuItem({cmd:"showAddToPlaylist",options:[d]},"Add to playlist"):"")):"Queue"==app.current.app&&(f+=addMenuItem({cmd:"delQueueSong",options:["single",a.parentNode.parentNode.getAttribute("data-trackid")]},"Remove")+addMenuItem({cmd:"delQueueSong",options:["range",0,a.parentNode.parentNode.getAttribute("data-songpos")]},"Remove all upwards")+addMenuItem({cmd:"delQueueSong",options:["range",parseInt(a.parentNode.parentNode.getAttribute("data-songpos"))-1,-1]},"Remove all downwards")+ +(-1==d.indexOf("http")?addMenuItem({cmd:"songDetails",options:[d]},"Songdetails"):""));new Popover(a,{trigger:"click",delay:0,dismissible:!0,template:'"});var g=a.Popover;a.getAttribute("data-init")||(a.setAttribute("data-init","true"),a.addEventListener("shown.bs.popover",function(a){document.getElementsByClassName("popover-content")[0].addEventListener("click",function(a){a.preventDefault(); +a.stopPropagation();if("A"==a.target.nodeName&&(a=a.target.getAttribute("data-href"))){a=JSON.parse(atob(a));if("function"===typeof window[a.cmd])switch(a.cmd){case "sendAPI":sendAPI.apply(null,$jscomp.arrayFromIterable(a.options));break;default:window[a.cmd].apply(null,$jscomp.arrayFromIterable(a.options))}g.hide()}},!1);if(a=document.getElementById("advancedMenuLink"))a.addEventListener("click",function(a){a=this.getElementsByTagName("span")[0];a.innerText="keyboard_arrow_right"==a.innerText?"keyboard_arrow_down": +"keyboard_arrow_right"},!1),new Collapse(a)},!1));g.show()} +function sendAPI(a,b){var c=new XMLHttpRequest;c.open("POST","/api",!0);c.setRequestHeader("Content-type","application/json");c.onreadystatechange=function(){if(4==c.readyState)if(""!=c.responseText){var d=JSON.parse(c.responseText);"error"==d.type?(showNotification("Error",d.data,d.data,"danger"),console.log("Error: "+d.data)):"result"==d.type&&"ok"!=d.data?showNotification(d.data,"","","success"):void 0!=b&&"function"==typeof b&&b(d)}else console.log("Empty response for request: "+JSON.stringify(a))}; c.send(JSON.stringify(a))}function openLocalPlayer(){window.open("/player.html#"+settings.mpdstream,"LocalPlayer")}function updateDB(){sendAPI({cmd:"MPD_API_DATABASE_UPDATE"});updateDBstarted(!0)} function updateDBstarted(a){1==a?(document.getElementById("updateDBfinished").innerText="",document.getElementById("updateDBfooter").classList.add("hide"),updateDBprogress.style.width="20px",updateDBprogress.style.marginLeft="-20px",modalUpdateDB.show(),document.getElementById("updateDBprogress").classList.add("updateDBprogressAnimate")):showNotification("Database update started","","","success")} function updateDBfinished(a){document.getElementById("modalUpdateDB").classList.contains("show")?("update_database"==a?document.getElementById("updateDBfinished").innerText="Database successfully updated.":"update_finished"==a&&(document.getElementById("updateDBfinished").innerText="Database update finished."),a=document.getElementById("updateDBprogress"),a.classList.remove("updateDBprogressAnimate"),a.style.width="100%",a.style.marginLeft="0px",document.getElementById("updateDBfooter").classList.remove("hide")): "update_database"==a?showNotification("Database successfully updated.","","","success"):"update_finished"==a&&showNotification("Database update finished.","","","success")}function clickPlay(){"play"!=playstate?sendAPI({cmd:"MPD_API_PLAYER_PLAY"}):sendAPI({cmd:"MPD_API_PLAYER_PAUSE"})}function clickStop(){sendAPI({cmd:"MPD_API_PLAYER_STOP"})}function clickPrev(){sendAPI({cmd:"MPD_API_PLAYER_PREV"})}function clickNext(){sendAPI({cmd:"MPD_API_PLAYER_NEXT"})} function delQueueSong(a,b,c){"range"==a?sendAPI({cmd:"MPD_API_QUEUE_RM_RANGE",data:{start:b,end:c}}):"single"==a&&sendAPI({cmd:"MPD_API_QUEUE_RM_TRACK",data:{track:b}})}function delPlaylist(a){sendAPI({cmd:"MPD_API_PLAYLIST_RM",data:{uri:a}});sendAPI({cmd:"MPD_API_PLAYLIST_LIST",data:{offset:app.current.page,filter:app.current.filter}},parsePlaylists)} function confirmSettings(){var a=!0,b=document.getElementById("inputCrossfade");if(!b.getAttribute("disabled")){var c=parseInt(b.value);isNaN(c)?(b.classList.add("is-invalid"),a=!1):b.value=c}settings.mixramp&&(b=document.getElementById("inputMixrampdb"),b.getAttribute("disabled")||(c=parseFloat(b.value),isNaN(c)?(b.classList.add("is-invalid"),a=!1):b.value=c),b=document.getElementById("inputMixrampdelay"),b.getAttribute("disabled")||("nan"==b.value&&(b.value="-1"),c=parseFloat(b.value),isNaN(c)? -(b.classList.add("is-invalid"),a=!1):b.value=c));1==a?(a=document.getElementById("selectReplaygain"),sendAPI({cmd:"MPD_API_SETTINGS_SET",data:{consume:document.getElementById("btnConsume").classList.contains("active")?1:0,random:document.getElementById("btnRandom").classList.contains("active")?1:0,single:document.getElementById("btnSingle").classList.contains("active")?1:0,repeat:document.getElementById("btnRepeat").classList.contains("active")?1:0,replaygain:a.options[a.selectedIndex].value,crossfade:document.getElementById("inputCrossfade").value, -mixrampdb:1==settings.mixramp?document.getElementById("inputMixrampdb").value:settings.mixrampdb,mixrampdelay:1==settings.mixramp?document.getElementById("inputMixrampdelay").value:settings.mixrampdelay,notificationWeb:document.getElementById("btnnotifyWeb").classList.contains("active")?1:0,notificationPage:document.getElementById("btnnotifyPage").classList.contains("active")?1:0}},getSettings),modalSettings.hide()):document.getElementById("settingsFrm").classList.add("was-validated")} -function addAllFromBrowseFilesystem(){sendAPI({cmd:"MPD_API_QUEUE_ADD_TRACK",data:{uri:app.current.search}});showNotification("Added all songs","","","success")}function addAllFromSearchPlist(a){2<=app.current.search.length&&(sendAPI({cmd:"MPD_API_DATABASE_SEARCH",data:{plist:a,filter:app.current.filter,searchstr:app.current.search,offset:0}}),showNotification("Added "+parseInt(document.getElementById("panel-heading-search").innerText)+" songs from search to "+a,"","","success"))} +(b.classList.add("is-invalid"),a=!1):b.value=c));1==a?(a=document.getElementById("selectReplaygain"),c=document.getElementById("jukeboxPlaylist"),sendAPI({cmd:"MPD_API_SETTINGS_SET",data:{consume:document.getElementById("btnConsume").classList.contains("active")?1:0,random:document.getElementById("btnRandom").classList.contains("active")?1:0,single:document.getElementById("btnSingle").classList.contains("active")?1:0,repeat:document.getElementById("btnRepeat").classList.contains("active")?1:0,replaygain:a.options[a.selectedIndex].value, +crossfade:document.getElementById("inputCrossfade").value,mixrampdb:1==settings.mixramp?document.getElementById("inputMixrampdb").value:settings.mixrampdb,mixrampdelay:1==settings.mixramp?document.getElementById("inputMixrampdelay").value:settings.mixrampdelay,notificationWeb:document.getElementById("btnnotifyWeb").classList.contains("active")?!0:!1,notificationPage:document.getElementById("btnnotifyPage").classList.contains("active")?!0:!1,jukeboxMode:document.getElementById("btnJukebox").classList.contains("active")? +!0:!1,jukeboxPlaylist:c.options[c.selectedIndex].value}},getSettings),modalSettings.hide()):document.getElementById("settingsFrm").classList.add("was-validated")}function addAllFromBrowseFilesystem(){sendAPI({cmd:"MPD_API_QUEUE_ADD_TRACK",data:{uri:app.current.search}});showNotification("Added all songs","","","success")} +function addAllFromSearchPlist(a){2<=app.current.search.length&&(sendAPI({cmd:"MPD_API_DATABASE_SEARCH",data:{plist:a,filter:app.current.filter,searchstr:app.current.search,offset:0}}),showNotification("Added "+parseInt(document.getElementById("panel-heading-search").innerText)+" songs from search to "+a,"","","success"))} function addAllFromBrowseDatabasePlist(a){2<=app.current.search.length&&(sendAPI({cmd:"MPD_API_DATABASE_SEARCH",data:{plist:a,filter:app.current.view,searchstr:app.current.search,offset:0}}),showNotification("Added songs from database selection to "+a,"","","success"))}function scrollTo(a){document.body.scrollTop=a;document.documentElement.scrollTop=a} function gotoPage(a){switch(a){case "next":app.current.page+=settings.maxElementsPerPage;break;case "prev":app.current.page-=settings.maxElementsPerPage;0>app.current.page&&(app.current.page=0);break;default:app.current.page=a}appGoto(app.current.app,app.current.tab,app.current.view,app.current.page+"/"+app.current.filter+"/"+app.current.search)} function saveQueue(){var a=document.getElementById("saveQueueName").value,b=a.replace(/\w\-/g,"");""!=a&&""==b?(sendAPI({cmd:"MPD_API_QUEUE_SAVE",data:{plist:a}}),modalSavequeue.hide()):(document.getElementById("saveQueueName").classList.add("is-invalid"),document.getElementById("saveQueueFrm").classList.add("was-validated"))} -function showNotification(a,b,c,e){1==settings.notificationWeb&&(b=new Notification(a,{icon:"assets/favicon.ico",body:b}),setTimeout(function(a){a.close()},3E3,b));1==settings.notificationPage&&(document.getElementById("alertBox")?b=document.getElementById("alertBox"):(b=document.createElement("div"),b.setAttribute("id","alertBox"),b.addEventListener("click",function(){hideNotification()},!1)),b.classList.remove("alert-success","alert-danger"),b.classList.add("alert","alert-"+e),b.innerHTML="
"+ +function showNotification(a,b,c,d){1==settings.notificationWeb&&(b=new Notification(a,{icon:"assets/favicon.ico",body:b}),setTimeout(function(a){a.close()},3E3,b));1==settings.notificationPage&&(document.getElementById("alertBox")?b=document.getElementById("alertBox"):(b=document.createElement("div"),b.setAttribute("id","alertBox"),b.addEventListener("click",function(){hideNotification()},!1)),b.classList.remove("alert-success","alert-danger"),b.classList.add("alert","alert-"+d),b.innerHTML="
"+ a+"
"+c+"
",document.getElementsByTagName("main")[0].append(b),document.getElementById("alertBox").classList.add("alertBoxActive"),alertTimeout&&clearTimeout(alertTimeout),alertTimeout=setTimeout(function(){hideNotification()},3E3))}function hideNotification(){document.getElementById("alertBox")&&(document.getElementById("alertBox").classList.remove("alertBoxActive"),setTimeout(function(){var a=document.getElementById("alertBox");a&&a.remove()},600))} function notificationsSupported(){return"Notification"in window} -function songChange(a){if("error"!=a.type&&"result"!=a.type){var b=a.data.title+a.data.artist+a.data.album+a.data.uri+a.data.currentSongId;if(lastSong!=b){var c="",e="",d="myMPD: ";domCache.currentCover.style.backgroundImage='url("'+a.data.cover+'")';"undefined"!=typeof a.data.artist&&0=c;c++)b+='";a=document.getElementById(a);a.innerHTML=b;a.addEventListener("click",function(a){switch(a.target.innerText){case "delete":b="-";break;case "#":b="0";break;default:b=a.target.innerText}appGoto(app.current.app, -app.current.tab,app.current.view,"0/"+b+"/"+app.current.search)},!1)}function selectTag(a,b,c){a=document.getElementById(a);var e=a.querySelector(".active");e&&e.classList.remove("active");if(e=a.querySelector("[data-tag="+c+"]"))e.classList.add("active"),document.getElementById(b).innerText=e.innerText} -function addTagList(a,b){var c="";1==b&&(c+='');for(var e in settings.tags)1==settings.tags[e]&&"Track"!=e&&(c+='");document.getElementById(a).innerHTML=c}function gotoTagList(){appGoto(app.current.app,app.current.tab,app.current.view,"0/-/")} -function chVolume(a){a=parseInt(domCache.volumeBar.value)+a;0>a?a=0:100e?"0":""):"")+e+"\u2009m "+(10>a?"0":"")+a+"\u2009s"}function genId(a){return"id"+a.replace(/[^\w\-]/g,"")}appInit(); +app.current.tab,app.current.view,"0/"+b+"/"+app.current.search)},!1)}function selectTag(a,b,c){a=document.getElementById(a);var d=a.querySelector(".active");d&&d.classList.remove("active");if(d=a.querySelector("[data-tag="+c+"]"))d.classList.add("active"),document.getElementById(b).innerText=d.innerText} +function addTagList(a,b){var c="";1==b&&(c+='');for(var d in settings.tags)1==settings.tags[d]&&"Track"!=d&&(c+='");document.getElementById(a).innerHTML=c}function gotoTagList(){appGoto(app.current.app,app.current.tab,app.current.view,"0/-/")} +function chVolume(a){a=parseInt(domCache.volumeBar.value)+a;0>a?a=0:100d?"0":""):"")+d+"\u2009m "+(10>a?"0":"")+a+"\u2009s"}function genId(a){return"id"+a.replace(/[^\w\-]/g,"")}appInit(); diff --git a/dist/htdocs/sw.min.js b/dist/htdocs/sw.min.js index 45c2403..01bc1cc 100644 --- a/dist/htdocs/sw.min.js +++ b/dist/htdocs/sw.min.js @@ -10,5 +10,5 @@ function(){function a(a){return function(d){c||(c=!0,a.call(b,d))}}var b=this,c= void 0;try{d=a.then}catch(h){this.reject_(h);return}"function"==typeof d?this.settleSameAsThenable_(d,a):this.fulfill_(a)};c.prototype.reject_=function(a){this.settle_(2,a)};c.prototype.fulfill_=function(a){this.settle_(1,a)};c.prototype.settle_=function(a,b){if(0!=this.state_)throw Error("Cannot settle("+a+", "+b+"): Promise already settled in state"+this.state_);this.state_=a;this.result_=b;this.executeOnSettledCallbacks_()};c.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var a= 0;a