Ticket #1699: changes.3.2.patch

File changes.3.2.patch, 176.3 KB (added by jochen, 18 years ago)

Version 3.2

  • mythweb/skins/default/music.css

     
     1mp3act {
     2        padding: 22px;
     3        margin:0;
     4        color: #333;
     5        text-align: center;
     6        font: 65% Verdana, Sans-serif;
     7}
     8
     9h2.music{
     10        font-size: 100%;
     11        margin:0;
     12        padding: 0 0 5px 0;
     13
     14}
     15ul.music{
     16        list-style-type: none;
     17}
     18a.music{
     19        color: blue;
     20}
     21
     22a.music:hover{
     23        /*color: #fff;
     24        background: #F21518;
     25        text-decoration: none;*/
     26        color: #F21518;
     27}
     28img{
     29        border: 0;
     30}
     31input,select{
     32        border: 1px solid #ccc;
     33        border-color: #aaa #ccc #ccc #aaa;
     34        background: #f3f3f3;
     35        color: #555;
     36        font-size: 100%;
     37        padding: 2px 3px;
     38        vertical-align: middle;
     39       
     40}
     41input.check{
     42  border:0;
     43  padding:0;
     44  background: transparent;
     45}
     46select{
     47        padding: 2px 0 2px 3px;
     48}
     49input:focus{
     50        border: 1px solid #999;
     51        background: #FBF9D3;
     52        color: #000;
     53        border-color: #777 #bbb #bbb #777;
     54}
     55
     56input.btn,input.redbtn{
     57        background: #244A79;
     58        color: #fff;
     59        padding: 2px;
     60        border-color: #0E2F58;
     61        font: normal 10px sans-serif;
     62}
     63input.redbtn{
     64        background: #F21518;   
     65}
     66input.redbtn:hover{
     67        background: #BE0D0F;
     68}
     69input.btn:hover{
     70        background: #0E2F58;
     71}
     72
     73input.btn2{
     74        font-weight: bold;
     75        padding: 2px;
     76}
     77
     78input.btn2:hover{
     79        background: #eee;
     80        border-color: #888;
     81        color: #222;
     82}
     83
     84.left{
     85        float: left;
     86}
     87.right{
     88        float: right;
     89}
     90.center{
     91        text-align: center;
     92}
     93.clear{
     94  clear: both;
     95}
     96.error{
     97        color: #E63838;
     98        font-weight: bold;
     99}
     100p#error{
     101        color: #f20000;
     102        font-weight: bold;
     103}
     104#breadcrumb{
     105        height: 14px;
     106        padding:2px 0 0 0;
     107}
     108#breadcrumb span{
     109position: relative;
     110}
     111#breadcrumb span:hover ul{
     112        display: block;
     113}
     114#breadcrumb ul{
     115        z-index: 5;
     116        border: 1px solid #333;
     117        display: none;
     118        top:12px;
     119        left:0;
     120        position: absolute;
     121        background: transparent url("./img/music/libg.png");
     122        color: #fff;
     123        margin:-1px 0 0 0;
     124        padding:0;
     125        width: 150px;
     126       
     127}
     128#breadcrumb ul#letters{
     129        left: -55px;
     130        width: auto;
     131}
     132#breadcrumb span{
     133        padding: 0;
     134        margin:0;
     135}
     136#breadcrumb ul li{
     137width: 100%;
     138        padding:0;
     139        margin:0;
     140        z-index: 6;
     141}
     142#breadcrumb ul li a{
     143        display: block;
     144        padding: 2px 4px;
     145        color: #fff;
     146        margin:0;
     147        z-index: 5;
     148        text-decoration: none;
     149        font-weight: normal;
     150        font-size: 90%;
     151}
     152
     153#breadcrumb ul#letters li{
     154        float: left;
     155
     156}
     157#breadcrumb ul#letters li a{
     158        float: left;
     159       
     160}
     161#breadcrumb ul li a:hover{
     162        background: #FCF7A5;
     163        color: #000;
     164}
     165#breadcrumb ul#letters li a:hover{
     166        background: #FCF7A5;
     167        color: #000;
     168}
     169#topinfo{
     170       
     171        font-size: 90%;
     172        color: #666;
     173        text-align: left;
     174        padding: 0 0 4px 0;
     175       
     176}
     177p.pad{
     178        padding: 0px 8px;
     179}
     180
     181#wrap{
     182        /*background: #fff;
     183        border: 1px solid #ccc;*/
     184        text-align: left;
     185        padding: 0px;
     186        margin:0;
     187        position: relative;
     188
     189        color: #333;
     190}
     191
     192#header{
     193        position: relative;
     194/*      background: #0E2F58;*/
     195        height: 50px;
     196        color: #fff;
     197        padding: 8px 0 0px 15px;
     198}
     199#header #controls{
     200        float: right;
     201        background: transparent;
     202        height: 48px;
     203        margin-right: 8px;
     204        width: 48%;
     205        font-size: 90%;
     206        line-height: 1.1em;
     207        color: #fff;
     208}
     209
     210#header #controls .buttons{
     211        float: left;
     212        margin: 3px 5px 0 5px;
     213}
     214#header #controls .current{
     215        float: left;
     216        margin-top: 3px;
     217       
     218}
     219#header h1{
     220        color: #9ABEE5;
     221        padding: 0;
     222        margin:0;
     223        font-size: 150%;
     224}
     225ul#nav{
     226        position: absolute;
     227        bottom:0;
     228        list-style-type: none;
     229        margin:0;
     230        padding:0;
     231}
     232ul#nav li{
     233        float: left;
     234        margin-right: 5px;
     235}
     236ul#nav li a{
     237        display: block;
     238        background: #265990; //#244A79;
     239        padding: 4px 5px;
     240        color: #dedede;
     241        text-decoration: none;
     242        margin:0;
     243}
     244ul#nav li a:hover{
     245        background: #416899;
     246        color: #fff;
     247}
     248ul#nav li a.c{
     249        background: #fff;
     250        color: #F48603;
     251        font-weight: bold;
     252}
     253#loading{
     254        display: none;
     255        position: absolute;
     256        top: 80px;
     257        color: #78B855;
     258        padding: 10px;
     259        background: #CCFF99;
     260        border: 1px solid #78B855;
     261        z-index: 4;
     262        left: 30%;
     263}
     264#loading h1{
     265  font-size: 140%;
     266}
     267#left{
     268        float: left;
     269        width: 48%;
     270        margin: 15px 0 25px 15px;
     271}
     272#right{
     273        float: right;
     274        width: 45%;
     275        margin: 15px 15px 25px 0;
     276
     277}
     278.box{
     279        background: #E0E0E0;
     280        border: 1px solid #ccc;
     281        padding: 0 0 8px 0;
     282        position: relative;
     283}
     284#box_extra{
     285        display: none;
     286        z-index: 2;
     287        position: absolute;
     288        top: 25px;
     289        left:5%;
     290        width: 450px;
     291        height: 190px;
     292        background: transparent url("./img/music/libg.png");
     293        color: #fff;
     294        font-size: 110%;
     295        padding: 5px;
     296}
     297#box_extra h2{
     298        font-size: 120%;
     299}
     300#box_extra input{
     301        background: #333;
     302        border-color: #999;
     303        color: #fff;
     304}
     305
     306#box_extra select{
     307        background: #333;
     308        border-color: #999;
     309        color: #fff;
     310}
     311
     312.box ul{
     313        margin: 0 10px;
     314        padding: 0px 0px;
     315        background: #f3f3f3;
     316        clear: both;
     317}
     318.box ul li{
     319        padding: 2px 0 1px 4px;
     320        border: 1px solid transparent;
     321        border-width: 1px 0px 1px 0px;
     322        position: relative;
     323        background: #f3f3f3;
     324}
     325
     326.box ul li.alt{
     327        background: #DEE6EC;
     328}
     329.box ul li span.user{
     330        float: left;
     331        width: 200px;
     332}
     333.box ul li small{
     334        color: #888;
     335        letter-spacing: -1px;
     336}
     337
     338.box ul li span.links a{
     339        text-decoration: underline;
     340        color: blue;
     341}
     342.box ul li span.links a:hover{
     343        color: red;
     344}
     345.box ul li:hover{
     346        background: #FCF7A5;
     347        color: #000;
     348        border-color: #999;
     349}
     350.box ul li.currentplay{
     351        background: #96D1EF;
     352        color: #000;
     353        border-color: #666;
     354}
     355
     356.box ul li p{
     357        z-index:5;
     358        display: none;
     359        position: absolute;
     360        top: 7px;
     361        font-size: 90%;
     362        padding: 2px;
     363        right: 15px;
     364        width: 145px;
     365        background: transparent url("./img/music/libg.png");
     366        color: #fff;
     367}
     368
     369.box ul li:hover p{
     370        display: block;
     371}
     372
     373.box ul li a{
     374        text-decoration: none;
     375        color: #333;
     376}
     377.box ul li a:hover{
     378        color: #000;
     379}
     380.box ul#letters{
     381        height: 18px;
     382        padding-left: 5px;
     383}
     384
     385.box ul#letters li{
     386        float: left;
     387        padding: 2px 2px;
     388        background: none;
     389        border: 1px solid transparent;
     390}
     391
     392.box ul#letters li:hover{
     393        background: #FCF7A5;
     394        border-color: #999;
     395}
     396
     397.box p{
     398        padding: 0 10px;
     399        margin: 8px 0 4px 0;
     400
     401}
     402.box p img{
     403        display: block;
     404        width: 60px;
     405        float: right;
     406        padding: 2px;
     407        background: #f3f3f3;
     408        border: 1px solid #999;
     409        margin-bottom: 4px;     
     410}
     411.box img#bigart{
     412        display: none;
     413        position: absolute;
     414        z-index: 2;
     415        background: #f3f3f3;
     416        padding: 3px;
     417        border: 1px solid #666;
     418        top:10px;
     419        right: 80px;
     420}
     421.box p img:hover{
     422        border-color: #555;
     423        cursor: pointer;
     424}
     425
     426.box .head{
     427        padding: 4px;
     428        background: #ccc;
     429}
     430.box .head a{
     431        background: #244A79;
     432        color: #fff;
     433        padding: 2px;
     434        text-decoration: none;
     435        font: normal 9px sans-serif;
     436}
     437.box .head a:hover{
     438        background: #0E2F58;
     439}
     440.box .head a.red{
     441        background: #F21518;
     442}       
     443.box .head a.red:hover{
     444        background: #BE0D0F;
     445}
     446.box .head h2{
     447        font-size: 120%;
     448        padding: 0;
     449}
     450.box h3{
     451        padding: 0 0 0 0px;
     452        margin: 0 10px 0 10px;
     453        font-size: 120%;
     454        border-bottom: 1px solid #ccc;
     455}
     456
     457.loginbox{
     458        width: 250px;
     459        margin:0 auto;
     460        background: #fff;
     461        border: 1px solid #ccc;
     462        text-align: left;
     463}
     464.loginbox p{
     465        padding: 8px 15px;
     466        margin:0;
     467}
     468.noborder{
     469        background: transparent;
     470        border:0;
     471}
  • mythweb/skins/grey/music.css

    Property changes on: mythweb/skins/default/music.css
    ___________________________________________________________________
    Name: svn:executable
       + *
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/ff_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/libg.png
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/rew_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/paypal_donate.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/vol.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/rem.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/up.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/play.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/play_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/stop_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/down.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/add.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/default/img/music/progress_bar.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
     
     1mp3act {
     2        padding: 22px;
     3        margin:0;
     4        color: #333;
     5        text-align: center;
     6        font: 65% Verdana, Sans-serif;
     7}
     8
     9h2.music{
     10        font-size: 100%;
     11        margin:0;
     12        padding: 0 0 5px 0;
     13
     14}
     15ul.music{
     16        list-style-type: none;
     17}
     18a.music{
     19        color: blue;
     20}
     21
     22a.music:hover{
     23        /*color: #fff;
     24        background: #F21518;
     25        text-decoration: none;*/
     26        color: #F21518;
     27}
     28img{
     29        border: 0;
     30}
     31input,select{
     32        border: 1px solid #ccc;
     33        border-color: #aaa #ccc #ccc #aaa;
     34        background: #f3f3f3;
     35        color: #555;
     36        font-size: 100%;
     37        padding: 2px 3px;
     38        vertical-align: middle;
     39       
     40}
     41input.check{
     42  border:0;
     43  padding:0;
     44  background: transparent;
     45}
     46select{
     47        padding: 2px 0 2px 3px;
     48}
     49input:focus{
     50        border: 1px solid #999;
     51        background: #FBF9D3;
     52        color: #000;
     53        border-color: #777 #bbb #bbb #777;
     54}
     55
     56input.btn,input.redbtn{
     57        background: #244A79;
     58        color: #fff;
     59        padding: 2px;
     60        border-color: #0E2F58;
     61        font: normal 10px sans-serif;
     62}
     63input.redbtn{
     64        background: #F21518;   
     65}
     66input.redbtn:hover{
     67        background: #BE0D0F;
     68}
     69input.btn:hover{
     70        background: #0E2F58;
     71}
     72
     73input.btn2{
     74        font-weight: bold;
     75        padding: 2px;
     76}
     77
     78input.btn2:hover{
     79        background: #eee;
     80        border-color: #888;
     81        color: #222;
     82}
     83
     84.left{
     85        float: left;
     86}
     87.right{
     88        float: right;
     89}
     90.center{
     91        text-align: center;
     92}
     93.clear{
     94  clear: both;
     95}
     96.error{
     97        color: #E63838;
     98        font-weight: bold;
     99}
     100p#error{
     101        color: #f20000;
     102        font-weight: bold;
     103}
     104#breadcrumb{
     105        height: 14px;
     106        padding:2px 0 0 0;
     107}
     108#breadcrumb span{
     109position: relative;
     110}
     111#breadcrumb span:hover ul{
     112        display: block;
     113}
     114#breadcrumb ul{
     115        z-index: 5;
     116        border: 1px solid #333;
     117        display: none;
     118        top:12px;
     119        left:0;
     120        position: absolute;
     121        background: transparent url("./img/music/libg.png");
     122        color: #fff;
     123        margin:-1px 0 0 0;
     124        padding:0;
     125        width: 150px;
     126       
     127}
     128#breadcrumb ul#letters{
     129        left: -55px;
     130        width: auto;
     131}
     132#breadcrumb span{
     133        padding: 0;
     134        margin:0;
     135}
     136#breadcrumb ul li{
     137width: 100%;
     138        padding:0;
     139        margin:0;
     140        z-index: 6;
     141}
     142#breadcrumb ul li a{
     143        display: block;
     144        padding: 2px 4px;
     145        color: #fff;
     146        margin:0;
     147        z-index: 5;
     148        text-decoration: none;
     149        font-weight: normal;
     150        font-size: 90%;
     151}
     152
     153#breadcrumb ul#letters li{
     154        float: left;
     155
     156}
     157#breadcrumb ul#letters li a{
     158        float: left;
     159       
     160}
     161#breadcrumb ul li a:hover{
     162        background: #FCF7A5;
     163        color: #000;
     164}
     165#breadcrumb ul#letters li a:hover{
     166        background: #FCF7A5;
     167        color: #000;
     168}
     169#topinfo{
     170       
     171        font-size: 90%;
     172        color: #666;
     173        text-align: left;
     174        padding: 0 0 4px 0;
     175       
     176}
     177p.pad{
     178        padding: 0px 8px;
     179}
     180
     181#wrap{
     182        /*background: #fff;
     183        border: 1px solid #ccc;*/
     184        text-align: left;
     185        padding: 0px;
     186        margin:0;
     187        position: relative;
     188
     189        color: #333;
     190}
     191
     192#header{
     193        position: relative;
     194/*      background: #0E2F58;*/
     195        height: 50px;
     196        color: #fff;
     197        padding: 8px 0 0px 15px;
     198}
     199#header #controls{
     200        float: right;
     201        background: transparent;
     202        height: 48px;
     203        margin-right: 8px;
     204        width: 48%;
     205        font-size: 90%;
     206        line-height: 1.1em;
     207        color: #fff;
     208}
     209
     210#header #controls .buttons{
     211        float: left;
     212        margin: 3px 5px 0 5px;
     213}
     214#header #controls .current{
     215        float: left;
     216        margin-top: 3px;
     217       
     218}
     219#header h1{
     220        color: #9ABEE5;
     221        padding: 0;
     222        margin:0;
     223        font-size: 150%;
     224}
     225ul#nav{
     226        position: absolute;
     227        bottom:0;
     228        list-style-type: none;
     229        margin:0;
     230        padding:0;
     231}
     232ul#nav li{
     233        float: left;
     234        margin-right: 5px;
     235}
     236ul#nav li a{
     237        display: block;
     238        background: #666666; //#244A79;
     239        padding: 4px 5px;
     240        color: #ffffff;
     241        text-decoration: none;
     242        margin:0;
     243}
     244ul#nav li a:hover{
     245        background: #416899;
     246        color: #fff;
     247}
     248ul#nav li a.c{
     249        background: #fff;
     250        color: #F48603;
     251        font-weight: bold;
     252}
     253#loading{
     254        display: none;
     255        position: absolute;
     256        top: 80px;
     257        color: #78B855;
     258        padding: 10px;
     259        background: #CCFF99;
     260        border: 1px solid #78B855;
     261        z-index: 4;
     262        left: 30%;
     263}
     264#loading h1{
     265  font-size: 140%;
     266}
     267#left{
     268        float: left;
     269        width: 48%;
     270        margin: 15px 0 25px 15px;
     271}
     272#right{
     273        float: right;
     274        width: 45%;
     275        margin: 15px 15px 25px 0;
     276
     277}
     278.box{
     279        background: #E0E0E0;
     280        border: 1px solid #ccc;
     281        padding: 0 0 8px 0;
     282        position: relative;
     283}
     284#box_extra{
     285        display: none;
     286        z-index: 2;
     287        position: absolute;
     288        top: 25px;
     289        left:5%;
     290        width: 450px;
     291        height: 190px;
     292        background: transparent url("./img/music/libg.png");
     293        color: #fff;
     294        font-size: 110%;
     295        padding: 5px;
     296}
     297#box_extra h2{
     298        font-size: 120%;
     299}
     300#box_extra input{
     301        background: #333;
     302        border-color: #999;
     303        color: #fff;
     304}
     305
     306#box_extra select{
     307        background: #333;
     308        border-color: #999;
     309        color: #fff;
     310}
     311
     312.box ul{
     313        margin: 0 10px;
     314        padding: 0px 0px;
     315        background: #f3f3f3;
     316        clear: both;
     317}
     318.box ul li{
     319        padding: 2px 0 1px 4px;
     320        border: 1px solid transparent;
     321        border-width: 1px 0px 1px 0px;
     322        position: relative;
     323        background: #f3f3f3;
     324}
     325
     326.box ul li.alt{
     327        background: #DEE6EC;
     328}
     329.box ul li span.user{
     330        float: left;
     331        width: 200px;
     332}
     333.box ul li small{
     334        color: #888;
     335        letter-spacing: -1px;
     336}
     337
     338.box ul li span.links a{
     339        text-decoration: underline;
     340        color: blue;
     341}
     342.box ul li span.links a:hover{
     343        color: red;
     344}
     345.box ul li:hover{
     346        background: #FCF7A5;
     347        color: #000;
     348        border-color: #999;
     349}
     350.box ul li.currentplay{
     351        background: #96D1EF;
     352        color: #000;
     353        border-color: #666;
     354}
     355
     356.box ul li p{
     357        z-index:5;
     358        display: none;
     359        position: absolute;
     360        top: 7px;
     361        font-size: 90%;
     362        padding: 2px;
     363        right: 15px;
     364        width: 145px;
     365        background: transparent url("./img/music/libg.png");
     366        color: #fff;
     367}
     368
     369.box ul li:hover p{
     370        display: block;
     371}
     372
     373.box ul li a{
     374        text-decoration: none;
     375        color: #333;
     376}
     377.box ul li a:hover{
     378        color: #000;
     379}
     380.box ul#letters{
     381        height: 18px;
     382        padding-left: 5px;
     383}
     384
     385.box ul#letters li{
     386        float: left;
     387        padding: 2px 2px;
     388        background: none;
     389        border: 1px solid transparent;
     390}
     391
     392.box ul#letters li:hover{
     393        background: #FCF7A5;
     394        border-color: #999;
     395}
     396
     397.box p{
     398        padding: 0 10px;
     399        margin: 8px 0 4px 0;
     400
     401}
     402.box p img{
     403        display: block;
     404        width: 60px;
     405        float: right;
     406        padding: 2px;
     407        background: #f3f3f3;
     408        border: 1px solid #999;
     409        margin-bottom: 4px;     
     410}
     411.box img#bigart{
     412        display: none;
     413        position: absolute;
     414        z-index: 2;
     415        background: #f3f3f3;
     416        padding: 3px;
     417        border: 1px solid #666;
     418        top:10px;
     419        right: 80px;
     420}
     421.box p img:hover{
     422        border-color: #555;
     423        cursor: pointer;
     424}
     425
     426.box .head{
     427        padding: 4px;
     428        background: #ccc;
     429}
     430.box .head a{
     431        background: #244A79;
     432        color: #fff;
     433        padding: 2px;
     434        text-decoration: none;
     435        font: normal 9px sans-serif;
     436}
     437.box .head a:hover{
     438        background: #0E2F58;
     439}
     440.box .head a.red{
     441        background: #F21518;
     442}       
     443.box .head a.red:hover{
     444        background: #BE0D0F;
     445}
     446.box .head h2{
     447        font-size: 120%;
     448        padding: 0;
     449}
     450.box h3{
     451        padding: 0 0 0 0px;
     452        margin: 0 10px 0 10px;
     453        font-size: 120%;
     454        border-bottom: 1px solid #ccc;
     455}
     456
     457.loginbox{
     458        width: 250px;
     459        margin:0 auto;
     460        background: #fff;
     461        border: 1px solid #ccc;
     462        text-align: left;
     463}
     464.loginbox p{
     465        padding: 8px 15px;
     466        margin:0;
     467}
     468.noborder{
     469        background: transparent;
     470        border:0;
     471}
  • mythweb/modules/music/mp3act_main.php

    Property changes on: mythweb/skins/grey/music.css
    ___________________________________________________________________
    Name: svn:executable
       + *
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/ff_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/libg.png
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/rew_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/paypal_donate.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/vol.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/rem.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/up.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/play.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/play_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/stop_big.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/down.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/add.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: mythweb/skins/grey/img/music/progress_bar.gif
    ___________________________________________________________________
    Name: svn:executable
       + *
    Name: svn:mime-type
       + application/octet-stream
    
     
     1<?php
     2/*************************************************************************
     3*  mp3act Digital Music System - A streaming and jukebox solution for your digital music collection
     4*  http://www.mp3act.net
     5*  Copyright (C) 2005 Jon Buda (www.jonbuda.com)
     6
     7*  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
     8
     9*  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
     10
     11*  You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     12*************************************************************************/
     13
     14include_once("modules/music/mp3act_functions.php");
     15require_once("modules/music/mp3act_sajax.php");
     16
     17$sajax_remote_uri = 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['SCRIPT_NAME'],0,strlen($_SERVER['SCRIPT_NAME']) - 11).'music/';
     18$sajax_request_type = "POST";
     19sajax_init();
     20// list of functions to export
     21sajax_export("getCurrentSong","getUser","musicLookup","playlist_rem","playlist_add","playlistInfo","clearPlaylist","buildBreadcrumb","play","playlist_move","searchMusic","editUser","switchMode","viewPlaylist","getDropDown","savePlaylist","getRandItems","randAdd","resetDatabase","createInviteCode","editSettings","deletePlaylist","adminEditUsers","adminAddUser","submitScrobbler");
     22sajax_handle_client_request(); // serve client instances
     23
     24require 'modules/_shared/tmpl/'.tmpl.'/header.php';
     25?>
     26<link rel="Stylesheet" href="<?php echo skin_url ?>music.css" type="text/css" />
     27
     28        <script type="text/javascript">
     29                        var page = 'search';
     30                        var mode = '<?php echo $_SESSION['sess_playmode']; ?>';
     31                        var bc_parenttype = '';
     32                        var bc_parentitem = '';
     33                        var bc_childtype = '';
     34                        var bc_childitem = '';
     35                        var prevpage = '';
     36                        var currentpage = 'search';
     37                        var nowplaying = 0;
     38                        var isplaying = 0;
     39                        var clearbc = 1;
     40                       
     41        <?php sajax_show_javascript(); ?></script>
     42        <script type="text/javascript" src="<?php echo root; ?>music/mp3act_js.js.php"></script>       
     43        <script type="text/javascript" src="<?php echo root; ?>music/mp3act_fat.js"></script>
     44
     45<div id="wrap">
     46        <div id="header">
     47                <div id="controls">
     48                       
     49                </div>
     50                <h1 id="pagetitle"></h1>
     51                <ul class="music" id="nav">
     52                        <li><a href="#" id="search_music" onclick="switchPage('search'); return false;" title="Search the Music Database">Search</a></li>
     53                        <li><a href="#" id="browse" onclick="switchPage('browse'); return false;"  title="Browse the Music Database" class="c">Browse</a></li>
     54                        <li><a href="#" id="random" onclick="switchPage('random'); return false;" title="Create Random Mixes">Random</a></li>
     55                        <li><a href="#" id="playlists" onclick="switchPage('playlists'); return false;" title="Load Saved Playlists">Playlists</a></li>
     56                        <li><a href="#" id="stats" onclick="switchPage('stats'); return false;" title="View Server Statistics">Stats</a></li>
     57                </ul>
     58               
     59        </div>
     60        <div id="loading"><h1>LOADING...</h1></div>
     61        <div id="left">
     62                <h2 id="breadcrumb"></h2>               
     63                <div class="box" id="info">
     64                </div>
     65        </div>
     66       
     67        <div id="right">
     68                        <div class="box">
     69                                <div class="head">
     70                                        <div class="right"><a href="#" onclick="play('pl',0); return false;" title="Play This Playlist Now">play</a> <a href="#" onclick="savePL('open',0); return false;" title="Save Current Playlist">save</a> <a href="#" onclick="plclear(); return false;"class="red" title="Clear the Current Playlist">clear</a></div>
     71                                        <h2 id="pl_title"></h2><span id="pl_info"></span>
     72                                </div>
     73                        <ul class="music" id="playlist">
     74                                       
     75                        </ul>
     76                       
     77                        <div id="box_extra"> </div>
     78                        </div>
     79        </div>
     80        <div class="clear"></div>
     81</div>
     82<iframe src="<?php echo root; ?>music/mp3act_hidden.php" frameborder="0" height="0" width="0" id="hidden" name="hidden"></iframe>
     83<?
     84require 'modules/_shared/tmpl/'.tmpl.'/footer.php';
     85?>
  • mythweb/modules/music/handler.php

    Property changes on: mythweb/modules/music/mp3act_main.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
    1313 *
    1414/**/
    1515
    16 // Make sure the music directory exists
    17     if (file_exists('data/music')) {
    18     // File is not a directory or a symlink
    19         if (!is_dir('data/music') && !is_link('data/music')) {
    20             custom_error('An invalid file exists at data/music.  Please remove it in'
    21                         .' order to use the music portions of MythWeb.');
    22         }
    23     }
    24 // Create the symlink, if possible.
    25 //
    26 // NOTE:  Errors have been disabled because if I turn them on, people hosting
    27 //        MythWeb on Windows machines will have issues.  I will turn the errors
    28 //        back on when I find a clean way to do so.
    29 //
    30     else {
    31         $dir = $db->query_col('SELECT data
    32                                  FROM settings
    33                                 WHERE value="MusicLocation" AND hostname=?',
    34                               hostname
    35                              );
    36         if ($dir) {
    37             $ret = @symlink($dir, 'data/music');
    38             if (!$ret) {
    39                 #custom_error("Could not create a symlink to $dir, the local MythMusic directory"
    40                 #            .' for this hostname ('.hostname.').  Please create a symlink to your'
    41                 #            .' MythMusic directory at data/music in order to use the music'
    42                 #            .' portions of MythWeb.');
    43             }
    44         }
    45         else {
    46             #custom_error('Could not find a value in the database for the MythMusic directory'
    47             #            .' for this hostname ('.hostname.').  Please create a symlink to your'
    48             #            .' MythMusic directory at data/music in order to use the music'
    49             #            .' portions of MythWeb.');
    50         }
    51     }
    52 
    53 //
    54 //  Someday, music.php will let us stream
    55 //  entire playlists to any spot on planet earth
    56 //
    57 require_once tmpl_dir.'music.php';
    58 
    59 $mythmusic = new mythMusic();
    60 $mythmusic->display();
    61 
    62 class mythMusic {
    63     var $filterPlaylist;
    64     var $filterArtist;
    65     var $filterAlbum;
    66     var $filterGenre;
    67     var $filterRank;
    68     var $filterSonglist;
    69     var $keepFilters;
    70     var $filter;
    71     var $totalCount;
    72     var $offset;
    73 
    74     var $result;
    75 
    76 
    77     var $intid;
    78     var $artist;
    79     var $album;
    80     var $title;
    81     var $genre;
    82     var $length;
    83     var $rating;
    84     var $filename;
    85     var $urlfilename;
    86 
    87     var $alphalink;
    88     var $alphaoffset;
    89 
    90     function mythMusic()
    91     {
    92         if($_GET['offset'] >=0 )
    93             $this->offset=$_GET['offset'];
    94         else
    95             $this->offset=0;
    96 
    97         /**** If alphalink set, then change offset to new value ****/
    98         if ($_GET['alphalink']) {
    99             $alphalink = $_GET['alphalink'];
    100             $result=mysql_query("select count(1) from musicmetadata where upper(artist) < ".escape($alphalink));
    101             $alphaoffset=mysql_fetch_row($result);
    102             $this->offset=$alphaoffset[0];
    103             mysql_free_result($result);
    104         }
    105 
    106         if($_GET['filterPlaylist'])
    107         {
    108             $this->filterPlaylist=$_GET['filterPlaylist'];
    109             $_GET['filterPlaylist'];
    110         }
    111         else
    112             $this->filterPlaylist="_All_";
    113 
    114         if($_GET['filterArtist'])
    115         {
    116             $this->filterArtist=$_GET['filterArtist'];
    117         }
    118         else
    119             $this->filterArtist="_All_";
    120 
    121         if($_GET['filterAlbum'])
    122         {
    123             $this->filterAlbum=$_GET['filterAlbum'];
    124         }
    125         else
    126             $this->filterAlbum="_All_";
    127         if($_GET['filterGenre'])
    128         {
    129             $this->filterGenre=$_GET['filterGenre'];
    130         }
    131         else
    132             $this->filterGenre="_All_";
    133 
    134 
    135         if($_GET['filterRank'])
    136             $this->filterRank=$_GET['filterRank'];
    137         else
    138             $this->filterRank="_All_";
    139     }
    140 
    141     function readRow()
    142     {
    143 
    144             if($row=mysql_fetch_row($this->result))
    145             {
    146                 $this->intid=$row[0];
    147                 $this->artist=$row[1];
    148                 $this->album=$row[2];
    149                 $this->title=$row[3];
    150                 $this->genre=$row[4];
    151                 $this->length=$row[5];
    152                 $this->rating=$row[6];
    153                 $this->filename=$row[7];
    154 
    155                 $this->urlfilename=root.'data/music';
    156                 global $musicdir;
    157                 foreach (preg_split('/\//', substr($this->filename, strlen($musicdir))) as $dir) {
    158                     if (!$dir) continue;
    159                     $this->urlfilename .= '/'.rawurlencode(utf8tolocal($dir));
    160                 }
    161 
    162                 return(true);
    163             }
    164             return(false);
    165     }
    166 
    167 
    168 
    169     function display()
    170     {
    171         $music = new Theme_music();
    172         $this->init($music->getMaxPerPage());
    173         $music->setOffset($this->offset);
    174         $music->setTotalCount($this->totalCount);
    175 
    176         $music->print_header($this->filterPlaylist,$this->filterArtist,$this->filterAlbum,$this->filterGenre);
    177         if($this->totalCount > 0)
    178         {
    179             while($this->readRow())
    180             {
    181                 $music->printDetail($this->title,$this->length,$this->artist,$this->album,$this->genre,$this->urlfilename);
    182             }
    183         }
    184         else
    185         {
    186             $music->printNoDetail();
    187         }
    188         if($this->result)
    189             mysql_free_result($this->result);
    190 
    191         $music->print_footer();
    192     }
    193 
    194     function prepFilter()
    195     {
    196         $prevFilter=0;
    197         $thisFilter="";
    198 
    199         if($this->filterPlaylist != "_All_")
    200         {
    201             $playlistResult = mysql_query("select playlistid,name,songlist,hostname from musicplaylist where playlistid=".escape($this->filterPlaylist));
    202             if($playlistResult)
    203             {
    204                 if(mysql_num_rows($playlistResult)==1)
    205                 {
    206                     $row=mysql_fetch_row($playlistResult);
    207                     if($row)
    208                     {
    209 
    210                         $this->filterSonglist=$row[2];
    211                         if($prevFilter==1)
    212                             $this->filter=$this->filter . "and intid in (" . $this->filterSonglist . ")";
    213                         else
    214                         {
    215                             $this->filter="intid in (" . $this->filterSonglist . ")";
    216                             $prevFilter=1;
    217                         }
    218 
    219                         $this->keepFilters="&amp;filterPlaylist=" . urlencode($this->filterPlaylist);
    220 
    221                     }
    222                 }
    223             }
    224         }
    225 
    226         if($this->filterArtist != "_All_" )
    227         {
    228             if($prevFilter==1)
    229                 $this->filter=$this->filter . "and artist=".escape($this->filterArtist);
    230             else
    231             {
    232                 $this->filter="artist=".escape($this->filterArtist);
    233                 $prevFilter=1;
    234             }
    235 
    236             $this->keepFilters="&amp;filterArtist=" . urlencode($this->filterArtist);
    237 
    238         }
    239         if($this->filterAlbum != "_All_")
    240         {
    241             if($prevFilter==1)
    242             {
    243                 $this->filter= $this->filter . "and album=\"" . $this->filterAlbum . "\"";
    244             }
    245             else
    246             {
    247                 $this->filter="album=\"" . $this->filterAlbum . "\"";
    248                 $prevFilter=1;
    249             }
    250             $this->keepFilters =$this->keepFilters . "&amp;filterAlbum=" . urlencode($this->filterAlbum) ;
    251 
    252         }
    253         if($this->filterGenre != "_All_")
    254         {
    255             if($prevFilter==1)
    256             {
    257                 $this->filter= $this->filter . "and genre=" . $this->filterGenre ;
    258             }
    259             else
    260             {
    261                 $this->filter="genre=\"" . $this->filterGenre . "\"";
    262                 $prevFilter=1;
    263             }
    264             $this->keepFilters =$this->keepFilters . "&amp;filterGenre=" . urlencode($this->filterGenre);
    265 
    266         }
    267 
    268         if($this->filterRank != "_All_")
    269         {
    270             if($prevFilter==1)
    271             {
    272                 $this->filter=$this->filter . "and rank=" . $this->filterRank;
    273             }
    274             else
    275             {
    276                 $this->filter="rank=" . $this->filterRank;
    277                 $prevFilter=1;
    278             }
    279             $this->keepFilters =$this->keepFilters . "&amp;filterRank=" . urlencode($this->filterRank);
    280         }
    281 
    282 
    283 
    284     }
    285 
    286     function init($maxPerPage) {
    287         global $db;
    288         $this->prepFilter();
    289         if (empty($this->filter))
    290             $this->totalCount = $db->query_col('SELECT COUNT(*) FROM musicmetadata');
    291         else
    292             $this->totalCount = $db->query_col('SELECT COUNT(*) FROM musicmetadata WHERE '.$this->filter);
    293 
    294         if ($this->totalCount > 0) {
    295             if($this->offset > 0) {
    296                 $limitText='LIMIT ' . $this->offset . ',' . $maxPerPage;
    297             }
    298             else
    299                 $limitText='LIMIT ' . $maxPerPage;
    300 
    301             if (empty($this->filter))
    302                 $this->result=mysql_query("select intid,artist,album,title,genre,length,rating,filename from musicmetadata order by artist,album,tracknum " . $limitText);
    303             else
    304                 $this->result=mysql_query("select intid,artist,album,title,genre,length,rating,filename from musicmetadata where $this->filter order by artist,album,tracknum $limitText");
    305         }
    306     }
    307 }
    308 
    309 
     16    if (tmpl == "compact")
     17        {
     18        require_once("modules/music/music_handler.php");
     19        }
     20    else
     21        {
     22        if (in_array($Path[1], array('mp3act_js.js.php', 'mp3act_fat.js', 'mp3act_hidden.php')))
     23            {
     24            require_once 'modules/music/'.$Path[1];
     25            exit();
     26                }
     27        if (strstr($Path[1],"mp3act_playstream.php") != false)
     28            {
     29            require_once 'modules/music/mp3act_playstream.php';
     30            exit();
     31            }
     32   
     33        require_once 'modules/music/mp3act_main.php';
     34        }
     35?>   
     36 No newline at end of file
  • mythweb/modules/music/music_handler.php

     
     1<?php
     2/**
     3 * MythMusic browser
     4 *
     5 * @url         $URL: svn+ssh://xris@cvs.mythtv.org/var/lib/svn/trunk/mythplugins/mythweb/modules/music/init.php $
     6 * @date        $Date: 2006-03-26 12:09:14 +0200 (So, 26 MÀr 2006) $
     7 * @version     $Revision: 9493 $
     8 * @author      $Author: xris $
     9 * @license     GPL
     10 *
     11 * @package     MythWeb
     12 * @subpackage  Music
     13 *
     14/**/
     15
     16// Make sure the music directory exists
     17    if (file_exists('data/music')) {
     18    // File is not a directory or a symlink
     19        if (!is_dir('data/music') && !is_link('data/music')) {
     20            custom_error('An invalid file exists at data/music.  Please remove it in'
     21                        .' order to use the music portions of MythWeb.');
     22        }
     23    }
     24// Create the symlink, if possible.
     25//
     26// NOTE:  Errors have been disabled because if I turn them on, people hosting
     27//        MythWeb on Windows machines will have issues.  I will turn the errors
     28//        back on when I find a clean way to do so.
     29//
     30    else {
     31        $dir = $db->query_col('SELECT data
     32                                 FROM settings
     33                                WHERE value="MusicLocation" AND hostname=?',
     34                              hostname
     35                             );
     36        if ($dir) {
     37            $ret = @symlink($dir, 'data/music');
     38            if (!$ret) {
     39                #custom_error("Could not create a symlink to $dir, the local MythMusic directory"
     40                #            .' for this hostname ('.hostname.').  Please create a symlink to your'
     41                #            .' MythMusic directory at data/music in order to use the music'
     42                #            .' portions of MythWeb.');
     43            }
     44        }
     45        else {
     46            #custom_error('Could not find a value in the database for the MythMusic directory'
     47            #            .' for this hostname ('.hostname.').  Please create a symlink to your'
     48            #            .' MythMusic directory at data/music in order to use the music'
     49            #            .' portions of MythWeb.');
     50        }
     51    }
     52
     53//
     54//  Someday, music.php will let us stream
     55//  entire playlists to any spot on planet earth
     56//
     57require_once tmpl_dir.'music.php';
     58
     59$mythmusic = new mythMusic();
     60$mythmusic->display();
     61
     62class mythMusic {
     63    var $filterPlaylist;
     64    var $filterArtist;
     65    var $filterAlbum;
     66    var $filterGenre;
     67    var $filterRank;
     68    var $filterSonglist;
     69    var $keepFilters;
     70    var $filter;
     71    var $totalCount;
     72    var $offset;
     73
     74    var $result;
     75
     76
     77    var $intid;
     78    var $artist;
     79    var $album;
     80    var $title;
     81    var $genre;
     82    var $length;
     83    var $rating;
     84    var $filename;
     85    var $urlfilename;
     86
     87    var $alphalink;
     88    var $alphaoffset;
     89
     90    function mythMusic()
     91    {
     92        if($_GET['offset'] >=0 )
     93            $this->offset=$_GET['offset'];
     94        else
     95            $this->offset=0;
     96
     97        /**** If alphalink set, then change offset to new value ****/
     98        if ($_GET['alphalink']) {
     99            $alphalink = $_GET['alphalink'];
     100           
     101            $result=mysql_query("SELECT count(1) FROM music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id WHERE (((UPPER(music_artists.artist_name))< \"".$alphalink."\")) ORDER BY music_artists.artist_name;");
     102            $alphaoffset=mysql_fetch_row($result);
     103            $this->offset=$alphaoffset[0];
     104            mysql_free_result($result);
     105        }
     106
     107        if($_GET['filterPlaylist'])
     108        {
     109            $this->filterPlaylist=$_GET['filterPlaylist'];
     110            $_GET['filterPlaylist'];
     111        }
     112        else
     113            $this->filterPlaylist="_All_";
     114
     115        if($_GET['filterArtist'])
     116        {
     117            $this->filterArtist=$_GET['filterArtist'];
     118        }
     119        else
     120            $this->filterArtist="_All_";
     121
     122        if($_GET['filterAlbum'])
     123        {
     124            $this->filterAlbum=$_GET['filterAlbum'];
     125        }
     126        else
     127            $this->filterAlbum="_All_";
     128        if($_GET['filterGenre'])
     129        {
     130            $this->filterGenre=$_GET['filterGenre'];
     131        }
     132        else
     133            $this->filterGenre="_All_";
     134
     135
     136        if($_GET['filterRank'])
     137            $this->filterRank=$_GET['filterRank'];
     138        else
     139            $this->filterRank="_All_";
     140    }
     141
     142    function readRow()
     143    {
     144
     145            if($row=mysql_fetch_row($this->result))
     146            {
     147                $this->intid=$row[0];
     148                $this->artist=$row[1];
     149                $this->album=$row[2];
     150                $this->title=$row[3];
     151                $this->genre=$row[4];
     152                $this->length=$row[5];
     153                $this->rating=$row[6];
     154                $this->filename=$row[7];
     155
     156                $this->urlfilename=root.'data/music';
     157                global $musicdir;
     158                foreach (preg_split('/\//', substr($this->filename, strlen($musicdir))) as $dir) {
     159                    if (!$dir) continue;
     160                    $this->urlfilename .= '/'.rawurlencode(utf8tolocal($dir));
     161                }
     162
     163                return(true);
     164            }
     165            return(false);
     166    }
     167
     168
     169
     170    function display()
     171    {
     172        $music = new Theme_music();
     173        $this->init($music->getMaxPerPage());
     174        $music->setOffset($this->offset);
     175        $music->setTotalCount($this->totalCount);
     176
     177        $music->print_header($this->filterPlaylist,$this->filterArtist,$this->filterAlbum,$this->filterGenre);
     178        if($this->totalCount > 0)
     179        {
     180            while($this->readRow())
     181            {
     182                $music->printDetail($this->title,$this->length,$this->artist,$this->album,$this->genre,$this->urlfilename);
     183            }
     184        }
     185        else
     186        {
     187            $music->printNoDetail();
     188        }
     189        if($this->result)
     190            mysql_free_result($this->result);
     191
     192        $music->print_footer();
     193    }
     194
     195    function prepFilter()
     196    {
     197        $prevFilter=0;
     198        $thisFilter="";
     199
     200        if($this->filterPlaylist != "_All_")
     201        {
     202            $playlistResult = mysql_query("select playlistid,name,songlist,hostname from musicplaylist where playlistid=".escape($this->filterPlaylist));
     203            if($playlistResult)
     204            {
     205                if(mysql_num_rows($playlistResult)==1)
     206                {
     207                    $row=mysql_fetch_row($playlistResult);
     208                    if($row)
     209                    {
     210
     211                        $this->filterSonglist=$row[2];
     212                        if($prevFilter==1)
     213                            $this->filter=$this->filter . "and song_id in (" . $this->filterSonglist . ")";
     214                        else
     215                        {
     216                            $this->filter="song_id in (" . $this->filterSonglist . ")";
     217                            $prevFilter=1;
     218                        }
     219
     220                        $this->keepFilters="&amp;filterPlaylist=" . urlencode($this->filterPlaylist);
     221
     222                    }
     223                }
     224            }
     225        }
     226
     227        if($this->filterArtist != "_All_" )
     228        {
     229            if($prevFilter==1)
     230                $this->filter=$this->filter . "and artist_name=".escape($this->filterArtist);
     231            else
     232            {
     233                $this->filter="artist_name=".escape($this->filterArtist);
     234                $prevFilter=1;
     235            }
     236
     237            $this->keepFilters="&amp;filterArtist=" . urlencode($this->filterArtist);
     238
     239        }
     240        if($this->filterAlbum != "_All_")
     241        {
     242            if($prevFilter==1)
     243            {
     244                $this->filter= $this->filter . "and album_name=\"" . $this->filterAlbum . "\"";
     245            }
     246            else
     247            {
     248                $this->filter="album_name=\"" . $this->filterAlbum . "\"";
     249                $prevFilter=1;
     250            }
     251            $this->keepFilters =$this->keepFilters . "&amp;filterAlbum=" . urlencode($this->filterAlbum) ;
     252
     253        }
     254        if($this->filterGenre != "_All_")
     255        {
     256            if($prevFilter==1)
     257            {
     258                $this->filter= $this->filter . "and genre=" . $this->filterGenre ;
     259            }
     260            else
     261            {
     262                $this->filter="genre=\"" . $this->filterGenre . "\"";
     263                $prevFilter=1;
     264            }
     265            $this->keepFilters =$this->keepFilters . "&amp;filterGenre=" . urlencode($this->filterGenre);
     266
     267        }
     268
     269        if($this->filterRank != "_All_")
     270        {
     271            if($prevFilter==1)
     272            {
     273                $this->filter=$this->filter . "and rank=" . $this->filterRank;
     274            }
     275            else
     276            {
     277                $this->filter="rank=" . $this->filterRank;
     278                $prevFilter=1;
     279            }
     280            $this->keepFilters =$this->keepFilters . "&amp;filterRank=" . urlencode($this->filterRank);
     281        }
     282
     283
     284
     285    }
     286
     287    function init($maxPerPage) {
     288        global $db;
     289        $this->prepFilter();
     290        if (empty($this->filter))
     291            $this->totalCount = $db->query_col('SELECT COUNT(*) FROM music_songs');
     292        else
     293            $this->totalCount = $db->query_col('SELECT COUNT(*) FROM ((music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id WHERE '.$this->filter);
     294        if ($this->totalCount > 0) {
     295            if($this->offset > 0) {
     296                $limitText='LIMIT ' . $this->offset . ',' . $maxPerPage;
     297            }
     298            else
     299                $limitText='LIMIT ' . $maxPerPage;
     300
     301            if (empty($this->filter))
     302           
     303                $this->result=mysql_query("SELECT music_songs.song_id, music_artists.artist_name, music_albums.album_name, music_songs.name, music_genres.genre, music_songs.length, music_songs.rating, music_songs.filename FROM ((music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id order by artist_name,album_name,track " . $limitText);
     304                //$this->result=mysql_query("select intid,artist,album,title,genre,length,rating,filename from music_songs order by artist,album,tracknum " . $limitText);
     305            else
     306                $this->result=mysql_query("SELECT music_songs.song_id, music_artists.artist_name, music_albums.album_name, music_songs.name, music_genres.genre, music_songs.length, music_songs.rating, music_songs.filename FROM ((music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id where $this->filter order by artist_name,album_name,track " . $limitText);
     307                //$this->result=mysql_query("select intid,artist,album,title,genre,length,rating,filename from music_songs where $this->filter order by artist,album,tracknum $limitText");
     308        }
     309    }
     310}
     311
     312
  • mythweb/modules/music/mp3act_sajax.php

    Property changes on: mythweb/modules/music/music_handler.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php   
     2if (!isset($SAJAX_INCLUDED)) {
     3
     4        /* 
     5         * GLOBALS AND DEFAULTS
     6         *
     7         */
     8        $sajax_debug_mode = 0;
     9        $sajax_export_list = array();
     10        $sajax_request_type = "GET";
     11        $sajax_remote_uri = "";
     12       
     13        /*
     14         * CODE
     15         *
     16         */
     17         
     18        //
     19        // Initialize the Sajax library.
     20        //
     21        function sajax_init() {
     22        }
     23       
     24        //
     25        // Helper function to return the script's own URI.
     26        //
     27        function sajax_get_my_uri() {
     28                global $REQUEST_URI;
     29               
     30                return $REQUEST_URI;
     31        }
     32        $sajax_remote_uri = sajax_get_my_uri();
     33       
     34        //
     35        // Helper function to return an eval()-usable representation
     36        // of an object in JavaScript.
     37        //
     38        function sajax_get_js_repr($value) {
     39                $type = gettype($value);
     40               
     41                if ($type == "boolean" ||
     42                        $type == "integer") {
     43                        return "parseInt($value)";
     44                }
     45                elseif ($type == "double") {
     46                        return "parseFloat($value)";
     47                }
     48                elseif ($type == "array" || $type == "object" ) {
     49                        //
     50                        // XXX Arrays with non-numeric indices are not
     51                        // permitted according to ECMAScript, yet everyone
     52                        // uses them.. We'll use an object.
     53                        //
     54                        $s = "{ ";
     55                        if ($type == "object") {
     56                                $value = get_object_vars($value);
     57                        }
     58                        foreach ($value as $k=>$v) {
     59                                $esc_key = sajax_esc($k);
     60                                if (is_numeric($k))
     61                                        $s .= "$k: " . sajax_get_js_repr($v) . ", ";
     62                                else
     63                                        $s .= "\"$esc_key\": " . sajax_get_js_repr($v) . ", ";
     64                        }
     65                        return substr($s, 0, -2) . " }";
     66                }
     67                else {
     68                        $esc_val = sajax_esc($value);
     69                        $s = "\"$esc_val\"";
     70                        return $s;
     71                }
     72        }
     73
     74        function sajax_handle_client_request() {
     75                global $sajax_export_list;
     76               
     77                $mode = "";
     78               
     79                if (! empty($_GET["rs"]))
     80                        $mode = "get";
     81               
     82                if (!empty($_POST["rs"]))
     83                        $mode = "post";
     84                       
     85                if (empty($mode))
     86                        return;
     87
     88                $target = "";
     89               
     90                if ($mode == "get") {
     91                        // Bust cache in the head
     92                        header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
     93                        header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
     94                        // always modified
     95                        header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
     96                        header ("Pragma: no-cache");                          // HTTP/1.0
     97                        $func_name = $_GET["rs"];
     98                        if (! empty($_GET["rsargs"]))
     99                                $args = $_GET["rsargs"];
     100                        else
     101                                $args = array();
     102                }
     103                else {
     104                        $func_name = $_POST["rs"];
     105                        if (! empty($_POST["rsargs"]))
     106                                $args = $_POST["rsargs"];
     107                        else
     108                                $args = array();
     109                }
     110               
     111                if (! in_array($func_name, $sajax_export_list))
     112                        echo "-:$func_name not callable";
     113                else {
     114                        echo "+:";
     115                        $result = call_user_func_array($func_name, $args);
     116                        echo "var res = " . sajax_get_js_repr($result) . "; res;";
     117                }
     118                exit;
     119        }
     120       
     121        function sajax_get_common_js() {
     122                global $sajax_debug_mode;
     123                global $sajax_request_type;
     124                global $sajax_remote_uri;
     125               
     126                $t = strtoupper($sajax_request_type);
     127                if ($t != "" && $t != "GET" && $t != "POST")
     128                        return "// Invalid type: $t.. \n\n";
     129               
     130                ob_start();
     131                ?>
     132               
     133                // remote scripting library
     134                // (c) copyright 2005 modernmethod, inc
     135                var sajax_debug_mode = <?php echo $sajax_debug_mode ? "true" : "false"; ?>;
     136                var sajax_request_type = "<?php echo $t; ?>";
     137                var sajax_target_id = "";
     138               
     139                function sajax_debug(text) {
     140                        if (sajax_debug_mode)
     141                                alert("RSD: " + text)
     142                }
     143                function sajax_init_object() {
     144                        sajax_debug("sajax_init_object() called..")
     145                       
     146                        var A;
     147                        try {
     148                                A=new ActiveXObject("Msxml2.XMLHTTP");
     149                        } catch (e) {
     150                                try {
     151                                        A=new ActiveXObject("Microsoft.XMLHTTP");
     152                                } catch (oc) {
     153                                        A=null;
     154                                }
     155                        }
     156                        if(!A && typeof XMLHttpRequest != "undefined")
     157                                A = new XMLHttpRequest();
     158                        if (!A)
     159                                sajax_debug("Could not create connection object.");
     160                        return A;
     161                }
     162                function sajax_do_call(func_name, args) {
     163                        var i, x, n;
     164                        var uri;
     165                        var post_data;
     166                        var target_id;
     167                       
     168                        sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
     169                        target_id = sajax_target_id;
     170                        if (sajax_request_type == "")
     171                                sajax_request_type = "GET";
     172                       
     173                        uri = "<?php echo $sajax_remote_uri; ?>";
     174                        if (sajax_request_type == "GET") {
     175                       
     176                                if (uri.indexOf("?") == -1)
     177                                        uri += "?rs=" + escape(func_name);
     178                                else
     179                                        uri += "&rs=" + escape(func_name);
     180                                uri += "&rst=" + escape(sajax_target_id);
     181                                uri += "&rsrnd=" + new Date().getTime();
     182                               
     183                                for (i = 0; i < args.length-1; i++)
     184                                        uri += "&rsargs[]=" + escape(args[i]);
     185
     186                                post_data = null;
     187                        }
     188                        else if (sajax_request_type == "POST") {
     189                                post_data = "rs=" + escape(func_name);
     190                                post_data += "&rst=" + escape(sajax_target_id);
     191                                post_data += "&rsrnd=" + new Date().getTime();
     192                               
     193                                for (i = 0; i < args.length-1; i++)
     194                                        post_data = post_data + "&rsargs[]=" + escape(args[i]);
     195                        }
     196                        else {
     197                                alert("Illegal request type: " + sajax_request_type);
     198                        }
     199                       
     200                        x = sajax_init_object();
     201                        x.open(sajax_request_type, uri, true);
     202                       
     203                        if (sajax_request_type == "POST") {
     204                                x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
     205                                x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     206                        }
     207                       
     208                        x.onreadystatechange = function() {
     209                                if (x.readyState != 4)
     210                                        return;
     211
     212                                sajax_debug("received " + x.responseText);
     213                               
     214                                var status;
     215                                var data;
     216                                status = x.responseText.charAt(0);
     217                                data = x.responseText.substring(2);
     218                                if (status == "-")
     219                                        alert("Error: " + data);
     220                                else {
     221                                        if (target_id != "")
     222                                                document.getElementById(target_id).innerHTML = eval(data);
     223                                        else
     224                                                args[args.length-1](eval(data));
     225                                }
     226                        }
     227                        sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
     228                        x.send(post_data);
     229                        sajax_debug(func_name + " waiting..");
     230                        delete x;
     231                        return true;
     232                }
     233               
     234                <?php
     235                $html = ob_get_contents();
     236                ob_end_clean();
     237                return $html;
     238        }
     239       
     240        function sajax_show_common_js() {
     241                echo sajax_get_common_js();
     242        }
     243       
     244        // javascript escape a value
     245        function sajax_esc($val)
     246        {
     247                $val = str_replace("\\", "\\\\", $val);
     248                $val = str_replace("\r", "\\r", $val);
     249                $val = str_replace("\n", "\\n", $val);
     250                return str_replace('"', '\\"', $val);
     251        }
     252
     253        function sajax_get_one_stub($func_name) {
     254                ob_start();     
     255                ?>
     256               
     257                // wrapper for <?php echo $func_name; ?>
     258               
     259                function x_<?php echo $func_name; ?>() {
     260                        sajax_do_call("<?php echo $func_name; ?>",
     261                                x_<?php echo $func_name; ?>.arguments);
     262                }
     263               
     264                <?php
     265                $html = ob_get_contents();
     266                ob_end_clean();
     267                return $html;
     268        }
     269       
     270        function sajax_show_one_stub($func_name) {
     271                echo sajax_get_one_stub($func_name);
     272        }
     273       
     274        function sajax_export() {
     275                global $sajax_export_list;
     276               
     277                $n = func_num_args();
     278                for ($i = 0; $i < $n; $i++) {
     279                        $sajax_export_list[] = func_get_arg($i);
     280                }
     281        }
     282       
     283        $sajax_js_has_been_shown = 0;
     284        function sajax_get_javascript()
     285        {
     286                global $sajax_js_has_been_shown;
     287                global $sajax_export_list;
     288               
     289                $html = "";
     290                if (! $sajax_js_has_been_shown) {
     291                        $html .= sajax_get_common_js();
     292                        $sajax_js_has_been_shown = 1;
     293                }
     294                foreach ($sajax_export_list as $func) {
     295                        $html .= sajax_get_one_stub($func);
     296                }
     297                return $html;
     298        }
     299       
     300        function sajax_show_javascript()
     301        {
     302                echo sajax_get_javascript();
     303        }
     304
     305       
     306        $SAJAX_INCLUDED = 1;
     307}
     308?>
  • mythweb/modules/music/mp3act_js.js.php

    Property changes on: mythweb/modules/music/mp3act_sajax.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php
     2function music_dir()
     3    {
     4    return 'http://'.$_SERVER['HTTP_HOST'].root."music/";
     5}
     6?>
     7        window.onload=function(){ init(); };
     8       
     9        function init(){
     10                mode = 'streaming';
     11                setPageTitle();
     12                x_viewPlaylist(viewPlaylist_cb);
     13                x_playlistInfo(plinfo_cb);
     14                setPLTitle();
     15                setCurrentPage();
     16                setControls();
     17                updateBox(page,0);
     18        }
     19        function empty_cb(new_data){
     20         
     21        }
     22       
     23        function setPageNav(){
     24                //document.getElementById("breadcrumb").innerHTML = prevpage;
     25        }
     26   
     27        function switchPage(newpage){
     28                prevpage = page;
     29                page = newpage;
     30       
     31                updateBox(page,0);
     32                setPageTitle();
     33                setCurrentPage();
     34                //setPageNav();
     35        }
     36       
     37        function switchMode(newmode){
     38                if(newmode == mode){ //do nothing
     39                }
     40                else{
     41                        x_switchMode(newmode,switchMode_cb);
     42                }
     43        }
     44       
     45        function setPLTitle(){
     46                if(mode == 'streaming')
     47                        newmode = 'Streaming';
     48                                if(mode == 'jukebox')
     49                        newmode = 'Jukebox';
     50//              newmode = 'Streaming';
     51                document.getElementById("pl_title").innerHTML = newmode + " <? echo t("Playlist"); ?> ";
     52        }
     53       
     54        function viewPlaylist_cb(new_data){
     55                document.getElementById("playlist").innerHTML = new_data;
     56        }
     57       
     58        function switchMode_cb(new_data){
     59                mode = new_data;
     60                setControls();
     61                setPLTitle();
     62                x_playlistInfo(plinfo_cb);
     63                x_viewPlaylist(viewPlaylist_cb);
     64        }
     65       
     66        function setCurrentPage(){
     67                var x = document.getElementById('nav');
     68                var y = x.getElementsByTagName('a');
     69                for (var i=0;i<y.length;i++){
     70                                        y[i].removeAttribute("class");
     71                                        if(y[i].id == page)
     72                                                y[i].setAttribute('class','c');
     73                                }
     74        }
     75       
     76        function getDropDown(type,id){
     77                x_getDropDown(type,id,getDropDown_cb);
     78        }
     79       
     80        function getDropDown_cb(new_data){
     81                ul = document.getElementById("browse_ul");
     82                ul.innerHTML = new_data;
     83                ul.style.display = 'block';
     84        }
     85       
     86        function closeDropDown(){
     87                ul = document.getElementById("browse_ul");
     88                ul.style.display = 'none';
     89                ul.innerHTML = '';
     90        }
     91       
     92        function setControls(){
     93                if(mode=='streaming')
     94                                document.getElementById("controls").innerHTML = '<div class="current" id="current">&nbsp;<strong class="right">Streaming Mode Active</strong></div>';
     95                                else{
     96                                        document.getElementById("controls").innerHTML = '<div class="buttons"><a href="#" onclick="play(\'prev\',nowplaying); return false;" title="Previous Song"><img src="img/rew_big.gif" /></a><a href="#" id="play" onclick="play(\'pl\',0); return false;" title="Play Playlist"><img src="img/play_big.gif" /></a><a href="#" id="stop" onclick="play(\'stop\',0); return false;" title="Stop Music"><img src="img/stop_big.gif" /></a><a href="#" onclick="play(\'next\',0); return false;" title="Next Song"><img src="img/ff_big.gif" /></a><br/><!--<img src="img/vol.gif" />--></div><div class="current" id="current"><span id="artist"></span><span id="song"></span></div>';
     97                                        refresh();
     98                                        setTimeout("refresh()", 10000);
     99                                }
     100        }
     101       
     102        function savePL(type,data){
     103                if(type=='open'){
     104                        var save_form = "<h2>Save Playlist</h2><form onsubmit='return savePL(\"save\",this)' method='get' action=''><strong>Playlist Name</strong><br/><input type='text' name='save_pl_name' id='save_pl_name' size='25' /><input style='left: 350px; position: absolute;' type='submit' value='save new' /></form>";
     105                        save_form = save_form + "<form onsubmit='return savePL(\"saveold\",this)' method='get' action=''><hr><strong>overwrite Playlist:&nbsp;</strong></ br><select name='overwrite_pl_name'>";
     106                        <?php
     107                        $query = "SELECT playlist_name,hostname FROM music_saved_playlists;";
     108                        $result = mysql_query($query);
     109                        while($row = mysql_fetch_array($result)){
     110                                if ($row[1] == "")
     111                                    echo "save_form = save_form + \"<option>".$row[playlist_name]."</option>\";";
     112                                else
     113                                    echo "save_form = save_form + \"<option>".$row[0]."@".$row[1]."</option>\";";
     114                        }
     115                        ?>
     116                        save_form = save_form + "&nbsp;</select>&nbsp;<input style='left: 350px; position: absolute;' type='submit' value='save' /><br><hr><br><input style='left: 400px; position: absolute;' type='button' onclick=\"savePL('close',0); return false;\" value='cancel' /></form> ";                           
     117                        document.getElementById("box_extra").innerHTML = save_form;
     118                        document.getElementById("box_extra").style.display = 'block';
     119                }
     120                else if(type=='save'){
     121                        var pl_name = data.save_pl_name.value;
     122                        x_savePlaylist(pl_name,0,save_Playlist_cb);                         
     123
     124                        return false;
     125                }
     126                else if(type=='saveold'){
     127                        var ov_pl_name = data.overwrite_pl_name.value;
     128                        x_savePlaylist(ov_pl_name,1,save_Playlist_cb);
     129
     130                        return false;
     131                }
     132                else if(type=='close')
     133                        document.getElementById("box_extra").style.display = 'none';
     134        }
     135       
     136        function save_Playlist_cb(new_data){
     137                box = document.getElementById("box_extra");
     138                box.innerHTML = new_data;
     139                setTimeout("box.style.display='none'","1250");
     140        }
     141       
     142        function movePLItem(direction,item){
     143                                var y;
     144                                var temp;
     145                if(direction == "up")
     146                        y = item.previousSibling;
     147                else if(direction == "down")
     148                                        y = item.nextSibling;
     149                                       
     150                                if(y && y.nodeName == 'LI'){   
     151                        pl_move(y.id,item.id);
     152                       
     153                        var temp = y.innerHTML;
     154                        y.innerHTML = item.innerHTML;
     155                        item.innerHTML = temp;
     156                        Fat.fade_element(y.id,null,900,'#ffcc99','#f3f3f3');
     157                }
     158        }
     159       
     160        function setBgcolor(id, c)
     161                        {
     162                                if(id != ('pl'+nowplaying)){
     163                                var o = document.getElementById(id);
     164                                o.style.backgroundColor = c;
     165                                }
     166                        }
     167                       
     168        function refresh_cb(new_data) {
     169                if(new_data[0] == 1){
     170                }       
     171                else{
     172                        document.getElementById("current").innerHTML = new_data[0];
     173                        isplaying = new_data[2];
     174                        if(new_data[1] > 0){
     175                               
     176                                // highlight current song
     177                                oldsong = nowplaying;
     178                                nowplaying = new_data[1];
     179                                if(oldsong != 0 && oldsong != new_data[1]){
     180                                                var old = document.getElementById('pl'+oldsong);
     181                                                                old.removeAttribute('class');
     182                                                                Fat.fade_element('pl'+oldsong,null,null,'#96D1EF','#f3f3f3');
     183                                                               
     184                                                                Fat.fade_element('pl'+new_data[1],null,1400,'#f3f3f3','#96D1EF');
     185                                }
     186                                var current = document.getElementById('pl'+new_data[1]);
     187                               
     188                                current.setAttribute('class','currentplay');
     189                                document.getElementById('stop').style.display = 'inline';
     190                                document.getElementById('play').style.display = 'none';
     191                               
     192                        }else if(nowplaying!=0 && isplaying==0){
     193                                document.getElementById('pl'+nowplaying).removeAttribute('class');
     194                                Fat.fade_element('pl'+nowplaying,null,null,'#96D1EF','#f3f3f3');
     195                                nowplaying = 0;
     196                                document.getElementById('stop').style.display = 'none';
     197                                document.getElementById('play').style.display = 'inline';
     198                        }
     199                        else if(isplaying==0){
     200                                document.getElementById('stop').style.display = 'none';
     201                                document.getElementById('play').style.display = 'inline';
     202                        }
     203                        else if(isplaying==1){
     204                                        document.getElementById('stop').style.display = 'inline';
     205                                document.getElementById('play').style.display = 'none';
     206                        }
     207                }
     208                                setTimeout("refresh()", 20000);
     209                        }
     210       
     211                        function refresh(){
     212                                if(mode=='jukebox'){
     213                                        var artist = document.getElementById("artist").innerHTML;
     214                                        var song = document.getElementById("song").innerHTML;
     215                                        x_getCurrentSong(artist,song,refresh_cb);
     216                                }
     217                        }
     218               
     219                        function setPageTitle(){
     220                                var pages= new Array()
     221                                pages["browse"]="Browse Music";
     222                                pages["search"]="Search Music";
     223                                pages["prefs"]="User Account Preferences";
     224                                pages["random"]="Create a Random Mix";
     225                                pages["playlists"]="Load a Saved Playlist";
     226                                pages["stats"]="Server Statistics";
     227                                pages["admin"]="mp3act Administration";
     228                                pages["about"]="About mp3act";
     229                                document.getElementById("pagetitle").innerHTML = pages[page];
     230                               
     231                        }
     232                       
     233                        function getRandItems(type){
     234                          //document.getElementById("breadcrumb").innerHTML = '';
     235                          document.getElementById("rand_items").innerHTML = '';
     236                                x_getRandItems(type,getRandItems_cb);
     237                        }
     238                       
     239                        function getRandItems_cb(new_data){
     240                                document.getElementById("rand_items").innerHTML = new_data;
     241                        }
     242                       
     243                        function updateBox_cb(new_data){
     244                                document.getElementById("info").innerHTML = new_data;
     245                                document.getElementById("loading").style.display = 'none';
     246                               
     247                                if(clearbc==1)
     248                                        breadcrumb();
     249                                clearbc = 1;
     250                       
     251                        }
     252                       
     253                        function updateBox(type,itemid){
     254                                document.getElementById("loading").style.display = 'block';
     255                                x_musicLookup(type,itemid,updateBox_cb);
     256                               
     257                                if(type == 'genre' || type == 'letter'){
     258                                        bc_parenttype = '';
     259                                        bc_parentitem = '';
     260                                }
     261                                else if(type == 'album' || (type == 'artist' && bc_parenttype != '')){
     262                                        if(bc_childtype == 'all'){
     263                                                bc_parenttype = bc_childtype;
     264                                                bc_parentitem = bc_childitem;
     265                                        }
     266                                }
     267                                else if(type == 'browse' || type == 'search' || type == 'about' || type == 'prefs' || type == 'random' || type == 'admin' || type == 'playlists' || type == 'stats'){
     268
     269                                        bc_parenttype = '';
     270                                        bc_parentitem = '';
     271                                        itemid='';
     272                                        type='';
     273                                }
     274                                else{
     275                                        bc_parenttype = bc_childtype;
     276                                        bc_parentitem = bc_childitem;
     277                                }
     278                               
     279                                bc_childitem = itemid;
     280                                bc_childtype = type;
     281                               
     282                       
     283                               
     284                                       
     285                        }
     286                       
     287                        function deletePlaylist(id){
     288                                if(confirm("Are you sure you want to DELETE THIS SAVED PLAYLIST?")){
     289                                        x_deletePlaylist(id,deletePlaylist_cb);
     290                                }
     291                        }
     292                       
     293                        function deletePlaylist_cb(new_data){
     294                                // reload saved PL page
     295                                clearbc = 0;
     296                                x_musicLookup('playlists',0,updateBox_cb);
     297                                setMsgText("Saved Playlist Successfully Deleted");
     298                        }
     299                       
     300                        function plrem(item){
     301                                x_playlist_rem(item,plrem_cb);
     302                        }
     303                       
     304                        function plrem_cb(rem){
     305                                p = document.getElementById("playlist");
     306                                d_nested = document.getElementById(rem);
     307                                throwaway_node = p.removeChild(d_nested);
     308                                x_playlistInfo(plinfo_cb);
     309                        }
     310                       
     311                        function pladd(type,id){
     312                                x_playlist_add(type,id,pladd_cb);
     313                        }
     314                       
     315                        function pladd_cb(new_data){
     316                               
     317                                if(new_data[0] == 1){
     318                                        x_viewPlaylist(viewPlaylist_cb);
     319                        x_playlistInfo(plinfo_cb);
     320                                }
     321                                else{
     322                                        document.getElementById("playlist").innerHTML += new_data[0];
     323                                       
     324                                        for(var i=2; i<new_data[1]+2; i++){
     325                                                Fat.fade_element(new_data[i],null,1400,'#B4EAA2','#f3f3f3');
     326                                        }
     327                                        x_playlistInfo(plinfo_cb);
     328                                }
     329                        }
     330                       
     331                        function pl_move(item1,item2){
     332                                x_playlist_move(item1,item2,pl_move_cb);
     333                        }
     334                       
     335                        function pl_move_cb(){
     336                                        // do nothing
     337                        }
     338                       
     339                        function plclear(){
     340                                x_clearPlaylist(plinfo_cb);
     341                                document.getElementById("playlist").innerHTML = "";
     342                        }
     343                       
     344                        function plinfo_cb(new_data){
     345                                document.getElementById("pl_info").innerHTML = new_data;
     346                        }
     347                       
     348                        function breadcrumb(){
     349                                        x_buildBreadcrumb(page,bc_parenttype,bc_parentitem,bc_childtype,bc_childitem,breadcrumb_cb);
     350                        }
     351                       
     352                        function breadcrumb_cb(new_data){
     353                                //if(new_data!="")
     354                                        document.getElementById("breadcrumb").innerHTML = new_data;
     355                        }
     356                       
     357                        function play(type,id){
     358                                //alert (mode);
     359                                if(mode == 'streaming'){
     360                                        document.getElementById('hidden').src = null;
     361                                        document.getElementById("hidden").src = "<?php echo music_dir(); ?>mp3act_hidden.php?type="+type+"&id="+id;
     362                                        //alert(document.getElementById("hidden").src);
     363                                }
     364                                else{
     365                                                x_play(mode,type,id,play_cb);
     366                                }
     367                        }
     368                       
     369                        function randAdd(data){
     370                                var type = data.random_type.value;
     371                                if(type == ""){
     372                                        setMsgText("You must choose a random type");
     373                                        return false;
     374                                }
     375                                var num=0;
     376                                num = data.random_count.value;
     377                                var items ='';
     378                                if(type != 'all'){
     379                                        for(var i=0;i<data.random_items.options.length;i++){
     380                                                if(data.random_items.options[i].selected == true)
     381                                                 items += data.random_items.options[i].value+" ";
     382                                        }
     383                                       
     384                                        if(items == ""){
     385                                          setMsgText("You must choose at least one random item");
     386                                          return false;
     387                                        }
     388                                }
     389                                x_randAdd(mode,type,num,items,randadd_cb);
     390                                return false;
     391
     392                        }
     393                       
     394                        function randadd_cb(new_data){
     395                                x_viewPlaylist(viewPlaylist_cb);
     396                                x_playlistInfo(plinfo_cb);
     397                        }
     398
     399                        function play_cb(new_data){
     400                                refresh();
     401                        }
     402                       
     403                        function showAlbumArt(mode){
     404                                document.getElementById('bigart').style.display = mode;
     405                        }
     406                       
     407<?php
     408/*                      function download(id){
     409                                document.getElementById('hidden').src = null;
     410                                document.getElementById("hidden").src = "<?php echo music_dir(); ?>mp3act_hidden.php?type=dl"+"&id="+id;
     411                        }
     412                       
     413                        function addmusic(form){
     414                                document.getElementById("current").innerHTML = form.musicpath.value;
     415                                return false;
     416                        }
     417               
     418                          function adminAddUser(form){
     419                                document.getElementById("breadcrumb").innerHTML = "";
     420               
     421              if(form!=""){
     422                if(form.firstname.value == '' || form.lastname.value == '' || form.username.value == '' || form.password.value == '' || form.password2.value == '' || form.email.value == ''){
     423                  setMsgText("Required Fields Are Empty");
     424                  return false;
     425                }
     426               
     427                if(form.password.value != form.password2.value){
     428                  setMsgText("Password Do Not Match");
     429                  document.getElementById("password").value = "";
     430                  document.getElementById("password2").value = "";
     431                  return false;
     432                }
     433                if(form.email.value.indexOf(".") <= 2 && form.email.value.indexOf("@") <= 0){
     434                  setMsgText("Email Address is Invalid");
     435                  document.getElementById("email").focus();
     436                  return false;
     437          }
     438                  x_adminAddUser(form.firstname.value,form.lastname.value,form.username.value,form.email.value,form.perms.value,form.password.value,adminAddUser_cb);
     439                  return false;
     440               
     441              }
     442              else{
     443                x_adminAddUser('','','','','','',updateBox_cb);
     444              }
     445                                       
     446                       
     447                                return false;
     448                        }
     449
     450                        function adminAddUser_cb(new_data){
     451                                clearbc=0;
     452                                if(new_data==1){
     453                                  updateBox('admin',0);
     454                                        setMsgText("User Successfully Added");
     455                                }else{
     456                                  setMsgText("Username is Already Taken. Try Another.");
     457                                  document.getElementById("username").value = "";
     458                                  document.getElementById("username").focus();
     459                                }
     460                        }
     461                       
     462                        function adminEditUsers(user,action,form){
     463                                document.getElementById("breadcrumb").innerHTML = "";
     464                                if(user!=0){
     465                                        if(action == 'del'){
     466                                                if(confirm('Are you Sure you want to DELETE THE USER?')){
     467                                                        x_adminEditUsers(user,action,adminEditUsers_cb);
     468                                                }
     469                                       
     470                                        }
     471                                        else if(action == 'mod'){
     472                                                x_adminEditUsers(user,'mod',form.active.value,form.perms.value,adminEditUsers_cb);
     473                                        }else{
     474                                                x_adminEditUsers(user,'user',updateBox_cb);
     475                                        }                       
     476                                }
     477                                else{
     478                                        x_adminEditUsers(updateBox_cb);
     479                                }
     480                                return false;
     481                        }
     482                       
     483                        function adminEditUsers_cb(new_data){
     484                                clearbc=0;
     485                                x_adminEditUsers(updateBox_cb);
     486                                if(new_data==1){
     487                                        setMsgText("User Successfully Deleted");
     488                                               
     489                                }
     490                                if(new_data==2){
     491                                        setMsgText("User Successfully Updated");
     492                                }
     493                        }
     494*/?>                   
     495                        function setMsgText(text){
     496                                        document.getElementById("breadcrumb").innerHTML = "<span class='error'>"+text+"</span>";
     497                                        Fat.fade_element('breadcrumb',null,2000,'#F5C2C2','#ffffff');
     498                        }
     499<?/*                   
     500                        function editSettings_cb(new_data){
     501                                if(new_data == 1){
     502                                        clearbc = 0;
     503                                        updateBox('admin',0);
     504                                        setMsgText("New Settings Saved");
     505                                }
     506                        }
     507                       
     508                        function editSettings(form){
     509                                if(form != 0){
     510                                        x_editSettings(1,form.invite.value,form.downloads.value,form.amazonid.value,form.upload_path.value,form.sample_mode.value,form.mp3bin.value,form.lamebin.value,form.phpbin.value,editSettings_cb);
     511                                }
     512                                else{
     513                                        x_editSettings(0,'','','','','','','','',updateBox_cb);
     514                                }
     515                                return false;
     516                        }
     517                       
     518                        function editUser_cb(new_data){
     519                                if(new_data == 1){
     520                                        clearbc = 0;
     521                                        updateBox('prefs',0);
     522                                       
     523                                        setMsgText("New Settings Saved");
     524                                }
     525                               
     526                        }
     527                       
     528                        function editUser(type,form){
     529                                if(form != 0){
     530                                        if(type == 'info'){
     531                                                x_editUser(type,form.firstname.value,form.lastname.value,form.email.value,0,'','','',editUser_cb);
     532                                        }
     533                                        else if(type == 'settings'){
     534                                                x_editUser(type,form.default_playmode.value,form.default_bitrate.value,form.default_stereo.value,form.theme_id.value,form.as_username.value,form.as_password.value,form.as_type.value,editUser_cb);
     535                                        }
     536                                        else if(type == 'pass'){
     537                                                if(form.new_password.value != form.new_password2.value){
     538                                                                setMsgText("New Passwords Do Not Match");
     539                                                }else{
     540                                                        document.getElementById("breadcrumb").innerHTML = "";
     541                                                        x_editUser(type,form.old_password.value,form.new_password.value,'',0,'','','',editUser_cb);
     542                                                }
     543                                        }
     544                                }else{
     545                                        x_editUser(type,'','','',0,'','','',updateBox_cb);
     546                                }
     547                                return false;
     548                        }*/ ?>
     549                       
     550                        function searchMusic(form){
     551                                if(form.searchbox.value == '' || form.searchbox.value == '[<? echo t("enter your search terms"); ?>]'){
     552                                        setMsgText("You Must Enter Something to Search For");
     553                                }
     554                                else{
     555                                        document.getElementById("breadcrumb").innerHTML = "";
     556                                        x_searchMusic(form.searchbox.value,form.search_options.value,updateBox_cb);
     557                                }
     558                                return false;
     559                        }
     560                       
     561<?php /*                        function clearDB_cb(new_data){
     562                                if(new_data == 1)
     563                                        setMsgText("Database Successfully Cleared");
     564                        }
     565                       
     566                        function clearDB(){
     567                        if(confirm("Are you sure you want to RESET THE MUSIC DATABASE? This will remove all data regarding music and music stastics.")){
     568                                x_resetDatabase(clearDB_cb);
     569                                }
     570                        }
     571                       
     572                        function sendInvite(form){
     573                                x_createInviteCode(form.email.value,sendInvite_cb);
     574                                return false;
     575                        }
     576                       
     577                        function sendInvite_cb(new_data){
     578                                if(new_data == 1){
     579                                  setMsgText("Invitation Successfully Sent");
     580                                  document.getElementById("email").value = "";
     581                                }
     582                        }
     583                       
     584                        function submitScrobbler(userid){
     585                          x_submitScrobbler(userid,empty_cb);
     586                          setMsgText("AudioScrobbler Submission Attempted");
     587                          return false;
     588                        }*/ ?>
     589 No newline at end of file
  • mythweb/modules/music/mp3act_functions.php

    Property changes on: mythweb/modules/music/mp3act_js.js.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php
     2/******************************************
     3*       mp3act functions
     4*       http://www.mp3act.net
     5*       Stripped, because not all this funcionality is needed in MythWEB
     6*
     7******************************************/
     8function pic_dir()
     9    {
     10    return 'http://'.$_SERVER['HTTP_HOST'].skin_url.'img/music/';
     11}
     12
     13function music_dir()
     14    {
     15    return 'http://'.$_SERVER['HTTP_HOST'].root."music/";
     16}
     17
     18function mp3act_connect() {
     19        return 1;
     20}
     21
     22function switchMode($mode){
     23        $_SESSION['sess_playmode'] = $mode;
     24        return $mode;
     25}
     26
     27function setCurrentSong($song_id,$pl_id,$rand=0){
     28        mp3act_connect();
     29        $query = "DELETE FROM music_currentsong";
     30        mysql_query($query);
     31        $query = "INSERT INTO music_currentsong VALUES ($song_id,$pl_id,$rand)";
     32        mysql_query($query);
     33}
     34
     35function getCurrentSong($curArtist, $curSong){
     36        $data = array();
     37
     38        mp3act_connect();
     39        $query = "SELECT music_currentsong.random,music_currentsong.pl_id,music_artists.artist_name, music_songs.name FROM music_artists,music_songs,music_currentsong WHERE music_currentsong.song_id=music_songs.song_id AND music_songs.artist_id=music_artists.artist_id";
     40        $result = mysql_query($query);
     41        if(mysql_num_rows($result) == 0){
     42                $data[] = "<strong>No Songs Playing</strong><span id='artist'></span><span id='song'></span>";
     43                $data[] = 0;
     44                $data[] = 0;
     45                return $data;
     46        }
     47        $row = mysql_fetch_array($result);
     48        if($row['artist_name'] == $curArtist && $row['name'] == $curSong){
     49                $data[] = 1;
     50                $data[] = $row['pl_id'];
     51                $data[] = 1;
     52                return $data;
     53        }
     54       
     55        $data[] = "<strong>Currently Playing".($row['random'] ? " (Random Mix)" : "")."</strong><br/><span id='artist'>$row[artist_name]</span><br/><span id='song'>$row[name]</span>\n";
     56        $data[] = $row['pl_id'];
     57        $data[] = 1;
     58        return $data;
     59}
     60
     61
     62function genreform(){
     63  mp3act_connect();
     64  $query = "SELECT * FROM music_genres ORDER BY genre";
     65  $result = mysql_query($query);
     66 
     67  $output = "<select id=\"genre\" name=\"genre\" onchange=\"updateBox('genre',this.options[selectedIndex].value); return false;\">
     68    <option value=\"\" selected>".t("Choose Genre..");
     69 
     70  while($genre = mysql_fetch_array($result)){
     71    $output .= "  <option value=\"$genre[genre]\">$genre[genre]\n";
     72  }
     73  $output .= "</select>";
     74 
     75  return $output;
     76}
     77
     78function letters(){
     79        $output = "<ul class=\"music\" id=\"letters\">";
     80        $letters = array('#','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
     81       
     82        foreach($letters as $letter){
     83                $output .= "<li><a class=music href=\"#\" onclick=\"updateBox('letter','$letter'); return false;\">".strtoupper($letter)."</a></li>\n";
     84        }
     85        $output .= "</ul>";
     86        return $output;
     87}
     88
     89function getDropDown($type, $id){
     90        $dropdown = "";
     91        return $dropdown;
     92}
     93
     94function buildBreadcrumb($page,$parent,$parentitem,$child,$childitem){
     95        mp3act_connect();
     96        $childoutput='';
     97        $parentoutput ='';
     98        if($page == 'browse' && $child != ''){
     99                $output = "<a class=music href=\"#\" onclick=\"updateBox('browse',0); return false;\">Browse</a> &#187; ";
     100        }
     101        switch($child){
     102                case 'album':
     103                        $query = "SELECT music_albums.album_name,music_artists.artist_name,music_artists.artist_id FROM music_albums,music_artists WHERE music_albums.artist_id=music_artists.artist_id AND music_albums.album_id=$childitem";
     104                        $result = mysql_query($query);
     105                        $row = mysql_fetch_array($result);
     106                        $albums = '';
     107                        $query = "SELECT album_name,album_id FROM music_albums WHERE artist_id=$row[artist_id] ORDER BY album_name";
     108                        $result = mysql_query($query);
     109                        while($row2 = mysql_fetch_array($result)){
     110                                $albums .= "<li><a class=music href=\"#\" onclick=\"updateBox('album',$row2[album_id]); return false;\" title=\"View Details of $row2[album_name]\">$row2[album_name]</a></li>";
     111                        }
     112                        $childoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('artist'," . $row['artist_id'] . "); return false;\">" . $row['artist_name'] . "</a><ul class=\"music\">$albums</ul></span> &#187; " . htmlentities($row['album_name']);
     113                break;
     114                case 'artist':
     115                        $query = "SELECT artist_name FROM music_artists WHERE artist_id=$childitem";
     116                        $result = mysql_query($query);
     117                        $row = mysql_fetch_array($result);
     118                        $albums = '';
     119                        echo "aa".$childitem."bb";
     120                        $query = "SELECT music_albums.album_name, music_albums.album_id FROM music_songs INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id GROUP BY music_albums.album_name, music_albums.album_id, music_songs.artist_id HAVING (((music_songs.artist_id)=$childitem));";
     121                        $result = mysql_query($query);
     122                        while($row2 = mysql_fetch_array($result)){
     123                                $albums .= "<li><a class=music href=\"#\" onclick=\"updateBox('album',$row2[album_id]); return false;\" title=\"View Details of $row2[album_name]\">$row2[album_name]</a></li>";
     124                        }
     125                        $childoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('artist',$childitem); return false;\">$row[artist_name]</a><ul class=\"music\">$albums</ul></span>";
     126                break;
     127                case 'letter':
     128                        $childoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('letter','$childitem'); return false;\">".strtoupper($childitem)."</a>".letters()."</span>";
     129                break;
     130                case 'genre':
     131                        $childoutput .=  $childitem;
     132                break;
     133                case 'all':
     134                        $childoutput .=  $childitem;
     135                break;
     136       
     137        }
     138        switch($parent){
     139       
     140                case 'letter':
     141                        $parentoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('letter','$parentitem'); return false;\">".strtoupper($parentitem)."</a>".letters()."</span> &#187; ";
     142                break;
     143                case 'genre':
     144                        $query = "SELECT album_name FROM music_albums WHERE album_id=$childitem";
     145                        $result = mysql_query($query);
     146                        $row = mysql_fetch_array($result);
     147                        $parentoutput .= "<a class=music href=\"#\" onclick=\"updateBox('genre','$parentitem'); return false;\">$parentitem</a> &#187; ";
     148                break;
     149                case 'all':
     150                        $parentoutput .=  "<a class=music href=\"#\" onclick=\"updateBox('all','$parentitem'); return false;\">$parentitem</a> &#187; ";
     151                break;
     152       
     153        }
     154        if (isset($output)) {
     155          return $output.$parentoutput.$childoutput;
     156        } else {
     157          return '';
     158        }       
     159}
     160
     161function musicLookup($type,$itemid){
     162        mp3act_connect();
     163        switch($type){
     164        case 'browse':
     165    $output = "<div class=\"head\">";
     166                        $output .= "<h2 class=music>".t("Browse the Music Database")."</h2></div>";
     167                        $output .= "<p>";
     168                        $output .= "<strong>".t("By Artist Beginning With")."</strong><br/>".letters()."<br/></p>\n";
     169                        $output .= "<p><strong>".t("By Genre")."</strong><br/>\n";
     170                        $output .= genreForm()."<br/><br/>\n";
     171                        $output .= "<input type='button' value='".t("Browse All Albums")."' onclick=\"updateBox('all','All'); return false;\" class='btn2' />\n";
     172        $output .= "</p>\n";
     173
     174        break;
     175        case 'search':
     176    $output = "<div class=\"head\">";
     177                        $output .= "<h2 class=music>".t("Search the Music Database")."</h2></div>";
     178                        $output .= "<form onsubmit='return searchMusic(this)' method='get' action=''>\n";
     179                        $output .= "<p>
     180                                <strong>".t("Keywords")."</strong><br/>
     181                                <input type='text' onfocus='this.select()' name='searchbox' size='35' id='searchbox' value='[".t("enter your search terms")."]' />
     182                <br/><br/>
     183                <strong>".t("Narrow Your Search")."</strong>
     184                <br/>
     185                <select name='search_options' size='1'>
     186                        <option value='all'>".t("All Fields")."</option>
     187                        <option value='artists'>".t("Artists")."</option>
     188                        <option value='albums'>".t("Albums")."</option>
     189                        <option value='songs'>".t("Songs")."</option>
     190                </select><br/><br/>
     191                <input type='submit' value='".t("submit search")."' class='btn' /></form>";
     192                                $output .= "</p>\n";
     193
     194        break;
     195        case 'letter':
     196        if($itemid == "#"){
     197      $query = "SELECT * FROM music_artists
     198                WHERE artist_name
     199                LIKE '0%'
     200                OR artist_name LIKE '1%'
     201                OR artist_name LIKE '2%'
     202                OR artist_name LIKE '3%'
     203                OR artist_name LIKE '4%'
     204                OR artist_name LIKE '5%'
     205                OR artist_name LIKE '6%'
     206                OR artist_name LIKE '7%'
     207                OR artist_name LIKE '8%'
     208                OR artist_name LIKE '9%'
     209                ORDER BY artist_name";
     210    }else{
     211        $query = "SELECT * FROM music_artists
     212                WHERE artist_name LIKE '$itemid%'
     213                ORDER BY artist_name";
     214    }
     215    $result = mysql_query($query);
     216    $output = "<div class=\"head\">";
     217                        $output .= "<h2 class=music>".t("Artists Beginning with")." '".strtoupper($itemid)."'</h2></div>";
     218                        $output .= "<p>
     219                                <strong>".t("Artist Listing")."</strong></p>
     220                                <ul class=\"music\">";
     221                                        $count =1;
     222    while($row = mysql_fetch_array($result)){
     223    ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     224                        $output .= "<li $alt><a class=music href=\"#\" onclick=\"updateBox('artist',$row[artist_id]); return false;\" title=\"View Albums for $row[artist_name]\">$row[artist_name]</a></li>\n";
     225                        $count++;
     226                }
     227                                $output .= "</ul>\n";
     228
     229        break;
     230       
     231        case 'all':
     232                        $output = "<div class=\"head\">";
     233                        $output .= "<h2 class=music>".t("All Albums")."</h2></div> ";
     234                        $output .= "<p>
     235                                <strong>".t("Album Listing")."</strong></p>
     236                                <ul class=\"music\">";
     237                $start = $itemid;
     238                $query = "SELECT music_artists.artist_name,music_albums.* FROM music_albums,music_artists WHERE music_albums.artist_id=music_artists.artist_id ORDER BY artist_name,album_name LIMIT $start,30";
     239                $result = mysql_query($query);
     240                        $count = 1;
     241                while($row = mysql_fetch_array($result)){
     242                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     243                        $output .= "<li $alt><a class=music href=\"#\" onclick=\"pladd('album'," . $row['album_id'] . "); return false;\" title=\"Add Album to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('album'," . $row['album_id'] . "); return false;\" title=\"Play this Album Now\"><img src=\"".pic_dir()."play.gif\" /></a> <a class=music href=\"#\" onclick=\"updateBox('album'," . $row['album_id'] . "); return false;\" title=\"View Details of " . $row['album_name'] . "\">" . $row['artist_name'] . " - " . $row['album_name'] . " " . (($row['album_year'] != 0) ? ("<em>(" . $row['album_year'] . ")</em>") : ("")) . "</a></li>\n";
     244                       
     245                        $count++;
     246                }
     247                $output .= "</ul>\n";
     248        break;
     249       
     250        case 'album':
     251                $query="SELECT music_albums.*, Count(music_songs.song_id) AS tracks, SEC_TO_TIME(Sum(music_songs.length)) AS time FROM (music_songs INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id GROUP BY music_albums.album_id, music_albums.album_name, music_albums.album_art HAVING (((music_albums.album_id)=$itemid));";         
     252                $result = mysql_query($query);
     253                $row = mysql_fetch_array($result);
     254                       
     255                        $album_art='';
     256                       
     257                       
     258                        if($row['album_art'] == ""){
     259                                $row['album_art'] = art_insert($row['album_id'],$row['artist_name'],$row['album_name']);
     260                                if($row['album_art'] != ''){
     261                                        $album_art = "<img onmouseover=\"showAlbumArt('block'); return false;\" onmouseout=\"showAlbumArt('none'); return false;\" src=\"art/$row[album_art]\" />\n";
     262                                }
     263                        }elseif($row['album_art'] != "fail"){
     264                                $album_art = "<img onmouseover=\"showAlbumArt('block'); return false;\" onmouseout=\"showAlbumArt('none'); return false;\" src=\"art/$row[album_art]\" />\n";
     265                        }
     266                        $output = "<div class=\"head\">";
     267                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"play('album',".$row['album_id']."); return false;\" title=\"Play this Album Now\">play</a> <a class=music href=\"#\" onclick=\"pladd('album',$row[album_id]); return false;\" title=\"Add Album to Current Playlist\">add</a> "."<a class=music href=\"#\" onclick=\"newWindow('download',$row[album_id]); return false;\" title=\"Download this Album Now\">download</a>"."</div>";
     268                        $output .= "<h2 class=music>".$row['album_name']."</h2></div>";
     269                        $output .= "<p>$album_art\n";
     270                        $output .= "    <strong>Tracks:</strong> $row[tracks]<br/>\n";
     271                        $output .= (($row['album_year'] != 0) ? ("<strong>Year:</strong> " . $row['album_year'] . "<br/>\n") : (""));
     272                        $output .= "    <strong>Play Time:</strong> $row[time]\n";
     273                        $output .= "    <br/><br/>\n";
     274                        $output .= "    <strong>Album Tracks</strong></p>\n";
     275                        $output .= "<ul class=\"music\">\n";
     276                        $output .= "<img id='bigart' src=\"art/$row[album_art]\" />\n";
     277                $query = "SELECT music_songs.*,SEC_TO_TIME(music_songs.length) as length , music_artists.artist_name FROM music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id WHERE album_id=$itemid ORDER BY track";
     278                $result = mysql_query($query);
     279                $count=1;
     280                while($row = mysql_fetch_array($result)){
     281                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     282                        $output .= "<li $alt ondblclick=\"pladd('song',$row[song_id]); return false;\" ><a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> $row[track]. $row[artist_name] - $row[name]<p>$row[numplays] Plays<br/><em>$row[length]</em></p></li>\n";
     283                        $count++;
     284                }
     285               
     286                $output .= "</ul>\n";
     287        break;
     288        case 'genre':
     289               
     290                        $output = "<div class=\"head\">";
     291                        $output .= "<h2 class=\"music\">".t("Songs for Genre")." '$itemid'</h2></div>";
     292                        $output .= "<p>
     293                                <strong>".t("Songs")."</strong></p>
     294                                <ul class=\"music\">";
     295
     296                $query = "SELECT music_songs.*, music_artists.artist_name, music_genres.genre FROM (music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id WHERE genre='$itemid';";
     297
     298                $result = mysql_query($query);
     299                $count=1;
     300                while($row = mysql_fetch_array($result)){
     301                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     302                        $output .= "<li $alt ondblclick=\"pladd('song',$row[song_id]); return false;\" ><a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> $row[artist_name] - $row[name]<p>$row[numplays] Plays<br/><em>$row[length]</em></p></li>\n";
     303                        $count++;
     304                }
     305                $output .= "</ul>\n";
     306        break;
     307        case 'artist':
     308                $query = "SELECT artist_id,artist_name FROM music_artists WHERE artist_id=$itemid";
     309                $result = mysql_query($query);
     310                $row = mysql_fetch_array($result);
     311                       
     312               
     313                        $artist = $row[artist_name];
     314                       
     315                        $output = "<div class=\"head\">";
     316                        $output .= "<h2 class=\"music\">$row[artist_name] </h2></div>";
     317                        $output .= "<p>\n";
     318                        $output .= "<strong>".t("Songs")."</strong></p>\n";
     319                        $output .= "<ul class=\"music\">\n";
     320
     321                $query = "SELECT music_songs.*,SEC_TO_TIME(music_songs.length) as length , music_artists.artist_name FROM music_songs INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id WHERE music_songs.artist_id=$itemid;";
     322                $result = mysql_query($query);
     323                $count=1;
     324                while($row = mysql_fetch_array($result)){
     325                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     326                        $output .= "<li $alt ondblclick=\"pladd('song',$row[song_id]); return false;\" ><a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> $row[name]<p>$row[numplays] Plays<br/><em>$row[length]</em></p></li>\n";
     327                        $count++;
     328                }
     329                $output .= "</ul><br />\n";
     330
     331                        $output .= "<p>\n";
     332                        $output .= "<strong>".t("Album's with songs from")." <i>$artist</i></strong></p>\n";
     333                        $output .= "<ul class=\"music\">\n";
     334
     335                $query = "SELECT music_albums.album_name, music_albums.album_id FROM music_songs INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id GROUP BY music_albums.album_name, music_albums.album_id, music_songs.artist_id HAVING (((music_songs.artist_id)=$itemid));";
     336                       
     337                //$query = "SELECT music_albums.* FROM music_albums WHERE music_albums.artist_id=$itemid ORDER BY music_albums.album_name";
     338                $result = mysql_query($query);
     339                $count=1;
     340                while($row = mysql_fetch_array($result)){
     341                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     342                        $output .= "<li $alt><a class=music href=\"#\" onclick=\"pladd('album'," . $row['album_id'] . "); return false;\" title=\"Add Album to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('album'," . $row['album_id'] . "); return false;\" title=\"Play this Album Now\"><img src=\"".pic_dir()."play.gif\" /></a> <a class=music href=\"#\" onclick=\"updateBox('album'," . $row['album_id'] . "); return false;\" title=\"View Details of " . $row['album_name'] . "\">" . $row['album_name'] . " " . (($row['album_year'] != 0) ? ("<em>(" . $row['album_year'] . ")</em>") : (""))."</a></li>\n";
     343                        $count++;
     344                }
     345                $output .= "</ul>\n";
     346        break;
     347        case 'random':
     348                        $output = "<div class=\"head\">";
     349                        $output .= "<h2 class=\"music\">".t("Random Mix Maker")."</h2></div>";
     350                        $output .= "<form onsubmit='return randAdd(this)' method='get' action=''>\n<p>";
     351                                $output .= "<strong>".t("Number of Songs")."</strong><br/>\n
     352                                <select name='random_count'>
     353                                <option value=10>10 </option>
     354                                <option value=20>20 </option>
     355                                <option value=30>30 </option>
     356                                <option value=40>40 </option>
     357                                <option value=50>50 </option>
     358         </select><br/>\n";
     359                        $output .= "<strong>".t("Random Type")."</strong><br/>\n
     360                                <select name='random_type' onchange=\"getRandItems(this.options[selectedIndex].value); return false;\" >
     361                                <option value='' >Choose Type...</option>
     362                                <option value='artists' >".t("Artists")."</option>
     363                                <option value='genre' >".t("Genre")."</option>
     364                                <option value='albums' >".t("Albums")."</option>
     365                                <option value='all' >".t("Everything")."</option>
     366         </select><br/>\n";
     367                        $output .= "<strong>".t("Random Items")."</strong>\n<span id='rand_items'></span>
     368                        <br/><br/>";
     369                        $output .= "<input type='submit' value='".t("add mix")."' class='btn' />";
     370                        $output .= "</form></p>\n";
     371        break;
     372        case 'playlists':
     373                        $query = "SELECT *,SEC_TO_TIME(time) AS time2 FROM music_saved_playlists";
     374                        $result = mysql_query($query);
     375                       
     376                        $output = "<div class=\"head\">";
     377                        $output .= "<h2 class=\"music\">".t("Saved Playlists")."</h2></div><br />";
     378                        $output .= "<ul class=\"music\">\n";
     379                        if(mysql_num_rows($result) == 0)
     380                                $output .= "No Public Playlists";
     381                        while ($row = mysql_fetch_array($result)){
     382                                if ($row["hostname"] == "")
     383                                    $output .= "<li><a class=music href=\"#\" onclick=\"pladd('playlist',$row[playlist_id]); return false;\" title='Load this Saved Playlist'><img src=\"".pic_dir()."add.gif\" /></a> "."<a class=music href=\"#\" onclick=\"deletePlaylist($row[playlist_id]); return false;\" title='DELETE this Saved Playlist'><img src=\"".pic_dir()."rem.gif\" /></a>"." <a onclick=\"updateBox('saved_pl',$row[playlist_id]); \" title='Click to View Playlist' href='#'>$row[playlist_name] - $row[songcount] ".t("Songs")." ($row[time2])</a></li>";
     384                                else
     385                                    $output .= "<li><a class=music href=\"#\" onclick=\"pladd('playlist',$row[playlist_id]); return false;\" title='Load this Saved Playlist'><img src=\"".pic_dir()."add.gif\" /></a> "."<a class=music href=\"#\" onclick=\"deletePlaylist($row[playlist_id]); return false;\" title='DELETE this Saved Playlist'><img src=\"".pic_dir()."rem.gif\" /></a>"." <a onclick=\"updateBox('saved_pl',$row[playlist_id]); \" title='Click to View Playlist' href='#'>$row[playlist_name] @ $row[hostname] - $row[songcount] ".t("Songs")." ($row[time2])</a></li>";
     386                        }
     387                        $output .= "</ul>\n";
     388        break;
     389        case 'saved_pl':
     390                        $query = "SELECT *,SEC_TO_TIME(time) AS time2 FROM music_saved_playlists WHERE playlist_id=$itemid";
     391                        $result = mysql_query($query);
     392                        $row = mysql_fetch_array($result);
     393                        $output = "<div class=\"head\">";
     394                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"pladd('playlist',$row[playlist_id]); return false;\" title=\"Load Playlist\">load playlist</a></div>";
     395
     396                        $output .= "<h2 class=\"music\">".t("View Saved Playlist")."</h2></div>";
     397                        $output .= "<p><strong>".t("Playlist Info")."</strong><br/>$row[songcount] ".t("Songs")."<br/>$row[time2]</p>\n";
     398                        $output .= "<p><strong>".t("Playlist Songs")."</strong></p>\n";
     399                        $output .= "<ul class=\"music\">\n";
     400                        $songs = explode(",",$row['playlist_songs']);
     401                       
     402                        if (strlen($row['playlist_songs']) != 0)
     403                        {
     404                $count = 0;
     405                foreach($songs as $song){
     406                        $query = "SELECT music_songs.*,SEC_TO_TIME(music_songs.length) AS length,music_artists.artist_name FROM music_artists,music_songs WHERE music_songs.song_id=$song AND music_artists.artist_id=music_songs.artist_id";
     407                        $result = mysql_query($query);
     408                        $row = mysql_fetch_array($result);
     409        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     410                        $output .= "<li $alt ondblclick=\"pladd('song',$row[song_id]); return false;\" ><a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> $row[artist_name] - $row[name]<p>$row[numplays] Plays<br/><em>$row[length]</em></p></li>\n";
     411                        $count++;
     412                }
     413                        }
     414                        else
     415                        $output = " <b>".t("There are no songs in this Playlist!")."</b>";
     416                        $output .= "</ul>\n";
     417                       
     418        break;
     419        case 'stats':
     420                $query = "SELECT * FROM music_stats";
     421                        $result = mysql_query($query);
     422                        $row = mysql_fetch_array($result);
     423                        $query = "SELECT COUNT(play_id) AS songs FROM music_playhistory";
     424                        $result = mysql_query($query);
     425                        $row3 = mysql_fetch_array($result);
     426                       
     427                        $output = "<div class=\"head\">";
     428                        $output .= "<h2 class=\"music\">".t("Server Statistics")."</h2></div>";
     429                        $output .= "<p>\n";
     430                        $output .= "<a class=music href='#' onclick=\"updateBox('recentadd',0); return false;\" >".t("Recently Added Albums")."</a><br/>";
     431                        $output .= "<a class=music href='#' onclick=\"updateBox('recentplay',0); return false;\" >".t("Recently Played Songs")."</a><br/>";
     432                        $output .= "<a class=music href='#' onclick=\"updateBox('topplay',0); return false;\" >".t("Top Played Songs")."</a><br/>";
     433
     434
     435                        $output .= "</p>\n";
     436                                $output .= "<h3>".t("Local Server Statistics")."</h3>\n";
     437                          $result = mysql_query("SELECT song_id from music_songs;");   
     438                        $output .= "<p><strong>".t("Songs").":</strong> ". mysql_num_rows($result)."<br/>\n";
     439                          $result = mysql_query("SELECT album_id from music_albums;"); 
     440                        $output .= "<strong>".t("Albums").":</strong> ". mysql_num_rows($result)."<br/>\n";
     441                          $result = mysql_query("SELECT artist_id from music_artists;");       
     442                        $output .= "<strong>".t("Artists").":</strong> ". mysql_num_rows($result)."<br/>\n";
     443                          $result = mysql_query("SELECT genre_id from music_genres;"); 
     444                        $output .= "<strong>".t("Genres").":</strong> ". mysql_num_rows($result)."<br/><br/>\n";
     445                        $output .= "<strong>".t("Songs Played").":</strong> $row3[songs]<br/></p>\n";
     446
     447        break;
     448        case 'recentadd':                       
     449                        $query = "SELECT music_albums.album_name,music_albums.album_id,
     450                        music_artists.artist_name,
     451                        DATE_FORMAT(music_songs.date_entered,'%m.%d.%Y') as pubdate   
     452                        FROM music_songs,music_albums,music_artists
     453                        WHERE music_songs.album_id=music_albums.album_id
     454                        AND music_artists.artist_id=music_songs.artist_id
     455                        GROUP BY music_songs.album_id ORDER BY music_songs.date_entered DESC LIMIT 40";
     456                        $result = mysql_query($query);
     457                       
     458                        $output = "<div class=\"head\">";
     459                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"Return to Statistics Page\">back</a></div>";
     460                        $output .= "<h2 class=\"music\">Recently Added Albums</h2></div><ul class=\"music\">";
     461                        $count=1;
     462                while($row = mysql_fetch_array($result)){
     463                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     464                        $output .= "<li $alt><small>$row[pubdate]</small> <a class=music href=\"#\" onclick=\"pladd('album',$row[album_id]); return false;\" title=\"Add Album to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('album',$row[album_id]); return false;\" title=\"Play this Album Now\"><img src=\"".pic_dir()."play.gif\" /></a> <a class=music href=\"#\" onclick=\"updateBox('album',$row[album_id]); return false;\" title=\"View Details of $row[album_name]\"><em>$row[artist_name]</em> - $row[album_name]</a></li>";             
     465                        $count++;
     466                }
     467                $output .= "</ul>";
     468                       
     469
     470        break;
     471        case 'topplay':                 
     472                        $query = "SELECT music_albums.album_name, music_songs.numplays, music_songs.name,
     473                        music_artists.artist_name,music_songs.song_id
     474                        FROM music_songs,music_albums,music_artists
     475                        WHERE music_songs.album_id=music_albums.album_id
     476                        AND music_artists.artist_id=music_songs.artist_id
     477                        AND music_songs.numplays > 0
     478                        ORDER BY music_songs.numplays DESC LIMIT 40";
     479                        $result = mysql_query($query);
     480                       
     481                        $output = "<div class=\"head\">";
     482                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"Return to Statistics Page\">back</a></div>";
     483                        $output .= "<h2 class=\"music\">Top Played Songs</h2></div><ul class=\"music\">";
     484                        $count=1;
     485                while($row = mysql_fetch_array($result)){
     486                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     487                        $output .= "<li $alt><small>$row[numplays] Plays</small> <a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> <em>$row[artist_name]</em> - $row[name]</li>";         
     488                        $count++;
     489                }
     490                $output .= "</ul>";
     491        break;
     492        case 'recentplay':                     
     493                        $query = "SELECT music_songs.name, music_songs.song_id,
     494                        music_artists.artist_name,
     495                        DATE_FORMAT(music_playhistory.date_played,'%m.%d.%Y') as playdate
     496                        FROM music_songs,music_artists,music_playhistory
     497                        WHERE music_songs.song_id=music_playhistory.song_id
     498                        AND music_artists.artist_id=music_songs.artist_id
     499                        ORDER BY music_playhistory.play_id DESC LIMIT 40";
     500                        $result = mysql_query($query);
     501                       
     502                        $output = "<div class=\"head\">";
     503                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"Return to Statistics Page\">back</a></div>";
     504                        $output .= "<h2 class=\"music\">Recently Played Songs</h2></div><ul class=\"music\">";
     505                        $count=1;
     506                while($row = mysql_fetch_array($result)){
     507                        ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     508                        $output .= "<li $alt><small>$row[playdate]</small> <a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> <em>$row[artist_name]</em> - $row[name]</li>";               
     509                        $count++;
     510                }
     511                $output .= "</ul>";
     512                       
     513
     514        break;
     515        }
     516       
     517        return $output;
     518               
     519}
     520
     521function getRandItems($type){
     522        $options = '';
     523        switch($type){
     524                case 'artists':
     525                        $query = "SELECT * FROM music_artists ORDER BY artist_name";
     526                        $result = mysql_query($query);
     527                        while($row = mysql_fetch_array($result)){
     528                                $options .= "<option value=$row[artist_id]>$row[artist_name]</option>\n";
     529                        }
     530                break;
     531                case 'genre':
     532                        $query = "SELECT genre_id,genre FROM music_genres ORDER BY genre";
     533                        $result = mysql_query($query);
     534                        while($row = mysql_fetch_array($result)){
     535                                $options .= "<option value=$row[genre_id]>$row[genre]</option>\n";
     536                        }
     537                break;
     538                case 'albums':
     539                        $query = "SELECT music_albums.album_id,music_albums.album_name FROM music_albums ORDER BY album_name";
     540                        $result = mysql_query($query);
     541                        while($row = mysql_fetch_array($result)){
     542                                $options .= "<option value=$row[album_id]>$row[album_name]</option>\n";
     543                        }
     544                break;
     545                case 'all':
     546                        return "<br/>All Songs";
     547                break;
     548        }
     549       
     550        return "<select name='random_items' multiple size='12' style='width: 90%;'>$options</select>";
     551}
     552
     553function searchMusic($terms,$option){
     554        $query="SELECT music_songs.song_id, music_albums.album_name,music_songs.track,music_artists.artist_name,music_songs.name,SEC_TO_TIME(music_songs.length) as length
     555                                                FROM music_songs,music_artists,music_albums WHERE music_songs.artist_id=music_artists.artist_id AND music_albums.album_id=music_songs.album_id AND ";
     556        if($option == 'all')
     557                $query .= "(music_songs.name LIKE '%$terms%' OR music_artists.artist_name LIKE '%$terms%' OR music_albums.album_name LIKE '%$terms%')";
     558        elseif($option == 'artists')
     559                $query .= "(music_artists.artist_name LIKE '%$terms%')";
     560        elseif($option == 'albums')
     561                $query .= "(music_albums.album_name LIKE '%$terms%')";
     562        elseif($option == 'songs')
     563                $query .= "(music_songs.name LIKE '%$terms%')";
     564
     565        $query .= " ORDER BY music_artists.artist_name,music_albums.album_name,music_songs.track";
     566       
     567        $result = mysql_query($query);
     568        $count = mysql_num_rows($result);
     569
     570                        $output = "<div class=\"head\">";
     571                        $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('search'); return false;\" title=\"Begin a New Search\">new search</a></div>";
     572                        $output .= "<h2 class=\"music\">Found $count Results for '$terms'</h2></div>"; 
     573                        $output .= "<ul class=\"music\">\n";
     574                if($count>0){
     575                        $count=1;
     576                        while($row = mysql_fetch_array($result)){
     577                                ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = '');
     578                                $output .= "<li $alt><a class=music href=\"#\" onclick=\"pladd('song',$row[song_id]); return false;\" title=\"Add Song to Current Playlist\"><img src=\"".pic_dir()."add.gif\" /></a> <a class=music href=\"#\" onclick=\"play('song',$row[song_id]); return false;\" title=\"Play this Song Now\"><img src=\"".pic_dir()."play.gif\" /></a> $row[artist_name] - $row[name]<p>Album: $row[album_name]<br/>Track: $row[track]<br/><em>$row[length]</em></p></li>\n";
     579                                $count++;
     580                        }
     581                }
     582                $output .= "</ul>\n";
     583                return $output;
     584}
     585
     586function viewPlaylist(){
     587        $output = '';
     588        $query = "SELECT music_playlist.*, music_artists.artist_name, music_songs.name,music_albums.album_name,music_songs.track,SEC_TO_TIME(music_songs.length) AS time FROM music_playlist,music_artists,music_songs,music_albums WHERE music_playlist.song_id=music_songs.song_id AND music_artists.artist_id=music_songs.artist_id AND music_songs.album_id=music_albums.album_id ORDER BY music_playlist.pl_id";
     589       
     590        $result=mysql_query($query);
     591       
     592        while($row = mysql_fetch_array($result)){
     593                        $output .= "<li id=\"pl$row[pl_id]\" onmouseover=\"setBgcolor('pl".$row['pl_id']."','#FCF7A5'); return false;\" onmouseout=\"setBgcolor('pl".$row['pl_id']."','#f3f3f3'); return false;\"><a class=music href=\"#\" onclick=\"movePLItem('up',this.parentNode); return false;\" title=\"Move Song Up in Playlist\"><img src=\"".pic_dir()."up.gif\" /></a> <a class=music href=\"#\" onclick=\"movePLItem('down',this.parentNode); return false;\" title=\"Move Song Down in Playlist\"><img src=\"".pic_dir()."down.gif\" /></a> <a class=music href=\"#\" onclick=\"plrem(this.parentNode.id); return false;\" title=\"Remove Song from Playlist\"><img src=\"".pic_dir()."rem.gif\" /></a> $row[artist_name] - $row[name]<p>Album: $row[album_name]<br/>Track: $row[track]<br/>$row[time]</p></li>";
     594                }
     595        if (isset($output)) {
     596                return $output;
     597        } else {
     598          return '';
     599        }
     600}
     601function savePlaylist($pl_name, $newpl){
     602
     603        $songs = array();
     604        $time=0;
     605        $query = "SELECT music_playlist.song_id,music_songs.length FROM music_playlist,music_songs WHERE music_songs.song_id=music_playlist.song_id ORDER BY music_playlist.pl_id";
     606        $result = mysql_query($query);
     607        while($row = mysql_fetch_array($result)){
     608                $songs[] = $row['song_id'];
     609                $time += $row['length'];
     610        }
     611        $songslist = implode(",",$songs);
     612        if ($newpl == 0)
     613            {
     614            $query = "INSERT INTO music_saved_playlists (playlist_name, playlist_songs, date_created, time, songcount) VALUES (\"$pl_name\",\"$songslist\",NOW(),$time,".count($songs).")";
     615            mysql_query($query);
     616            return "<h2 class=\"music\">Playlist Saved as '".$pl_name."'</h2>";
     617            }
     618        else
     619            {
     620            $arr = explode("@",$pl_name);
     621                    $query = "UPDATE music_saved_playlists SET playlist_songs = \"$songslist\", date_created = NOW(), time = $time, songcount = ".count($songs)." WHERE playlist_name = \"".$arr[0]."\" AND hostname = \"".$arr[1]."\"";                                                                       
     622            mysql_query($query);
     623            return "<h2 class=\"music\">Playlist '".$pl_name."' has been updated</h2>";
     624            }
     625
     626}
     627
     628function clearPlaylist(){
     629        $query = "DELETE FROM music_playlist";
     630        mysql_query($query);
     631        return "Playlist is empty";
     632}
     633function deletePlaylist($id){
     634        mp3act_connect();
     635        $query = "DELETE FROM music_saved_playlists WHERE playlist_id=$id";
     636        mysql_query($query);
     637        return 1;
     638}
     639
     640function playlistInfo(){
     641        $query = "SELECT COUNT(music_playlist.pl_id) as count, SEC_TO_TIME(SUM(music_songs.length)) as time FROM music_playlist,music_songs WHERE music_playlist.song_id=music_songs.song_id";
     642        $result = mysql_query($query);
     643        $row = mysql_fetch_array($result);
     644        if($row['count'] == 0){
     645                return "Playlist is empty";
     646        }
     647        return "$row[count] Songs - $row[time]";
     648}
     649
     650function playlist_rem($itemid){
     651        $id = substr($itemid, 2);
     652        $query = "DELETE FROM music_playlist WHERE pl_id=$id";
     653        mysql_query($query);
     654        return $itemid;
     655}
     656
     657function playlist_move($item1,$item2){
     658        mp3act_connect();
     659        $item1 = substr($item1, 2);
     660        $item2 = substr($item2, 2);
     661        $row = array();
     662        $query = "SELECT pl_id,song_id FROM music_playlist WHERE pl_id=$item1 OR pl_id=$item2";
     663        $result = mysql_query($query);
     664        while($row[] = mysql_fetch_array($result)){
     665               
     666        }
     667        $query = "UPDATE music_playlist SET song_id=" . $row[0]['song_id'] . " WHERE pl_id=" . $row[1]['pl_id'];
     668                mysql_query($query);
     669                $query = "UPDATE music_playlist SET song_id=" . $row[1]['song_id'] . " WHERE pl_id=" . $row[0]['pl_id'];
     670
     671        mysql_query($query);
     672}
     673
     674function playlist_add($type,$itemid){
     675       
     676        switch($type){
     677        case 'song':
     678                $query = "INSERT INTO music_playlist (song_id) VALUES (N$itemid)";
     679                mysql_query($query);
     680                $id = mysql_insert_id();
     681                $query = "SELECT music_artists.artist_name, music_albums.album_name,SEC_TO_TIME(music_songs.length) AS length,music_songs.name,music_songs.track FROM music_artists,music_songs,music_albums WHERE music_songs.song_id=$itemid AND music_artists.artist_id=music_songs.artist_id AND music_albums.album_id=music_songs.album_id";
     682                $result = mysql_query($query);
     683                $row = mysql_fetch_array($result);
     684               
     685                $output[] = "<li id=\"pl$id\" onmouseover=\"setBgcolor('pl".$id."','#FCF7A5'); return false;\" onmouseout=\"setBgcolor('pl".$id."','#f3f3f3'); return false;\"><a class=music href=\"#\" onclick=\"movePLItem('up',this.parentNode); return false;\" title=\"Move Song Up in Playlist\"><img src=\"".pic_dir()."up.gif\" /></a> <a class=music href=\"#\" onclick=\"movePLItem('down',this.parentNode); return false;\" title=\"Move Song Down in Playlist\"><img src=\"".pic_dir()."down.gif\" /></a> <a class=music href=\"#\" onclick=\"plrem(this.parentNode.id); return false;\" title=\"Remove Song from Playlist\"><img src=\"".pic_dir()."rem.gif\" /></a> $row[artist_name] - $row[name]<p>Album: $row[album_name]<br/>Track: $row[track]<br/>$row[length]</p></li>";
     686                $output[] = 1;
     687                $output[] = 'pl'.$id;
     688                return $output;
     689        break;
     690        case 'album':
     691                $items='';
     692                $output = array();
     693                $query = "SELECT music_songs.song_id,music_songs.name,music_artists.artist_name,music_albums.album_name,SEC_TO_TIME(music_songs.length) AS length,music_songs.name,music_songs.track FROM music_songs,music_artists,music_albums WHERE music_songs.album_id=$itemid AND music_songs.artist_id=music_artists.artist_id AND music_albums.album_id=music_songs.album_id ORDER BY track";
     694                $result = mysql_query($query);
     695                while($row = mysql_fetch_array($result)){
     696                  $query = "INSERT INTO music_playlist (song_id) VALUES(" . $row['song_id'] . ")";
     697                        mysql_query($query);
     698                        $id = mysql_insert_id();
     699                        $output[] = 'pl'.$id;
     700                        $items .= "<li id=\"pl$id\" onmouseover=\"setBgcolor('pl".$id."','#FCF7A5'); return false;\" onmouseout=\"setBgcolor('pl".$id."','#f3f3f3'); return false;\"><a class=music href=\"#\" onclick=\"movePLItem('up',this.parentNode); return false;\" title=\"Move Song Up in Playlist\"><img src=\"".pic_dir()."up.gif\" /></a> <a class=music href=\"#\" onclick=\"movePLItem('down',this.parentNode); return false;\" title=\"Move Song Down in Playlist\"><img src=\"".pic_dir()."down.gif\" /></a> <a class=music href=\"#\" onclick=\"plrem(this.parentNode.id); return false;\" title=\"Remove Song from Playlist\"><img src=\"".pic_dir()."rem.gif\" /></a> $row[artist_name] - $row[name]<p>Album: $row[album_name]<br/>Track: $row[track]<br/>$row[length]</p></li>";
     701                }
     702                $text[] = $items;
     703                $num[] = count($output);
     704                $text = array_merge($text,$num);
     705                $output = array_merge($text,$output);
     706                return $output;
     707
     708        break;
     709        case 'playlist':
     710                clearPlaylist();
     711                $query = "SELECT * FROM music_saved_playlists WHERE playlist_id=$itemid LIMIT 1";
     712                $result = mysql_query($query);
     713                $row = mysql_fetch_array($result);
     714                $songs = explode(",",$row['playlist_songs']);
     715               
     716                foreach($songs as $song){
     717                        $query = "INSERT INTO music_playlist (song_id) VALUES($song)";
     718                        mysql_query($query);
     719                }
     720                $output[0] = 1;
     721                return $output;
     722
     723        break;
     724        }
     725}
     726
     727function randAdd($mode,$type,$num=0,$items){
     728                $tmp = '';
     729                $query = '';
     730                $items2 = explode(" ",trim($items));
     731                $items = '';
     732                $output = '';
     733               
     734                switch($type){
     735                        case 'artists':
     736                                foreach($items2 as $item){
     737                                        $items .= " artist_id=$item OR";
     738                                }                               
     739                                $items = preg_replace("/OR$/","",$items);
     740                                $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num";
     741                                $result = mysql_query($query);
     742                                while($row = @mysql_fetch_array($result)){
     743                                    $query = "INSERT into music_playlist (song_id) values($row[song_id])";
     744                                    mysql_query($query);
     745                                }
     746                                $output[0] = 1;
     747                        break;
     748                        case 'genre':
     749                                foreach($items2 as $item){
     750                                        $items .= " genre_id=$item OR";
     751                                }                               
     752                                $items = preg_replace("/OR$/","",$items);
     753                                $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num";
     754                                $result = mysql_query($query);
     755                                while($row = @mysql_fetch_array($result)){
     756                                    $query = "INSERT into music_playlist (song_id) values($row[song_id])";
     757                                    mysql_query($query);
     758                                }
     759                                $output[0] = 1;
     760                        break;
     761                        case 'albums':
     762                                foreach($items2 as $item){
     763                                        $items .= " album_id=$item OR";
     764                                }                               
     765                                $items = preg_replace("/OR$/","",$items);
     766                                $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num";
     767                                $result = mysql_query($query);
     768                                while($row = @mysql_fetch_array($result)){
     769                                    $query = "INSERT into music_playlist (song_id) values($row[song_id])";
     770                                    mysql_query($query);
     771                                }
     772                                $output[0] = 1;
     773                        break;
     774                        case 'all':
     775                                $query = "SELECT music_songs.song_id FROM music_songs ORDER BY rand()+0 LIMIT $num";
     776                                $result = mysql_query($query);
     777                                while($row = @mysql_fetch_array($result)){
     778                                    $query = "INSERT into music_playlist (song_id) values($row[song_id])";
     779                                    mysql_query($query);
     780                                }
     781                                $output[0] = 1;
     782                        break;
     783                }
     784                       
     785                return $output;   
     786}
     787
     788function play($mode,$type,$id){
     789                mp3act_connect();
     790                $tmp = '';
     791                $query = '';
     792               
     793       
     794        if($mode == 'streaming'){
     795       
     796                session_cache_limiter('nocache');
     797    header("Content-Type: audio/mpegurl;");
     798        header("Content-Disposition: inline; filename=\"playlist.m3u\"");
     799        header("Expires: 0");
     800        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
     801        header("Pragma: nocache");
     802                $tmp .= "#EXTM3U\n";
     803               
     804                if($type=='song'){             
     805                        $query = "SELECT music_songs.song_id,music_artists.artist_name,music_songs.name,music_songs.length FROM music_songs,music_artists WHERE music_songs.song_id=$id AND music_artists.artist_id=music_songs.artist_id";
     806                }
     807                elseif($type=='album'){
     808                        $query = "SELECT music_songs.song_id,music_artists.artist_name,music_songs.name,music_songs.length FROM music_songs,music_artists WHERE music_artists.artist_id=music_songs.artist_id AND music_songs.album_id=$id ORDER BY music_songs.track";
     809                }
     810                 elseif($type=='pl'){
     811                        $query = "SELECT music_songs.song_id,music_artists.artist_name,music_songs.name,music_songs.length FROM music_songs,music_artists,music_playlist WHERE music_artists.artist_id=music_songs.artist_id AND music_songs.song_id=music_playlist.song_id ORDER BY music_playlist.pl_id";                     
     812                }       
     813                       
     814                        $result = mysql_query($query);
     815                        while($row = mysql_fetch_array($result)){
     816                                $length = $row['length'];
     817                                if($GLOBALS[sample_mode] == 1){
     818                                        $length = floor($row['length']/4);
     819                                }
     820                                $tmp .= "#EXTINF:$length,$row[artist_name] - $row[name]\n";
     821                                $tmp .= music_dir()."mp3act_playstream.php?i=$row[song_id]&u=$_SESSION[sess_usermd5]&b=$_SESSION[sess_bitrate]&s=$_SESSION[sess_stereo]\n";
     822                        }                       
     823                        return $tmp;   
     824                        exit;
     825        }
     826}
     827
     828function download($album){
     829        mp3act_connect();
     830        $query = "SELECT music_songs.filename,
     831        music_artists.artist_name,
     832        music_albums.album_name
     833        FROM music_songs,music_artists,music_albums
     834        WHERE music_songs.album_id=$album
     835        AND music_songs.album_id=music_albums.album_id
     836        AND music_songs.artist_id=music_artists.artist_id LIMIT 1";
     837       
     838        $result = mysql_query($query);
     839        $row = mysql_fetch_array($result);
     840        $dir = dirname($row['filename']);
     841       
     842        $test = new zip_file("/tmp/album_$album.zip");
     843        $test->set_options(array('inmemory'=>0,'storepaths'=>0,'level'=>0,'method'=>0,'prepend'=>"$row[artist_name] - $row[album_name]"));
     844        $test->add_files($dir);
     845       
     846        $test->store_files($dir);
     847        $test->create_archive();
     848       
     849        header("Content-type:application/zip");
     850
     851        $header = "Content-disposition: attachment; filename=\"";
     852        $header .= "album_$album.zip";
     853        $header .= "\"";
     854        header($header);
     855        header("Content-length: " . filesize("/tmp/album_$album.zip"));
     856        header("Content-transfer-encoding: binary");
     857        header("Pragma: no-cache");
     858        header("Expires: 0");
     859        $chunksize = 1*(1024*1024); // how many bytes per chunk
     860  $buffer = '';
     861  $handle = fopen("/tmp/album_$album.zip", 'rb');
     862  if ($handle === false) {
     863   return false;
     864  }
     865  while (!feof($handle)) {
     866   $buffer = fread($handle, $chunksize);
     867   print $buffer;
     868  }
     869  fclose($handle);
     870  //readfile("/tmp/album_$album.zip");
     871        unlink("/tmp/album_$album.zip");
     872        //$test->download_file();
     873}
     874
     875function updateNumPlays($num,$r=0,$user='',$mode='jukebox'){
     876        mp3act_connect();
     877        $query = "UPDATE music_songs SET numplays=numplays+1";
     878        if($r==1){
     879         $query .= ",random=1";
     880        }
     881        $query .= " WHERE song_id=$num";
     882  mysql_query($query);
     883 
     884  if(!empty($user)){
     885        if($mode == 'streaming'){
     886                        $query = "SELECT user_id FROM mp3act_users WHERE md5=\"$user\"";       
     887                        $result = mysql_query($query);
     888                        $row = mysql_fetch_array($result);
     889                        $user = $row['user_id'];
     890                       
     891        }
     892        $query = "INSERT INTO music_playhistory VALUES (NULL,$user,$num,NOW())";
     893        mysql_query($query);
     894  }
     895}
     896
     897function streamPlay($id, $rate=0, $stereo="s",$user='',$ip=''){
     898  $query = "SELECT music_artists.artist_name,
     899  music_songs.name,
     900  music_songs.bitrate,
     901  music_songs.length as length,
     902  music_songs.filename as filename,
     903  music_songs.size as size
     904  FROM music_songs,music_artists
     905  WHERE music_songs.song_id=$id
     906  AND music_artists.artist_id=music_songs.artist_id";
     907 
     908  $result=mysql_query($query);
     909  $row = mysql_fetch_array($result);
     910        updateNumPlays($id,0,$user,'streaming');
     911        clearstatcache(); // flush buffer
     912 
     913        $file['name'] = basename($row['filename']);
     914        $mp3out = '';
     915        /*if(getSystemSetting("lamebin") != "" && $rate != 0){
     916                        $row['size'] = (($row['length'] + 1) * $rate * 1000)/8;
     917                        $mp3out = getSystemSetting("lamebin")." -b $rate -s $stereo --silent --nores --mp3input -h \"".stripslashes($row['filename'])."\" -";
     918        }else{*/
     919                $mp3out = stripslashes($row['filename']);
     920       
     921        //}
     922        $size=$row['size'];
     923        $mode = $GLOBALS[sample_mode];
     924        //$mode = getSystemSetting("sample_mode");
     925        if($mode == 1){
     926                $size = floor($row['size']/4);
     927        }
     928        header("Content-Type: audio/mpeg");
     929        header("Content-Length: $size");
     930  header("Content-Disposition: filename=$row[artist_name] - $row[name]");
     931       
     932        // Run the command, and read back the results at the bitrate size + 1K.
     933        $blocksize=($row['bitrate']*1024)+1024;
     934        $totaldata=0;
     935        if($rate!=0 && $mode==1){
     936                $temp = @popen($mp3out, "r");
     937                while (($data = @fread($temp, $blocksize )) && ($totaldata <= $size ) )
     938                        {echo $data; $totaldata+=$blocksize; }
     939                pclose($temp);
     940        }
     941        elseif($rate!=0 ){
     942                $temp = @popen($mp3out, "r");
     943                while ($data = @fread($temp, $blocksize) )
     944                        {echo $data; }
     945                pclose($temp);
     946        }
     947        elseif($mode==1 ){
     948                $temp = @fopen($mp3out, "r");
     949                while (!feof($temp)  && ($totaldata <= $size ) )
     950                        {$data = @fread($temp, $blocksize); echo $data; $totaldata+=$blocksize; }
     951                fclose($temp);
     952        }
     953        else{
     954                $temp = @fopen($mp3out, "r");
     955                while (!feof($temp) )
     956                        {$data = @fread($temp, $blocksize); echo $data; }
     957                fclose($temp);
     958        }
     959        //} // end IF for verify IP
     960        exit;
     961}
     962
     963function art_insert($album_id, $artist, $album){
     964                mp3act_connect();
     965                $query ='';
     966                $image = art_query($artist,$album);
     967                if($image != ""){
     968                        $query = "UPDATE music_albums SET album_art=\"$album_id.jpg\" WHERE album_id=$album_id";
     969                        mysql_query($query);
     970
     971                        $tmpimg = http_get($image);
     972                        $path = $GLOBALS['abs_path']."/art/";
     973                       
     974                        $file = "$album_id.jpg";
     975                        $filename = $path.$file;
     976                        touch($filename);
     977                       
     978                        // Let's make sure the art directory is writable first.
     979                        if (is_writable($filename)) {
     980
     981                                 if (!$handle = fopen($filename, 'a')) {
     982                                                         echo "Cannot open file ($filename)";
     983                                                         exit;
     984                                 }
     985                       
     986                                 // Write $somecontent to our opened file.
     987                                 if (fwrite($handle, $tmpimg) === FALSE) {
     988                                                 echo "Cannot write to file ($filename)";
     989                                                 exit;
     990                                 }
     991                                                               
     992                                 fclose($handle);
     993                       
     994                        } else {
     995                                 echo "The file $filename is not writable";
     996                        }
     997                       
     998                        return $file;
     999                }
     1000                else{
     1001                        $query = "UPDATE music_albums SET album_art=\"fail\" WHERE album_id=$album_id";
     1002                        mysql_query($query);
     1003                }
     1004
     1005}
     1006
     1007function art_query ($artist, $album) {
     1008/*  $amazon_api_id = getSystemSetting("amazonid");
     1009  if(!empty($amazon_api_id)){
     1010        $album = preg_replace( '!\(.+\)!', '', $album );
     1011                $theq = "$artist, $album";
     1012                $query = urlencode($theq);
     1013               
     1014                $file = "http://xml.amazon.com/onca/xml3?t=blah&dev-t=";
     1015                $file .= $amazon_api_id;
     1016                $file .= "&mode=music&type=lite&page=1&f=xml&KeywordSearch=";
     1017                $file .= $query;
     1018                $fp = fopen($file, "r");
     1019                $contentStart = fread($fp, 200000);
     1020
     1021                $content = ereg_replace("<?xml.*\">.*<ProductInfo.*\">","",$contentStart);
     1022
     1023                $items = explode("</Details>",$content);
     1024                $maxlinks2 = "1";
     1025
     1026                for ($i = 0; $i < $maxlinks2; $i++) {
     1027                                               
     1028                                //$artSmall = ereg_replace(".*<ImageUrlSmall>","",$items[$i]);
     1029                                //$artSmall = ereg_replace("</ImageUrlSmall>.*","",$artSmall);
     1030                                $artMedium = ereg_replace(".*<ImageUrlMedium>","",$items[$i]);
     1031                                $artMedium = ereg_replace("</ImageUrlMedium>.*","",$artMedium);
     1032                                //$artLarge = ereg_replace(".*<ImageUrlLarge>","",$items[$i]);
     1033                                //$artLarge = ereg_replace("</ImageUrlLarge>.*","",$artLarge);
     1034                               
     1035                                if (strstr($artMedium, "amazon.com") == true) {
     1036                               
     1037                                                //$small_size = getimagesize($artSmall);
     1038                                                                //if($small_size[0] > 2) { $small_okay = "yes"; } else { $small_okay = "no"; }
     1039                                         /* $medium_size = getimagesize($artMedium);
     1040                                                                if($medium_size[0] > 2) { $medium_okay = "yes"; } else { $medium_okay = "no"; }
     1041                                                $large_size = getimagesize($artLarge);
     1042                                                                if($large_size[0] > 2) { $large_okay = "yes"; } else { $large_okay = "no"; }
     1043                                                       
     1044                                                //return $artSmall; 
     1045                                                return $artMedium;
     1046                               
     1047                                } else {
     1048                                                return '';
     1049                                }
     1050                               
     1051                }
     1052  }
     1053  else{
     1054        return '';
     1055  }*/
     1056
     1057  }
     1058
     1059// Grab an image over the web and save it locally
     1060function http_get($url)
     1061{
     1062
     1063   $url_stuff = parse_url($url);
     1064   $port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
     1065
     1066   $fp = fsockopen($url_stuff['host'], $port);
     1067   $buffer = '';
     1068   $query  = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
     1069   $query .= 'Host: ' . $url_stuff['host'];
     1070   $query .= "\n\n";
     1071
     1072   fwrite($fp, $query);
     1073
     1074   while ($tmp = fread($fp, 1024))
     1075   {
     1076       $buffer .= $tmp;
     1077   }
     1078
     1079   preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
     1080   return substr($buffer, - $parts[1]);
     1081
     1082
     1083}
     1084?>
     1085 No newline at end of file
  • mythweb/modules/music/mp3act_hidden.php

    Property changes on: mythweb/modules/music/mp3act_functions.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php
     2// hidden iframe to process streaming
     3include("mp3act_functions.php");
     4
     5// Play the Music
     6if(isset($_GET['type'])){
     7        if($_GET['type'] == 'artists' || $_GET['type'] == 'genre' || $_GET['type'] == 'albums' || $_GET['type'] == 'all'){
     8//              echo "rand";
     9                echo randPlay('streaming',$_GET['type'],$_GET['num'],$_GET['items']);
     10        }
     11        else{
     12//              echo "play";
     13                echo play('streaming',$_GET['type'],$_GET['id']);
     14//              play($_SESSION['sess_playmode'],$_GET['type'],$_GET['id']);
     15        }
     16}
     17?>
  • mythweb/modules/music/init.php

    Property changes on: mythweb/modules/music/mp3act_hidden.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
    1616// First, we should check to see that MythMusic is configured.
    1717// Make sure to turn off fatal errors in case the table isn't there.
    1818    $db->disable_fatal_errors();
    19     $has_music = $db->query_col('SELECT COUNT(*) FROM musicmetadata');
     19    $has_music = $db->query_col('SELECT COUNT(*) FROM music_songs');
    2020    $db->enable_fatal_errors();
    2121    $db->error(false);
    2222
  • mythweb/modules/music/mp3act_fat.js

     
     1var Fat = {
     2        make_hex : function (r,g,b)
     3        {
     4                r = r.toString(16); if (r.length == 1) r = '0' + r;
     5                g = g.toString(16); if (g.length == 1) g = '0' + g;
     6                b = b.toString(16); if (b.length == 1) b = '0' + b;
     7                return "#" + r + g + b;
     8        },
     9        fade_all : function ()
     10        {
     11                var a = document.getElementsByTagName("*");
     12                for (var i = 0; i < a.length; i++)
     13                {
     14                        var o = a[i];
     15                        var r = /fade-?(\w{3,6})?/.exec(o.className);
     16                        if (r)
     17                        {
     18                                if (!r[1]) r[1] = "";
     19                                if (o.id) Fat.fade_element(o.id,null,null,"#"+r[1]);
     20                        }
     21                }
     22        },
     23        fade_element : function (id, fps, duration, from, to)
     24        {
     25                if (!fps) fps = 30;
     26                if (!duration) duration = 3000;
     27                if (!from || from=="#") from = "#FFFF33";
     28                if (!to) to = this.get_bgcolor(id);
     29               
     30                var frames = Math.round(fps * (duration / 1000));
     31                var interval = duration / frames;
     32                var delay = interval;
     33                var frame = 0;
     34               
     35                if (from.length < 7) from += from.substr(1,3);
     36                if (to.length < 7) to += to.substr(1,3);
     37               
     38                var rf = parseInt(from.substr(1,2),16);
     39                var gf = parseInt(from.substr(3,2),16);
     40                var bf = parseInt(from.substr(5,2),16);
     41                var rt = parseInt(to.substr(1,2),16);
     42                var gt = parseInt(to.substr(3,2),16);
     43                var bt = parseInt(to.substr(5,2),16);
     44               
     45                var r,g,b,h;
     46                while (frame < frames)
     47                {
     48                        r = Math.floor(rf * ((frames-frame)/frames) + rt * (frame/frames));
     49                        g = Math.floor(gf * ((frames-frame)/frames) + gt * (frame/frames));
     50                        b = Math.floor(bf * ((frames-frame)/frames) + bt * (frame/frames));
     51                        h = this.make_hex(r,g,b);
     52               
     53                        setTimeout("Fat.set_bgcolor('"+id+"','"+h+"')", delay);
     54
     55                        frame++;
     56                        delay = interval * frame;
     57                }
     58                setTimeout("Fat.set_bgcolor('"+id+"','"+to+"')", delay);
     59        },
     60        set_bgcolor : function (id, c)
     61        {
     62                var o = document.getElementById(id);
     63                o.style.backgroundColor = c;
     64        },
     65        get_bgcolor : function (id)
     66        {
     67                var o = document.getElementById(id);
     68                while(o)
     69                {
     70                        var c;
     71                        if (window.getComputedStyle) c = window.getComputedStyle(o,null).getPropertyValue("background-color");
     72                        if (o.currentStyle) c = o.currentStyle.backgroundColor;
     73                        if ((c != "" && c != "transparent") || o.tagName == "BODY") { break; }
     74                        o = o.parentNode;
     75                }
     76                if (c == undefined || c == "" || c == "transparent") c = "#FFFFFF";
     77                var rgb = c.match(/rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/);
     78                if (rgb) c = this.make_hex(parseInt(rgb[1]),parseInt(rgb[2]),parseInt(rgb[3]));
     79                return c;
     80        }
     81}
     82 No newline at end of file
  • mythweb/modules/music/mp3act_playstream.php

    Property changes on: mythweb/modules/music/mp3act_fat.js
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php
     2include_once("modules/music/mp3act_functions.php");
     3set_time_limit(0);
     4streamPlay($_GET['i'],$_GET['b'],$_GET['s'],$_GET['u'],$_SERVER['REMOTE_ADDR'])
     5?>
     6 No newline at end of file
  • mythmusic/mythmusic/metadata.cpp

    Property changes on: mythweb/modules/music/mp3act_playstream.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
    4444    rating = rhs->Rating();
    4545    lastplay = rhs->LastPlayStr();
    4646    playcount = rhs->Playcount();
     47    bitrate = rhs->Bitrate();
     48    filesize = rhs->Filesize();
    4749    compilation = rhs->Compilation();
    4850    id = rhs->ID();
    4951    filename = rhs->Filename();
     
    6264void Metadata::persist()
    6365{
    6466    MSqlQuery query(MSqlQuery::InitCon());
    65     query.prepare("UPDATE musicmetadata set rating = :RATING , "
    66                   "playcount = :PLAYCOUNT , lastplay = :LASTPLAY "
    67                   "where intid = :ID ;");
     67    query.prepare("UPDATE music_songs set rating = :RATING , "
     68                  "numplays = :PLAYCOUNT , lastplay = :LASTPLAY "
     69                  "where song_id = :ID ;");
    6870    query.bindValue(":RATING", rating);
    6971    query.bindValue(":PLAYCOUNT", playcount);
    7072    query.bindValue(":LASTPLAY", lastplay);
     
    98100    QString sqlfilename = filename.remove(0, m_startdir.length());
    99101
    100102    MSqlQuery query(MSqlQuery::InitCon());
    101     query.prepare("SELECT artist,compilation_artist,album,title,genre,year,tracknum,"
    102                   "length,intid,rating,playcount,lastplay,compilation,format FROM "
    103                   "musicmetadata WHERE filename = :FILENAME ;");
     103    query.prepare("SELECT music_artists.artist_name, music_artists_1.artist_name AS compilation_artist, "
     104                  "music_albums.album_name, music_songs.name, music_genres.genre, music_songs.year, "
     105                  "music_songs.track, music_songs.length, music_songs.song_id, music_songs.rating, "
     106                  "music_songs.numplays, music_songs.lastplay, music_songs.compilation, "
     107                  "music_songs.format FROM (((music_songs INNER JOIN music_artists ON "
     108                  "music_songs.artist_id = music_artists.artist_id) INNER JOIN music_albums ON "
     109                  "music_songs.album_id = music_albums.album_id) INNER JOIN music_genres ON "
     110                  "music_songs.genre_id = music_genres.genre_id) INNER JOIN music_artists AS "
     111                  "music_artists_1 ON music_albums.artist_id = music_artists_1.artist_id WHERE "
     112                  "(((music_songs.filename)= :FILENAME ));");
    104113    query.bindValue(":FILENAME", sqlfilename.utf8());
    105114
    106115    if (query.exec() && query.isActive() && query.size() > 0)
     
    146155    // Don't update the database if a song with the exact same
    147156    // metadata is already there
    148157    MSqlQuery query(MSqlQuery::InitCon());
    149     query.prepare("SELECT filename FROM musicmetadata WHERE "
    150                   "( ( artist = :ARTIST ) AND "
    151                   "( compilation_artist = :COMPILATION_ARTIST ) "
    152                   "( album = :ALBUM ) AND ( title = :TITLE ) "
    153                   "AND ( genre = :GENRE ) AND "
    154                   "( year = :YEAR ) AND ( tracknum = :TRACKNUM ) "
    155                   "AND ( length = :LENGTH ) "
    156                   "AND ( format = :FORMAT) );");
     158    query.prepare("SELECT music_songs.filename FROM (((music_songs "
     159                  "INNER JOIN music_artists ON music_songs.artist_id = "
     160                  "music_artists.artist_id) INNER JOIN music_albums ON "
     161                  "music_songs.album_id = music_albums.album_id) INNER "
     162                  "JOIN music_artists AS music_artists_1 ON music_albums.compilationartist_id "
     163                  "= music_artists_1.artist_id) INNER JOIN music_genres ON "
     164                  "music_songs.genre_id = music_genres.genre_id WHERE "
     165                  "(((music_artists.artist_name)=:ARTIST) AND "
     166                  "((music_artists_1.artist_id)=:COMPILATION_ARTIST) "
     167                  "AND ((music_albums.album_name)=:ALBUM) AND "
     168                  "((music_songs.name)=:TITLE) AND "
     169                  "((music_genres.genre)=:GENRE) AND ((music_songs.year)=:YEAR) "
     170                  "AND ((music_songs.track)=:TRACKNUM) AND "
     171                  "((music_songs.length)=:LENGTH) AND "
     172                  "((music_songs.format)=:FORMAT));");
     173   
    157174    query.bindValue(":ARTIST", artist.utf8());
    158175    query.bindValue(":COMPILATION_ARTIST", compilation_artist.utf8());
    159176    query.bindValue(":ALBUM", album.utf8());
     
    167184    if (query.exec() && query.isActive() && query.size() > 0)
    168185        return;
    169186
    170     query.prepare("INSERT INTO musicmetadata "
    171                   "(artist,   compilation_artist, album,      title,  "
    172                   " genre,    year,               tracknum,   length, "
    173                   " filename, compilation,        date_added, date_modified, "
    174                   " format ) "
     187//Genrecheck
     188//Albumcheck
     189//Artist
     190    int ArtistID;
     191    query.prepare("SELECT music_artists.artist_id FROM music_artists "
     192                  " WHERE (((music_artists.artist_name)=:ARTIST));");
     193    query.bindValue(":ARTIST", artist.utf8());
     194    query.exec();
     195//    cout << query.executedQuery() << endl;
     196    if (query.size() > 0)
     197        {
     198        query.next();
     199        ArtistID = query.value(0).toInt();
     200        }
     201    else
     202        {
     203        query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);");
     204        query.bindValue(":ARTIST", artist.utf8());
     205        query.exec();
     206//      cout << query.executedQuery() << endl;
     207        query.prepare("SELECT music_artists.artist_id FROM music_artists "
     208                  " WHERE (((music_artists.artist_name)=:ARTIST));");
     209        query.bindValue(":ARTIST", artist.utf8());
     210        query.exec();
     211//      cout << query.executedQuery() << endl;
     212        query.next();
     213        ArtistID = query.value(0).toInt();     
     214        }
     215
     216//Compilation Artist   
     217    int CoArtistID;
     218    query.prepare("SELECT music_artists.artist_id FROM music_artists "
     219                  " WHERE (((music_artists.artist_name)=:ARTIST));");
     220    query.bindValue(":ARTIST", compilation_artist.utf8());
     221    query.exec();
     222//    cout << query.executedQuery() << endl;
     223    if (query.size() > 0)
     224        {
     225        query.next();
     226        CoArtistID = query.value(0).toInt();
     227        }
     228    else
     229        {
     230        query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);");
     231        query.bindValue(":ARTIST", compilation_artist.utf8());
     232        query.exec();
     233//      cout << query.executedQuery() << endl;
     234        query.prepare("SELECT music_artists.artist_id FROM music_artists "
     235                  " WHERE (((music_artists.artist_name)=:ARTIST));");
     236        query.bindValue(":ARTIST", compilation_artist.utf8());
     237        query.exec();
     238//      cout << query.executedQuery() << endl;
     239        query.next();
     240        CoArtistID = query.value(0).toInt();   
     241        }
     242
     243//Album
     244    int AlbumID;
     245    query.prepare("SELECT music_albums.album_id FROM music_albums "
     246                  " WHERE (((music_albums.album_name)=:ALBUM));");
     247    query.bindValue(":ALBUM", album.utf8());
     248    query.exec();
     249//    cout << query.executedQuery() << endl;
     250    if (query.size() > 0)
     251        {
     252        query.next();
     253        AlbumID = query.value(0).toInt();
     254        }
     255    else
     256        {
     257        query.prepare("INSERT INTO music_albums (album_name) VALUES (:ALBUM);");
     258        query.bindValue(":ALBUM", album.utf8());
     259        query.exec();
     260//      cout << query.executedQuery() << endl;
     261       
     262        query.prepare("SELECT music_albums.album_id FROM music_albums "
     263                  " WHERE (((music_albums.album_name)=:ALBUM));");
     264        query.bindValue(":ALBUM", album.utf8());
     265        query.exec();
     266//      cout << query.executedQuery() << endl;
     267        query.next();
     268
     269        AlbumID = query.value(0).toInt();       
     270        }
     271
     272//Genres
     273    int GenreID;
     274    query.prepare("SELECT music_genres.genre_id FROM music_genres "
     275                  " WHERE (((music_genres.genre)=:GENRE));");
     276    query.bindValue(":GENRE", genre.utf8());
     277    query.exec();
     278//    cout << query.executedQuery() << endl;
     279    if (query.size() > 0)
     280        {
     281        query.next();
     282        GenreID = query.value(0).toInt();
     283        }
     284    else
     285        {
     286        query.prepare("INSERT INTO music_genres (genre) VALUES (:GENRE);");
     287        query.bindValue(":GENRE", genre.utf8());
     288        query.exec();
     289//        cout << query.executedQuery() << endl;
     290       
     291        query.prepare("SELECT music_genres.genre_id FROM music_genres "
     292                  " WHERE (((music_genres.genre)=:GENRE));");
     293        query.bindValue(":GENRE", genre.utf8());
     294        query.exec();
     295//      cout << query.executedQuery() << endl;
     296        query.next();
     297        GenreID = query.value(0).toInt();       
     298        }
     299
     300//Song hinzufgen
     301
     302   query.prepare("INSERT INTO music_songs "
     303                  "(artist_id,   album_id, compilationartist_id,     name,  "
     304                  " genre_id,    year,               track,   length, "
     305                  " filename, compilation,        date_entered, date_modified, "
     306                  " format, size, bitrate ) "
    175307                  "VALUES "
    176                   "(:ARTIST,  :COMPILATION_ARTIST,:ALBUM,     :TITLE,   "
     308                  "(:ARTIST,  :ALBUM, :COMPILATION_ARTIST,    :TITLE,   "
    177309                  " :GENRE,   :YEAR,              :TRACKNUM,  :LENGTH,  "
    178310                  " :FILENAME,:COMPILATION,       :DATE_ADDED,:DATE_MOD,"
    179                   " :FORMAT)");
    180     query.bindValue(":ARTIST", artist.utf8());
    181     query.bindValue(":COMPILATION_ARTIST", compilation_artist.utf8());
    182     query.bindValue(":ALBUM", album.utf8());
     311                  " :FORMAT, :FILESIZE, :BITRATE)");
     312    query.bindValue(":ARTIST", ArtistID);
     313    query.bindValue(":COMPILATION_ARTIST", CoArtistID);
     314    query.bindValue(":ALBUM", AlbumID);
    183315    query.bindValue(":TITLE", title.utf8());
    184     query.bindValue(":GENRE", genre.utf8());
     316    query.bindValue(":GENRE", GenreID);
    185317    query.bindValue(":YEAR", year);
    186318    query.bindValue(":TRACKNUM", tracknum);
    187319    query.bindValue(":LENGTH", length);
     
    190322    query.bindValue(":DATE_ADDED",  QDateTime::currentDateTime());
    191323    query.bindValue(":DATE_MOD",    QDateTime::currentDateTime());
    192324    query.bindValue(":FORMAT", format);
     325    query.bindValue(":FILESIZE", filesize);
     326    query.bindValue(":BITRATE", bitrate);
    193327   
     328   
    194329    query.exec();
    195 
     330//    cout << query.executedQuery() << endl;
    196331    // easiest way to ensure we've got 'id' filled.
    197332    fillData();
    198333}
     
    341476
    342477    MSqlQuery query(MSqlQuery::InitCon());
    343478
    344     query.prepare("UPDATE musicmetadata    "
     479    query.prepare("UPDATE music_songs    "
    345480                  "SET artist   = :ARTIST,   "
    346481                  "    album    = :ALBUM,    "
    347482                  "    title    = :TITLE,    "
     
    353488                  "    compilation        = :COMPILATION,   "
    354489                  "    compilation_artist = :COMPILATION_ARTIST, "
    355490                  "    format             = :FORMAT "
    356                   "WHERE intid = :ID;");
     491                  "WHERE song_id = :ID;");
    357492    query.bindValue(":ARTIST",             artist.utf8());
    358493    query.bindValue(":ALBUM",              album.utf8());
    359494    query.bindValue(":TITLE",              title.utf8());
     
    427562    if (title == "")
    428563        return;
    429564
    430     QString thequery = "SELECT artist,compilation_artist,album,title,genre,year,tracknum,length,"
    431                        "filename,intid,rating,playcount,lastplay,compilation,format "
    432                        "FROM musicmetadata WHERE title = :TITLE";
     565//    QString thequery = "SELECT artist,compilation_artist,album,title,genre,year,tracknum,length,"
     566//                       "filename,song_id,rating,playcount,lastplay,compilation,format "
     567//                       "FROM musicmetadata WHERE title = :TITLE";
     568    QString thequery = "SELECT music_artists.artist_name, music_artists_1.artist_name AS compilation_artist, "
     569                       "music_albums.album_name, music_songs.name, music_genres.genre, music_songs.year, "
     570                       "music_songs.track, music_songs.length, music_songs.filename, music_songs.song_id, "
     571                       "music_songs.rating, music_songs.numplays, music_songs.lastplay, music_songs.compilation, "
     572                       "music_songs.format FROM music_artists AS music_artists_1 INNER JOIN (((music_songs INNER "
     573                       "JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN "
     574                       "music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN "
     575                       "music_genres ON music_songs.genre_id = music_genres.genre_id) ON "
     576                       "music_artists_1.artist_id = music_songs.compilationartist_id WHERE name = :TITLE";
    433577
    434578    if (album != "")
    435         thequery += " AND album = :ALBUM";
     579        thequery += " AND album_name = :ALBUM";
    436580    if (artist != "")
    437         thequery += " AND artist = :ARTIST";
     581        thequery += " AND artist_name = :ARTIST";
    438582    if (compilation_artist != "")
    439583        thequery += " AND compilation_artist = :COMPILATION_ARTIST";
    440584
     
    478622        return;
    479623       
    480624    MSqlQuery query(MSqlQuery::InitCon());
    481     query.prepare("SELECT title,artist,compilation_artist,album,title,genre,year,tracknum,"
    482                   "length,filename,rating,playcount,lastplay,compilation,format FROM "
    483                   "musicmetadata WHERE intid = :ID ;");
     625//    query.prepare("SELECT title,artist,compilation_artist,album,title,genre,year,tracknum,"
     626//                  "length,filename,rating,playcount,lastplay,compilation,format FROM "
     627//                  "musicmetadata WHERE song_id = :ID ;");
     628    query.prepare("SELECT music_songs.name, music_artists.artist_name, music_artists_1.artist_name AS "
     629                  "compilation_artist, music_albums.album_name, music_genres.genre, music_songs.year, "
     630                  "music_songs.track, music_songs.length, music_songs.filename, music_songs.rating, "
     631                  "music_songs.numplays, music_songs.lastplay, music_songs.compilation, music_songs.format "
     632                  "FROM music_artists AS music_artists_1 INNER JOIN (((music_songs INNER JOIN music_artists "
     633                  "ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_albums ON "
     634                  "music_songs.album_id = music_albums.album_id) INNER JOIN music_genres ON "
     635                  "music_songs.genre_id = music_genres.genre_id) ON music_artists_1.artist_id = "
     636                  "music_songs.compilationartist_id WHERE (((music_songs.song_id) = :ID ));");           
    484637    query.bindValue(":ID", id);
    485638       
    486639    if (query.exec() && query.isActive() && query.numRowsAffected() > 0)
     
    491644        artist = QString::fromUtf8(query.value(1).toString());
    492645        compilation_artist = QString::fromUtf8(query.value(2).toString());
    493646        album = QString::fromUtf8(query.value(3).toString());
    494         title = QString::fromUtf8(query.value(4).toString());
    495         genre = QString::fromUtf8(query.value(5).toString());
    496         year = query.value(6).toInt();
    497         tracknum = query.value(7).toInt();
    498         length = query.value(8).toInt();
    499         filename = QString::fromUtf8(query.value(9).toString());
    500         rating = query.value(10).toInt();
    501         playcount = query.value(11).toInt();
    502         lastplay = query.value(12).toString();
    503         compilation = (query.value(13).toInt() > 0);
    504         format = query.value(14).toString();
     647        genre = QString::fromUtf8(query.value(4).toString());
     648        year = query.value(5).toInt();
     649        tracknum = query.value(6).toInt();
     650        length = query.value(7).toInt();
     651        filename = QString::fromUtf8(query.value(8).toString());
     652        rating = query.value(9).toInt();
     653        playcount = query.value(10).toInt();
     654        lastplay = query.value(11).toString();
     655        compilation = (query.value(12).toInt() > 0);
     656        format = query.value(13).toString();
    505657
    506658        if (!filename.contains("://"))
    507659            filename = m_startdir + filename;
     
    644796void AllMusic::resync()
    645797{
    646798    done_loading = false;
    647     QString aquery =    "SELECT intid, artist, compilation_artist, album, title, genre, "
    648                         "year, tracknum, length, filename, rating, "
    649                         "lastplay, playcount, compilation, format "
    650                         "FROM musicmetadata "
    651                         "ORDER BY intid;";
     799//    QString aquery =    "SELECT song_id, artist, compilation_artist, album, title, genre, "
     800//                        "year, tracknum, length, filename, rating, "
     801//                        "lastplay, playcount, compilation, format "
     802//                        "FROM music_songs "
     803//                        "ORDER BY song_id;";
    652804
     805    QString aquery =    "SELECT music_songs.song_id, music_artists.artist_name, "
     806                        "music_artists_1.artist_name AS compilation_artist, music_albums.album_name, "
     807                        "music_songs.name, music_genres.genre, music_songs.year, music_songs.track, "
     808                        "music_songs.length, music_songs.filename, music_songs.rating, "
     809                        "music_songs.lastplay, music_songs.numplays, music_songs.compilation, "
     810                        "music_songs.format, music_songs.bitrate, music_songs.size FROM music_artists AS music_artists_1 INNER JOIN "
     811                        "(((music_songs INNER JOIN music_artists ON music_songs.artist_id = "
     812                        "music_artists.artist_id) INNER JOIN music_genres ON music_songs.genre_id = "
     813                        "music_genres.genre_id) INNER JOIN music_albums ON music_songs.album_id = "
     814                        "music_albums.album_id) ON music_artists_1.artist_id = "
     815                        "music_songs.compilationartist_id ORDER BY music_songs.song_id;";
     816
     817
    653818    QString filename, artist, album, title;
    654819
    655820    MSqlQuery query(MSqlQuery::InitCon());
     
    694859                query.value(0).toInt(),
    695860                query.value(10).toInt(),
    696861                query.value(12).toInt(),
     862                query.value(15).toInt(), //bitrate
     863                query.value(16).toInt(), //filesize
    697864                query.value(11).toString(),
    698865                (query.value(13).toInt() > 0),
    699866                query.value(14).toString());
  • mythmusic/mythmusic/dbcheck.cpp

     
    99#include "mythtv/mythcontext.h"
    1010#include "mythtv/mythdbcon.h"
    1111
    12 const QString currentDatabaseVersion = "1005";
     12const QString currentDatabaseVersion = "1006";
    1313
    1414static void UpdateDBVersionNumber(const QString &newnumber)
    1515{
     
    323323
    324324        performActualUpdate(updates, "1005", dbver);
    325325    }
     326   
     327   
     328        if (dbver == "1005")
     329            {
     330            const QString updates[] = {
     331"DROP TABLE musicmetadata;",
     332"DROP TABLE musicplaylist;",
     333"CREATE TABLE music_albums (album_id int(11) NOT NULL auto_increment, album_name varchar(255) NOT NULL default '', album_art text NOT NULL, PRIMARY KEY  (album_id));",
     334"CREATE TABLE music_artists (artist_id int(11) NOT NULL auto_increment, artist_name varchar(255) default NULL, prefix varchar(7) NOT NULL default '', PRIMARY KEY  (artist_id));",
     335"CREATE TABLE music_currentsong (song_id int(11) NOT NULL default '0', pl_id int(11) NOT NULL default '0', random tinyint(3) NOT NULL default '0');",
     336"CREATE TABLE music_genres (genre_id int(11) NOT NULL auto_increment, genre varchar(25) NOT NULL default '', PRIMARY KEY  (genre_id));",
     337"CREATE TABLE music_playhistory (play_id int(11) NOT NULL auto_increment, user_id int(6) default NULL, song_id int(11) default NULL, date_played datetime default NULL, PRIMARY KEY  (play_id));",
     338"CREATE TABLE music_playlist (pl_id int(11) NOT NULL auto_increment, song_id int(11) default NULL, user_id int(11) NOT NULL default '0', PRIMARY KEY  (pl_id));",
     339"CREATE TABLE music_saved_playlists (playlist_id int(11) NOT NULL auto_increment, playlist_name varchar(255) default NULL, playlist_songs text, date_created datetime default NULL, time int(11) default NULL, songcount smallint(8) default NULL, hostname VARCHAR(255), PRIMARY KEY (playlist_id));",
     340"CREATE TABLE music_songs (song_id int(11) NOT NULL auto_increment, artist_id int(11) NOT NULL default '0', compilationartist_id int(11) NOT NULL default '0', album_id int(11) NOT NULL default '0', genre_id int(11) NOT NULL default '0', year smallint(6) NOT NULL default '0', lastplay datetime default NULL, date_entered datetime default NULL, date_modified datetime default NULL, name varchar(255) default NULL, track smallint(6) NOT NULL default '0', length int(11) NOT NULL default '0', size int(11) NOT NULL default '0', bitrate int(11) NOT NULL default '0', type varchar(4) default NULL, numplays int(11) NOT NULL default '0', rating tinyint(4) NOT NULL default '0', filename text, random tinyint(4) NOT NULL default '0', format varchar(4) NOT NULL default '0', compilation tinyint default 0, PRIMARY KEY  (song_id));",
     341"CREATE TABLE music_stats (num_artists smallint(5) unsigned NOT NULL default '0', num_albums smallint(5) unsigned NOT NULL default '0', num_songs mediumint(8) unsigned NOT NULL default '0', num_genres tinyint(3) unsigned NOT NULL default '0', total_time varchar(12) NOT NULL default '0', total_size varchar(10) NOT NULL default '0');",
     342"RENAME TABLE smartplaylist TO music_smartplaylist;",
     343"RENAME TABLE smartplaylistitem TO music_smartplaylistitem;",
     344"RENAME TABLE smartplaylistcategory TO music_smartplaylistcategory;",
     345""
     346};
     347        performActualUpdate(updates, "1006", dbver);
     348    }
    326349}
    327350
  • mythmusic/mythmusic/metaioid3v2.h

     
    2323   
    2424private:
    2525    int getTrackLength(QString filename);
     26    int getTrackBitRate(QString filename);
    2627
    2728    QString getRawID3String(union id3_field *pField);
    2829    void removeComment(id3_tag *pTag, const char* pLabel, const QString desc = "");
  • mythmusic/mythmusic/playlist.cpp

     
    326326    all_other_playlists->clear();
    327327
    328328    MSqlQuery query(MSqlQuery::InitCon());
    329     query.prepare("SELECT playlistid FROM musicplaylist "
    330                   "WHERE name != :DEFAULT  "
    331                   "AND name != :BACKUP  "
    332                   "AND hostname = :HOST ORDER BY playlistid ;");
     329//    query.prepare("SELECT playlistid FROM musicplaylist "
     330//                  "WHERE name != :DEFAULT  "
     331//                  "AND name != :BACKUP  "
     332//                  "AND hostname = :HOST ORDER BY playlistid ;");
     333//    query.bindValue(":DEFAULT", "default_playlist_storage");
     334//    query.bindValue(":BACKUP", "backup_playlist_storage");
     335//    query.bindValue(":HOST", my_host);
     336    query.prepare("SELECT playlist_id FROM music_saved_playlists WHERE playlist_name != :DEFAULT AND playlist_name != :BACKUP ORDER BY playlist_id;");
    333337    query.bindValue(":DEFAULT", "default_playlist_storage");
    334338    query.bindValue(":BACKUP", "backup_playlist_storage");
    335     query.bindValue(":HOST", my_host);
    336339
    337340    if (query.exec() && query.isActive() && query.size() > 0)
    338341    {
     
    468471    }
    469472   
    470473    MSqlQuery query(MSqlQuery::InitCon());
    471     query.prepare("SELECT playlistid, name, songlist FROM "
    472                   "musicplaylist WHERE name = :NAME AND "
    473                   "hostname = :HOST ;");
    474     query.bindValue(":NAME", a_name);
    475     query.bindValue(":HOST", a_host);
    476474
     475    if (name == "default_playlist_storage" || name == "backup_playlist_storage")
     476    {
     477        query.prepare("SELECT playlist_id, playlist_name, playlist_songs FROM "
     478                      "music_saved_playlists WHERE playlist_name = :NAME AND hostname = :HOST;");
     479        query.bindValue(":NAME", a_name);
     480        query.bindValue(":HOST", a_host);
     481    }
     482    else
     483    {
     484        query.prepare("SELECT playlist_id, playlist_name, playlist_songs FROM "
     485                      "music_saved_playlists WHERE playlist_name = :NAME;");
     486        query.bindValue(":NAME", a_name);
     487    }
     488
    477489    if (query.exec() && query.size() > 0)
    478490    {
    479491        while (query.next())
     
    498510void Playlist::loadPlaylistByID(int id, QString a_host)
    499511{
    500512    MSqlQuery query(MSqlQuery::InitCon());
    501     query.prepare("SELECT playlistid, name, songlist FROM "
    502                   "musicplaylist WHERE playlistid = :ID AND "
    503                   "hostname = :HOST ;");
     513    query.prepare("SELECT playlist_id, playlist_name, playlist_songs FROM "
     514                  "music_saved_playlists WHERE playlist_id = :ID;");
    504515    query.bindValue(":ID", id);
    505     query.bindValue(":HOST", a_host);
     516//    query.bindValue(":HOST", a_host);
    506517
    507518    query.exec();
    508519
     
    603614
    604615    QString theQuery;
    605616
    606     theQuery = "SELECT intid FROM musicmetadata ";
     617    theQuery = "SELECT song_id FROM music_songs ";
    607618
    608619    if (whereClause.length() > 0)
    609620      theQuery += whereClause;
     
    717728    QString orderBy;
    718729    int limitTo;
    719730   
    720     query.prepare("SELECT smartplaylistid, matchtype, orderby, limitto "
     731    query.prepare("SELECT music_smartplaylistid, matchtype, orderby, limitto "
    721732                  "FROM smartplaylist WHERE categoryid = :CATEGORYID AND name = :NAME;");
    722733    query.bindValue(":NAME", name.utf8());
    723734    query.bindValue(":CATEGORYID", categoryID);
     
    748759    QString whereClause = "WHERE ";
    749760   
    750761    query.prepare("SELECT field, operator, value1, value2 "
    751                   "FROM smartplaylistitem WHERE smartplaylistid = :ID;");
     762                  "FROM music_smartplaylistitem WHERE smartplaylistid = :ID;");
    752763    query.bindValue(":ID", ID);
    753764    query.exec();
    754765    if (query.isActive() && query.numRowsAffected() > 0)
     
    787798        return;
    788799
    789800    fillSonglistFromSongs();
     801    MSqlQuery query(MSqlQuery::InitCon());
    790802
    791     MSqlQuery query(MSqlQuery::InitCon());
    792     query.prepare("SELECT NULL FROM musicplaylist WHERE playlistid = :ID ;");
     803    int songcount = 0, playtime = 0, an_int;
     804    QStringList list = QStringList::split(",", raw_songlist);
     805    QStringList::iterator it = list.begin();
     806    for (; it != list.end(); it++)
     807    {
     808        an_int = QString(*it).toInt();
     809        if (an_int != 0)
     810        {
     811            songcount++;
     812            query.prepare("SELECT length FROM music_songs WHERE song_id = :ID ;");
     813            query.bindValue(":ID", playlistid);
     814            query.exec();
     815            query.next();
     816            playtime += query.value(0).toInt();
     817        }
     818    }
     819
     820    query.prepare("SELECT NULL FROM music_saved_playlists WHERE playlist_id = :ID ;");
    793821    query.bindValue(":ID", playlistid);
    794822
    795823    if (query.exec() && query.isActive() && query.size() > 0)
    796824    {
    797         query.prepare("UPDATE musicplaylist SET songlist = :LIST , "
    798                       "name = :NAME WHERE playlistid = :ID ;");
     825        query.prepare("UPDATE music_saved_playlists SET playlist_songs = :LIST , "
     826                      "playlist_name = :NAME, songcount = :SONGCOUNT, time = :PLAYTIME WHERE playlist_id = :ID ;");
    799827        query.bindValue(":LIST", raw_songlist);
    800828        query.bindValue(":NAME", a_name.utf8());
     829        query.bindValue(":SONGCOUNT", songcount);
     830        query.bindValue(":PLAYTIME", playtime);
    801831        query.bindValue(":ID", playlistid);
    802832    }
    803833    else
    804834    {
    805         query.prepare("INSERT INTO musicplaylist (name,songlist) "
    806                       "VALUES(:NAME, :LIST);");
     835        query.prepare("INSERT INTO music_saved_playlists (playlist_name,playlist_songs, songcount, time) "
     836                      "VALUES(:NAME, :LIST, :SONGCOUNT, :PLAYTIME);");
    807837        query.bindValue(":LIST", raw_songlist);
    808838        query.bindValue(":NAME", a_name.utf8());
     839        query.bindValue(":SONGCOUNT", songcount);
     840        query.bindValue(":PLAYTIME", playtime);
    809841    }
    810842
    811843    query.exec();
     
    827859    }
    828860
    829861    fillSonglistFromSongs();
     862    MSqlQuery query(MSqlQuery::InitCon());
     863
     864    int songcount = 0, playtime = 0, an_int;
     865    QStringList list = QStringList::split(",", raw_songlist);
     866    QStringList::iterator it = list.begin();
     867    for (; it != list.end(); it++)
     868    {
     869        an_int = QString(*it).toInt();
     870        if (an_int != 0)
     871        {
     872            songcount++;
     873            query.prepare("SELECT length FROM music_songs WHERE song_id = :ID ;");
     874            query.bindValue(":ID", playlistid);
     875            query.exec();
     876            query.next();
     877            playtime += query.value(0).toInt();
     878        }
     879    }
    830880   
    831     MSqlQuery query(MSqlQuery::InitCon());
    832     query.prepare("INSERT musicplaylist (name, hostname) "
    833                   "VALUES(:NAME, :HOST);");
     881    query.prepare("INSERT music_saved_playlists (playlist_name, hostname, songcount, time) "
     882                  "VALUES(:NAME, :HOST, :SONGCOUNT, :PLAYTIME);");
    834883    query.bindValue(":NAME", name.utf8());
    835884    query.bindValue(":HOST", a_host);
     885    query.bindValue(":SONGCOUNT", songcount);
     886    query.bindValue(":PLAYTIME", playtime);
    836887
    837888    query.exec();
    838889
    839     query.prepare("SELECT playlistid FROM musicplaylist WHERE "
    840                   "name = :NAME AND hostname = :HOST ;");
     890    query.prepare("SELECT playlist_id FROM music_saved_playlists WHERE "
     891                  "playlist_name = :NAME AND hostname = :HOST;");
    841892    query.bindValue(":NAME", name.utf8());
    842893    query.bindValue(":HOST", a_host);
    843894
     
    12101261    }
    12111262
    12121263    MSqlQuery query(MSqlQuery::InitCon());
    1213     query.prepare("DELETE FROM musicplaylist WHERE playlistid = :ID ;");
     1264    query.prepare("DELETE FROM music_saved_playlists WHERE playlist_id = :ID ;");
    12141265    query.bindValue(":ID", kill_me);
    12151266
    12161267    if (query.exec() || query.size() < 1)
  • mythmusic/mythmusic/smartplaylist.cpp

     
    3333static SmartPLField SmartPLFields[] =
    3434{
    3535    { "",              "",                               ftString,   0,    0,    0 },
    36     { "Artist",        "artist",                         ftString,   0,    0,    0 },
    37     { "Album",         "album",                          ftString,   0,    0,    0 },
    38     { "Title",         "title",                          ftString,   0,    0,    0 },
     36    { "Artist",        "music_artists.artist_name",                         ftString,   0,    0,    0 },
     37    { "Album",         "album_name",                          ftString,   0,    0,    0 },
     38    { "Title",         "name",                          ftString,   0,    0,    0 },
    3939    { "Genre",         "genre",                          ftString,   0,    0,    0 },
    4040    { "Year",          "year",                           ftNumeric,  1900, 2099, 2000 },
    41     { "Track No.",     "tracknum",                       ftNumeric,  0,    99,   0 },
     41    { "Track No.",     "track",                       ftNumeric,  0,    99,   0 },
    4242    { "Rating",        "rating",                         ftNumeric,  0,    10,   0 },
    43     { "Play Count",    "playcount",                      ftNumeric,  0,    9999, 0 },
     43    { "Play Count",    "numplays",                      ftNumeric,  0,    9999, 0 },
    4444    { "Compilation",   "compilation",                    ftBoolean,  0,    0,    0 },
    45     { "Comp. Artist",  "compilation_artist",             ftString,   0,    0,    0 },
     45    { "Comp. Artist",  "music_artists_1.artist_name",             ftString,   0,    0,    0 },
    4646    { "Last Play",     "FROM_DAYS(TO_DAYS(lastplay))",   ftDate,     0,    0,    0 },
    4747    { "Date Imported", "FROM_DAYS(TO_DAYS(date_added))", ftDate,     0,    0,    0 },
    4848};       
     
    656656   
    657657    MSqlQuery query(MSqlQuery::InitCon());
    658658    QString querystr;
    659     querystr = QString("SELECT DISTINCT %1 FROM musicmetadata ORDER BY %2").arg(field).arg(field);
     659    querystr = QString("SELECT DISTINCT %1 FROM FROM music_artists AS music_artists_1 INNER JOIN (((music_songs INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id) ON music_artists_1.artist_id = music_songs.compilationartist_id ORDER BY %2").arg(field).arg(field);
    660660       
    661661    query.exec(querystr);
    662662    if (query.isActive() && query.numRowsAffected())
     
    815815    }
    816816   
    817817    MSqlQuery query(MSqlQuery::InitCon());
    818     query.prepare("INSERT INTO smartplaylistitem (smartplaylistid, field, operator,"
     818    query.prepare("INSERT INTO music_smartplaylistitem (smartplaylistid, field, operator,"
    819819                  " value1, value2)"
    820820                  "VALUES (:SMARTPLAYLISTID, :FIELD, :OPERATOR, :VALUE1, :VALUE2);");
    821821    query.bindValue(":SMARTPLAYLISTID", smartPlaylistID);
     
    11301130{
    11311131    bPlaylistIsValid = true;
    11321132   
    1133     QString sql = "select count(*) from musicmetadata ";
     1133    QString sql = "select count(*) from music_songs ";
    11341134    sql += getWhereClause();
    11351135   
    11361136    MSqlQuery query(MSqlQuery::InitCon());
     
    11771177   
    11781178    MSqlQuery query(MSqlQuery::InitCon());
    11791179    // insert new smartplaylist
    1180     query.prepare("INSERT INTO smartplaylist (name, categoryid, matchtype, orderby, limitto) "
     1180    query.prepare("INSERT INTO music_smartplaylist (name, categoryid, matchtype, orderby, limitto) "
    11811181                "VALUES (:NAME, :CATEGORYID, :MATCHTYPE, :ORDERBY, :LIMIT);");
    11821182    query.bindValue(":NAME", name.utf8());
    11831183    query.bindValue(":CATEGORYID", categoryid);
     
    11931193   
    11941194    // get smartplaylistid
    11951195    int ID;
    1196     query.prepare("SELECT smartplaylistid FROM smartplaylist "
     1196    query.prepare("SELECT smartplaylistid FROM music_smartplaylist "
    11971197                  "WHERE categoryid = :CATEGORYID AND name = :NAME;");
    11981198    query.bindValue(":CATEGORYID", categoryid);
    11991199    query.bindValue(":NAME", name.utf8());
     
    12531253    int ID;
    12541254   
    12551255    query.prepare("SELECT smartplaylistid, name, categoryid, matchtype, orderby, limitto "
    1256                   "FROM smartplaylist WHERE name = :NAME AND categoryid = :CATEGORYID;");
     1256                  "FROM music_smartplaylist WHERE name = :NAME AND categoryid = :CATEGORYID;");
    12571257    query.bindValue(":NAME", name.utf8());
    12581258    query.bindValue(":CATEGORYID", categoryid);
    12591259    if (query.exec())
     
    12851285    uint rowCount;
    12861286   
    12871287    query.prepare("SELECT field, operator, value1, value2 "
    1288                   "FROM smartplaylistitem WHERE smartplaylistid = :ID "
     1288                  "FROM music_smartplaylistitem WHERE smartplaylistid = :ID "
    12891289                  "ORDER BY smartplaylistitemid;");
    12901290    query.bindValue(":ID", ID);
    12911291    if (!query.exec())
     
    13921392    // insert new smartplaylistcategory
    13931393
    13941394    MSqlQuery query(MSqlQuery::InitCon());
    1395     query.prepare("INSERT INTO smartplaylistcategory (name) "
     1395    query.prepare("INSERT INTO music_smartplaylistcategory (name) "
    13961396                "VALUES (:NAME);");
    13971397    query.bindValue(":NAME", categoryEdit->text().utf8());
    13981398   
     
    14381438       
    14391439    // change the category     
    14401440    MSqlQuery query(MSqlQuery::InitCon());
    1441     query.prepare("UPDATE smartplaylistcategory SET name = :NEW_CATEGORY "
     1441    query.prepare("UPDATE music_smartplaylistcategory SET name = :NEW_CATEGORY "
    14421442                  "WHERE name = :OLD_CATEGORY;");
    14431443    query.bindValue(":OLD_CATEGORY", categoryCombo->currentText().utf8());
    14441444    query.bindValue(":NEW_CATEGORY", categoryEdit->text().utf8());
     
    14591459{
    14601460    QString sql, whereClause, orderByClause, limitClause;
    14611461   
    1462     sql = "SELECT " + fields + " FROM musicmetadata ";
     1462    sql = "SELECT " + fields + " FROM music_artists AS music_artists_1 INNER JOIN (((music_songs INNER JOIN music_albums ON music_songs.album_id = music_albums.album_id) INNER JOIN music_artists ON music_songs.artist_id = music_artists.artist_id) INNER JOIN music_genres ON music_songs.genre_id = music_genres.genre_id) ON music_artists_1.artist_id = music_songs.compilationartist_id ";
    14631463    whereClause = getWhereClause();
    14641464    orderByClause = getOrderByClause();
    14651465    if (limitSpinEdit->value() > 0)
     
    15061506
    15071507void SmartPlaylistEditor::showResultsClicked(void)
    15081508{
    1509     QString sql = getSQL("intid, artist, album, title, genre, year, tracknum");
     1509    QString sql = getSQL("song_id, artist_name, album_name, name, genre, year, track");
    15101510   
    15111511    SmartPLResultViewer *resultViewer = new SmartPLResultViewer(gContext->GetMainWindow(), "resultviewer");
    15121512    resultViewer->setSQL(sql);
     
    15351535    categoryCombo->clear();
    15361536    MSqlQuery query(MSqlQuery::InitCon());
    15371537
    1538     if (query.exec("SELECT name FROM smartplaylistcategory ORDER BY name;"))
     1538    if (query.exec("SELECT name FROM music_smartplaylistcategory ORDER BY name;"))
    15391539    {
    15401540        if (query.isActive() && query.numRowsAffected() > 0)
    15411541        {
     
    15631563   
    15641564    // get playlist ID
    15651565    int ID;
    1566     query.prepare("SELECT smartplaylistid FROM smartplaylist WHERE name = :NAME "
     1566    query.prepare("SELECT smartplaylistid FROM music_smartplaylist WHERE name = :NAME "
    15671567                  "AND categoryid = :CATEGORYID;");
    15681568    query.bindValue(":NAME", name.utf8());
    15691569    query.bindValue(":CATEGORYID", categoryid);
     
    15881588    }
    15891589   
    15901590    //delete smartplaylist items
    1591     query.prepare("DELETE FROM smartplaylistitem WHERE smartplaylistid = :ID;");
     1591    query.prepare("DELETE FROM music_smartplaylistitem WHERE smartplaylistid = :ID;");
    15921592    query.bindValue(":ID", ID);
    15931593    if (!query.exec())
    15941594        MythContext::DBError("Delete smartplaylist items", query);
    15951595
    15961596    //delete smartplaylist
    1597     query.prepare("DELETE FROM smartplaylist WHERE smartplaylistid = :ID;");
     1597    query.prepare("DELETE FROM music_smartplaylist WHERE smartplaylistid = :ID;");
    15981598    query.bindValue(":ID", ID);
    15991599    if (!query.exec())
    16001600        MythContext::DBError("Delete smartplaylist", query);
     
    16101610    MSqlQuery query(MSqlQuery::InitCon());
    16111611   
    16121612    //delete all smartplaylists with the selected category
    1613     query.prepare("SELECT name FROM smartplaylist "
     1613    query.prepare("SELECT name FROM music_smartplaylist "
    16141614                  "WHERE categoryid = :CATEGORYID;");
    16151615    query.bindValue(":CATEGORYID", categoryid);
    16161616    if (!query.exec())
     
    16291629    }
    16301630   
    16311631    // delete the category
    1632     query.prepare("DELETE FROM smartplaylistcategory WHERE categoryid = :ID;");
     1632    query.prepare("DELETE FROM music_smartplaylistcategory WHERE categoryid = :ID;");
    16331633    query.bindValue(":ID", categoryid);
    16341634    if (!query.exec())
    16351635        MythContext::DBError("Delete smartplaylist category", query);
     
    16421642{   
    16431643    int ID;
    16441644    MSqlQuery query(MSqlQuery::InitCon());
    1645     query.prepare("SELECT categoryid FROM smartplaylistcategory "
     1645    query.prepare("SELECT categoryid FROM music_smartplaylistcategory "
    16461646                  "WHERE name = :CATEGORY;");
    16471647    query.bindValue(":CATEGORY", category.utf8());
    16481648
     
    20232023    categoryCombo->clear();
    20242024    MSqlQuery query(MSqlQuery::InitCon());
    20252025
    2026     if (query.exec("SELECT name FROM smartplaylistcategory ORDER BY name;"))
     2026    if (query.exec("SELECT name FROM music_smartplaylistcategory ORDER BY name;"))
    20272027    {
    20282028        if (query.isActive() && query.numRowsAffected() > 0)
    20292029        {
     
    20452045    listbox->clear();
    20462046
    20472047    MSqlQuery query(MSqlQuery::InitCon());   
    2048     query.prepare("SELECT name FROM smartplaylist WHERE categoryid = :CATEGORYID "
     2048    query.prepare("SELECT name FROM music_smartplaylist WHERE categoryid = :CATEGORYID "
    20492049                  "ORDER BY name;");
    20502050    query.bindValue(":CATEGORYID", categoryid);
    20512051                   
  • mythmusic/mythmusic/metadata.h

     
    1818    Metadata(QString lfilename = "", QString lartist = "", QString lcompilation_artist = "",
    1919             QString lalbum = "", QString ltitle = "", QString lgenre = "",
    2020             int lyear = 0, int ltracknum = 0, int llength = 0, int lid = 0,
    21              int lrating = 0, int lplaycount = 0, QString llastplay = "",
     21             int lrating = 0, int lplaycount = 0, int lbitrate = 0, int lfilesize = 0, QString llastplay = "",
    2222             bool lcompilation = false, QString lformat="")
    2323            {
    2424                filename = lfilename;
     
    3535                id = lid;
    3636                rating = lrating;
    3737                playcount = lplaycount;
     38                bitrate = lbitrate;
     39                filesize = lfilesize;
    3840                lastplay = llastplay;
    3941                compilation = lcompilation;
    4042                changed = false;
     
    5961                rating = other.rating;
    6062                lastplay = other.lastplay;
    6163                playcount = other.playcount;
     64                bitrate = other.bitrate;
     65                filesize = other.filesize;
    6266                compilation = other.compilation;
    6367                show = other.show;
    6468                changed = false;
     
    97101    int Playcount() { return playcount; }
    98102    void setPlaycount(int lplaycount) { playcount = lplaycount; }
    99103
     104    int Bitrate() { return bitrate; }
     105    void setBitrate(int lbitrate) { bitrate = lbitrate; }
     106
     107    int Filesize() { return filesize; }
     108    void setFilesize(int lfilesize) { filesize = lfilesize; }
     109
    100110    unsigned int ID() { return id; }
    101111    void setID(int lid) { id = lid; }
    102112   
     
    158168    int rating;
    159169    QString lastplay;
    160170    int playcount;
     171    int bitrate;
     172    int filesize;
    161173    bool compilation;
    162174     
    163175    unsigned int id;
  • mythmusic/mythmusic/main.cpp

     
    7676    {
    7777        Metadata *data = decoder->getMetadata();
    7878        if (data) {
     79            QFileInfo fi1( filename );
     80            data->setFilesize( fi1.size() );   
    7981            data->dumpToDatabase();
    8082            delete data;
    8183        }
     
    9092    QString name(filename);
    9193    name.remove(0, directory.length());
    9294    MSqlQuery query(MSqlQuery::InitCon());
    93     query.prepare("DELETE FROM musicmetadata WHERE "
     95    query.prepare("DELETE FROM music_songs WHERE "
    9496                  "filename = :NAME ;");
    9597    query.bindValue(":NAME", filename.utf8());
    9698    query.exec();
     
    260262
    261263    MSqlQuery query(MSqlQuery::InitCon());
    262264    query.exec("SELECT filename, date_modified "
    263                "FROM musicmetadata "
     265               "FROM music_songs "
    264266               "WHERE filename NOT LIKE ('%://%')");
    265267
    266268    int counter = 0;
     
    558560
    559561
    560562    MSqlQuery count_query(MSqlQuery::InitCon());
    561     count_query.exec("SELECT COUNT(*) FROM musicmetadata;");
     563    count_query.exec("SELECT COUNT(*) FROM music_songs;");
    562564
    563565    bool musicdata_exists = false;
    564566    if (count_query.isActive())
  • mythmusic/mythmusic/metaioid3v2.cpp

     
    174174{
    175175    QString artist = "", compilation_artist = "", album = "", title = "",
    176176            genre = "";
    177     int year = 0, tracknum = 0, length = 0;
     177    int year = 0, tracknum = 0, length = 0, bitrate = 0;
    178178    bool compilation = false;
    179179    id3_file *p_input = NULL;
    180180   
     
    251251    }
    252252
    253253    length = getTrackLength(filename);
     254    bitrate = getTrackBitRate(filename);
    254255
    255256    // If we don't have title and artist or don't have the length return NULL
    256257    if ((title.isEmpty() && artist.isEmpty()) || length<=0)
     
    261262    }
    262263
    263264    Metadata *retdata = new Metadata(filename, artist, compilation_artist, album,
    264                                      title, genre, year, tracknum, length);
     265                                     title, genre, year, tracknum, length, 0, 0,
     266                                     0, bitrate);
    265267                                     
    266268    retdata->setCompilation(compilation);
    267269
     
    378380    return alt_length;
    379381}
    380382
     383//==========================================================================
     384/*!
     385 * \brief Find the bitrate of the track (in bytes/sek)
     386 *
     387 * \param filename The filename for which we want to find the length.
     388 * \returns An integer to represent the bitrate.
     389 */
     390int MetaIOID3v2::getTrackBitRate(QString filename)
     391{
     392    struct mad_stream stream;
     393    struct mad_header header;
     394    mad_timer_t timer;
    381395
     396    unsigned char buffer[8192];
     397    unsigned int buflen = 0;
     398
     399    mad_stream_init(&stream);
     400    mad_header_init(&header);
     401   
     402    timer = mad_timer_zero;
     403
     404    FILE *input = fopen(filename.local8Bit(), "r");
     405    if (!input)
     406        input = fopen(filename.ascii(), "r");
     407
     408    if (!input)
     409        return 0;
     410
     411    struct stat s;
     412    fstat(fileno(input), &s);
     413    unsigned long old_bitrate = 0;
     414    bool vbr = false;
     415    int amount_checked = 0;
     416    bool loop_de_doo = true;
     417   
     418    while (loop_de_doo)
     419    {
     420        if (buflen < sizeof(buffer))
     421        {
     422            int bytes;
     423            bytes = fread(buffer + buflen, 1, sizeof(buffer) - buflen, input);
     424            if (bytes <= 0)
     425                break;
     426            buflen += bytes;
     427        }
     428
     429        mad_stream_buffer(&stream, buffer, buflen);
     430
     431        while (1)
     432        {
     433            if (mad_header_decode(&header, &stream) == -1)
     434            {
     435                if (!MAD_RECOVERABLE(stream.error))
     436                {
     437                    break;
     438                }
     439                if (stream.error == MAD_ERROR_LOSTSYNC)
     440                {
     441                    int tagsize = id3_tag_query(stream.this_frame,
     442                                                stream.bufend -
     443                                                stream.this_frame);
     444                    if (tagsize > 0)
     445                    {
     446                        mad_stream_skip(&stream, tagsize);
     447                        s.st_size -= tagsize;
     448                    }
     449                }
     450            }
     451            else
     452            {
     453                if(amount_checked == 0)
     454                {
     455                    old_bitrate = header.bitrate;
     456                }
     457                else if(header.bitrate != old_bitrate)
     458                {
     459                    vbr = true;
     460                }
     461                if(amount_checked == 32 && !vbr)
     462                {
     463                    loop_de_doo = false;
     464                    break;
     465                }
     466                amount_checked++;
     467                mad_timer_add(&timer, header.duration);
     468            }
     469           
     470        }
     471       
     472        if (stream.error != MAD_ERROR_BUFLEN)
     473            break;
     474
     475        memmove(buffer, stream.next_frame, &buffer[buflen] - stream.next_frame);
     476        buflen -= stream.next_frame - &buffer[0];
     477    }
     478
     479    mad_header_finish(&header);
     480    mad_stream_finish(&stream);
     481
     482    fclose(input);
     483
     484//    if (vbr)
     485//        return mad_timer_count(timer, MAD_UNITS_MILLISECONDS);
     486
     487    return old_bitrate;
     488}
     489
    382490inline QString MetaIOID3v2::getRawID3String(union id3_field *pField)
    383491{
    384492    QString tmp = "";