Ticket #1699: changes.3.2.patch
File changes.3.2.patch, 176.3 KB (added by , 18 years ago) |
---|
-
mythweb/skins/default/music.css
1 mp3act { 2 padding: 22px; 3 margin:0; 4 color: #333; 5 text-align: center; 6 font: 65% Verdana, Sans-serif; 7 } 8 9 h2.music{ 10 font-size: 100%; 11 margin:0; 12 padding: 0 0 5px 0; 13 14 } 15 ul.music{ 16 list-style-type: none; 17 } 18 a.music{ 19 color: blue; 20 } 21 22 a.music:hover{ 23 /*color: #fff; 24 background: #F21518; 25 text-decoration: none;*/ 26 color: #F21518; 27 } 28 img{ 29 border: 0; 30 } 31 input,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 } 41 input.check{ 42 border:0; 43 padding:0; 44 background: transparent; 45 } 46 select{ 47 padding: 2px 0 2px 3px; 48 } 49 input:focus{ 50 border: 1px solid #999; 51 background: #FBF9D3; 52 color: #000; 53 border-color: #777 #bbb #bbb #777; 54 } 55 56 input.btn,input.redbtn{ 57 background: #244A79; 58 color: #fff; 59 padding: 2px; 60 border-color: #0E2F58; 61 font: normal 10px sans-serif; 62 } 63 input.redbtn{ 64 background: #F21518; 65 } 66 input.redbtn:hover{ 67 background: #BE0D0F; 68 } 69 input.btn:hover{ 70 background: #0E2F58; 71 } 72 73 input.btn2{ 74 font-weight: bold; 75 padding: 2px; 76 } 77 78 input.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 } 100 p#error{ 101 color: #f20000; 102 font-weight: bold; 103 } 104 #breadcrumb{ 105 height: 14px; 106 padding:2px 0 0 0; 107 } 108 #breadcrumb span{ 109 position: 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{ 137 width: 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 } 177 p.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 } 225 ul#nav{ 226 position: absolute; 227 bottom:0; 228 list-style-type: none; 229 margin:0; 230 padding:0; 231 } 232 ul#nav li{ 233 float: left; 234 margin-right: 5px; 235 } 236 ul#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 } 244 ul#nav li a:hover{ 245 background: #416899; 246 color: #fff; 247 } 248 ul#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
1 mp3act { 2 padding: 22px; 3 margin:0; 4 color: #333; 5 text-align: center; 6 font: 65% Verdana, Sans-serif; 7 } 8 9 h2.music{ 10 font-size: 100%; 11 margin:0; 12 padding: 0 0 5px 0; 13 14 } 15 ul.music{ 16 list-style-type: none; 17 } 18 a.music{ 19 color: blue; 20 } 21 22 a.music:hover{ 23 /*color: #fff; 24 background: #F21518; 25 text-decoration: none;*/ 26 color: #F21518; 27 } 28 img{ 29 border: 0; 30 } 31 input,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 } 41 input.check{ 42 border:0; 43 padding:0; 44 background: transparent; 45 } 46 select{ 47 padding: 2px 0 2px 3px; 48 } 49 input:focus{ 50 border: 1px solid #999; 51 background: #FBF9D3; 52 color: #000; 53 border-color: #777 #bbb #bbb #777; 54 } 55 56 input.btn,input.redbtn{ 57 background: #244A79; 58 color: #fff; 59 padding: 2px; 60 border-color: #0E2F58; 61 font: normal 10px sans-serif; 62 } 63 input.redbtn{ 64 background: #F21518; 65 } 66 input.redbtn:hover{ 67 background: #BE0D0F; 68 } 69 input.btn:hover{ 70 background: #0E2F58; 71 } 72 73 input.btn2{ 74 font-weight: bold; 75 padding: 2px; 76 } 77 78 input.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 } 100 p#error{ 101 color: #f20000; 102 font-weight: bold; 103 } 104 #breadcrumb{ 105 height: 14px; 106 padding:2px 0 0 0; 107 } 108 #breadcrumb span{ 109 position: 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{ 137 width: 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 } 177 p.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 } 225 ul#nav{ 226 position: absolute; 227 bottom:0; 228 list-style-type: none; 229 margin:0; 230 padding:0; 231 } 232 ul#nav li{ 233 float: left; 234 margin-right: 5px; 235 } 236 ul#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 } 244 ul#nav li a:hover{ 245 background: #416899; 246 color: #fff; 247 } 248 ul#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 14 include_once("modules/music/mp3act_functions.php"); 15 require_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"; 19 sajax_init(); 20 // list of functions to export 21 sajax_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"); 22 sajax_handle_client_request(); // serve client instances 23 24 require '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 <? 84 require 'modules/_shared/tmpl/'.tmpl.'/footer.php'; 85 ?> -
mythweb/modules/music/handler.php
Property changes on: mythweb/modules/music/mp3act_main.php ___________________________________________________________________ Name: svn:executable + *
13 13 * 14 14 /**/ 15 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 // 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="&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="&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 . "&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 . "&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 . "&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 // 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 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="&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="&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 . "&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 . "&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 . "&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 2 if (!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 2 function 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"> <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: </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 + " </select> <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 ******************************************/ 8 function pic_dir() 9 { 10 return 'http://'.$_SERVER['HTTP_HOST'].skin_url.'img/music/'; 11 } 12 13 function music_dir() 14 { 15 return 'http://'.$_SERVER['HTTP_HOST'].root."music/"; 16 } 17 18 function mp3act_connect() { 19 return 1; 20 } 21 22 function switchMode($mode){ 23 $_SESSION['sess_playmode'] = $mode; 24 return $mode; 25 } 26 27 function 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 35 function 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 62 function 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 78 function 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 89 function getDropDown($type, $id){ 90 $dropdown = ""; 91 return $dropdown; 92 } 93 94 function 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> » "; 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> » " . 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> » "; 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> » "; 148 break; 149 case 'all': 150 $parentoutput .= "<a class=music href=\"#\" onclick=\"updateBox('all','$parentitem'); return false;\">$parentitem</a> » "; 151 break; 152 153 } 154 if (isset($output)) { 155 return $output.$parentoutput.$childoutput; 156 } else { 157 return ''; 158 } 159 } 160 161 function 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 521 function 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 553 function 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 586 function 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 } 601 function 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 628 function clearPlaylist(){ 629 $query = "DELETE FROM music_playlist"; 630 mysql_query($query); 631 return "Playlist is empty"; 632 } 633 function 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 640 function 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 650 function 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 657 function 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 674 function 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 727 function 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 788 function 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 828 function 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 875 function 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 897 function 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 963 function 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 1007 function 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 1060 function 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 3 include("mp3act_functions.php"); 4 5 // Play the Music 6 if(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 + *
16 16 // First, we should check to see that MythMusic is configured. 17 17 // Make sure to turn off fatal errors in case the table isn't there. 18 18 $db->disable_fatal_errors(); 19 $has_music = $db->query_col('SELECT COUNT(*) FROM music metadata');19 $has_music = $db->query_col('SELECT COUNT(*) FROM music_songs'); 20 20 $db->enable_fatal_errors(); 21 21 $db->error(false); 22 22 -
mythweb/modules/music/mp3act_fat.js
1 var 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 2 include_once("modules/music/mp3act_functions.php"); 3 set_time_limit(0); 4 streamPlay($_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 + *
44 44 rating = rhs->Rating(); 45 45 lastplay = rhs->LastPlayStr(); 46 46 playcount = rhs->Playcount(); 47 bitrate = rhs->Bitrate(); 48 filesize = rhs->Filesize(); 47 49 compilation = rhs->Compilation(); 48 50 id = rhs->ID(); 49 51 filename = rhs->Filename(); … … 62 64 void Metadata::persist() 63 65 { 64 66 MSqlQuery query(MSqlQuery::InitCon()); 65 query.prepare("UPDATE music metadataset 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 ;"); 68 70 query.bindValue(":RATING", rating); 69 71 query.bindValue(":PLAYCOUNT", playcount); 70 72 query.bindValue(":LASTPLAY", lastplay); … … 98 100 QString sqlfilename = filename.remove(0, m_startdir.length()); 99 101 100 102 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 ));"); 104 113 query.bindValue(":FILENAME", sqlfilename.utf8()); 105 114 106 115 if (query.exec() && query.isActive() && query.size() > 0) … … 146 155 // Don't update the database if a song with the exact same 147 156 // metadata is already there 148 157 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 157 174 query.bindValue(":ARTIST", artist.utf8()); 158 175 query.bindValue(":COMPILATION_ARTIST", compilation_artist.utf8()); 159 176 query.bindValue(":ALBUM", album.utf8()); … … 167 184 if (query.exec() && query.isActive() && query.size() > 0) 168 185 return; 169 186 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 ) " 175 307 "VALUES " 176 "(:ARTIST, : COMPILATION_ARTIST,:ALBUM,:TITLE, "308 "(:ARTIST, :ALBUM, :COMPILATION_ARTIST, :TITLE, " 177 309 " :GENRE, :YEAR, :TRACKNUM, :LENGTH, " 178 310 " :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); 183 315 query.bindValue(":TITLE", title.utf8()); 184 query.bindValue(":GENRE", genre.utf8());316 query.bindValue(":GENRE", GenreID); 185 317 query.bindValue(":YEAR", year); 186 318 query.bindValue(":TRACKNUM", tracknum); 187 319 query.bindValue(":LENGTH", length); … … 190 322 query.bindValue(":DATE_ADDED", QDateTime::currentDateTime()); 191 323 query.bindValue(":DATE_MOD", QDateTime::currentDateTime()); 192 324 query.bindValue(":FORMAT", format); 325 query.bindValue(":FILESIZE", filesize); 326 query.bindValue(":BITRATE", bitrate); 193 327 328 194 329 query.exec(); 195 330 // cout << query.executedQuery() << endl; 196 331 // easiest way to ensure we've got 'id' filled. 197 332 fillData(); 198 333 } … … 341 476 342 477 MSqlQuery query(MSqlQuery::InitCon()); 343 478 344 query.prepare("UPDATE music metadata"479 query.prepare("UPDATE music_songs " 345 480 "SET artist = :ARTIST, " 346 481 " album = :ALBUM, " 347 482 " title = :TITLE, " … … 353 488 " compilation = :COMPILATION, " 354 489 " compilation_artist = :COMPILATION_ARTIST, " 355 490 " format = :FORMAT " 356 "WHERE intid = :ID;");491 "WHERE song_id = :ID;"); 357 492 query.bindValue(":ARTIST", artist.utf8()); 358 493 query.bindValue(":ALBUM", album.utf8()); 359 494 query.bindValue(":TITLE", title.utf8()); … … 427 562 if (title == "") 428 563 return; 429 564 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"; 433 577 434 578 if (album != "") 435 thequery += " AND album = :ALBUM";579 thequery += " AND album_name = :ALBUM"; 436 580 if (artist != "") 437 thequery += " AND artist = :ARTIST";581 thequery += " AND artist_name = :ARTIST"; 438 582 if (compilation_artist != "") 439 583 thequery += " AND compilation_artist = :COMPILATION_ARTIST"; 440 584 … … 478 622 return; 479 623 480 624 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 ));"); 484 637 query.bindValue(":ID", id); 485 638 486 639 if (query.exec() && query.isActive() && query.numRowsAffected() > 0) … … 491 644 artist = QString::fromUtf8(query.value(1).toString()); 492 645 compilation_artist = QString::fromUtf8(query.value(2).toString()); 493 646 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(); 505 657 506 658 if (!filename.contains("://")) 507 659 filename = m_startdir + filename; … … 644 796 void AllMusic::resync() 645 797 { 646 798 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;"; 652 804 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 653 818 QString filename, artist, album, title; 654 819 655 820 MSqlQuery query(MSqlQuery::InitCon()); … … 694 859 query.value(0).toInt(), 695 860 query.value(10).toInt(), 696 861 query.value(12).toInt(), 862 query.value(15).toInt(), //bitrate 863 query.value(16).toInt(), //filesize 697 864 query.value(11).toString(), 698 865 (query.value(13).toInt() > 0), 699 866 query.value(14).toString()); -
mythmusic/mythmusic/dbcheck.cpp
9 9 #include "mythtv/mythcontext.h" 10 10 #include "mythtv/mythdbcon.h" 11 11 12 const QString currentDatabaseVersion = "100 5";12 const QString currentDatabaseVersion = "1006"; 13 13 14 14 static void UpdateDBVersionNumber(const QString &newnumber) 15 15 { … … 323 323 324 324 performActualUpdate(updates, "1005", dbver); 325 325 } 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 } 326 349 } 327 350 -
mythmusic/mythmusic/metaioid3v2.h
23 23 24 24 private: 25 25 int getTrackLength(QString filename); 26 int getTrackBitRate(QString filename); 26 27 27 28 QString getRawID3String(union id3_field *pField); 28 29 void removeComment(id3_tag *pTag, const char* pLabel, const QString desc = ""); -
mythmusic/mythmusic/playlist.cpp
326 326 all_other_playlists->clear(); 327 327 328 328 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;"); 333 337 query.bindValue(":DEFAULT", "default_playlist_storage"); 334 338 query.bindValue(":BACKUP", "backup_playlist_storage"); 335 query.bindValue(":HOST", my_host);336 339 337 340 if (query.exec() && query.isActive() && query.size() > 0) 338 341 { … … 468 471 } 469 472 470 473 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);476 474 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 477 489 if (query.exec() && query.size() > 0) 478 490 { 479 491 while (query.next()) … … 498 510 void Playlist::loadPlaylistByID(int id, QString a_host) 499 511 { 500 512 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;"); 504 515 query.bindValue(":ID", id); 505 query.bindValue(":HOST", a_host);516 // query.bindValue(":HOST", a_host); 506 517 507 518 query.exec(); 508 519 … … 603 614 604 615 QString theQuery; 605 616 606 theQuery = "SELECT intid FROM musicmetadata";617 theQuery = "SELECT song_id FROM music_songs "; 607 618 608 619 if (whereClause.length() > 0) 609 620 theQuery += whereClause; … … 717 728 QString orderBy; 718 729 int limitTo; 719 730 720 query.prepare("SELECT smartplaylistid, matchtype, orderby, limitto "731 query.prepare("SELECT music_smartplaylistid, matchtype, orderby, limitto " 721 732 "FROM smartplaylist WHERE categoryid = :CATEGORYID AND name = :NAME;"); 722 733 query.bindValue(":NAME", name.utf8()); 723 734 query.bindValue(":CATEGORYID", categoryID); … … 748 759 QString whereClause = "WHERE "; 749 760 750 761 query.prepare("SELECT field, operator, value1, value2 " 751 "FROM smartplaylistitem WHERE smartplaylistid = :ID;");762 "FROM music_smartplaylistitem WHERE smartplaylistid = :ID;"); 752 763 query.bindValue(":ID", ID); 753 764 query.exec(); 754 765 if (query.isActive() && query.numRowsAffected() > 0) … … 787 798 return; 788 799 789 800 fillSonglistFromSongs(); 801 MSqlQuery query(MSqlQuery::InitCon()); 790 802 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 ;"); 793 821 query.bindValue(":ID", playlistid); 794 822 795 823 if (query.exec() && query.isActive() && query.size() > 0) 796 824 { 797 query.prepare("UPDATE music playlist 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 ;"); 799 827 query.bindValue(":LIST", raw_songlist); 800 828 query.bindValue(":NAME", a_name.utf8()); 829 query.bindValue(":SONGCOUNT", songcount); 830 query.bindValue(":PLAYTIME", playtime); 801 831 query.bindValue(":ID", playlistid); 802 832 } 803 833 else 804 834 { 805 query.prepare("INSERT INTO music playlist (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);"); 807 837 query.bindValue(":LIST", raw_songlist); 808 838 query.bindValue(":NAME", a_name.utf8()); 839 query.bindValue(":SONGCOUNT", songcount); 840 query.bindValue(":PLAYTIME", playtime); 809 841 } 810 842 811 843 query.exec(); … … 827 859 } 828 860 829 861 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 } 830 880 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);"); 834 883 query.bindValue(":NAME", name.utf8()); 835 884 query.bindValue(":HOST", a_host); 885 query.bindValue(":SONGCOUNT", songcount); 886 query.bindValue(":PLAYTIME", playtime); 836 887 837 888 query.exec(); 838 889 839 query.prepare("SELECT playlist id FROM musicplaylistWHERE "840 " name = :NAME AND hostname = :HOST;");890 query.prepare("SELECT playlist_id FROM music_saved_playlists WHERE " 891 "playlist_name = :NAME AND hostname = :HOST;"); 841 892 query.bindValue(":NAME", name.utf8()); 842 893 query.bindValue(":HOST", a_host); 843 894 … … 1210 1261 } 1211 1262 1212 1263 MSqlQuery query(MSqlQuery::InitCon()); 1213 query.prepare("DELETE FROM music playlist WHERE playlistid = :ID ;");1264 query.prepare("DELETE FROM music_saved_playlists WHERE playlist_id = :ID ;"); 1214 1265 query.bindValue(":ID", kill_me); 1215 1266 1216 1267 if (query.exec() || query.size() < 1) -
mythmusic/mythmusic/smartplaylist.cpp
33 33 static SmartPLField SmartPLFields[] = 34 34 { 35 35 { "", "", 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 }, 39 39 { "Genre", "genre", ftString, 0, 0, 0 }, 40 40 { "Year", "year", ftNumeric, 1900, 2099, 2000 }, 41 { "Track No.", "track num", ftNumeric, 0, 99, 0 },41 { "Track No.", "track", ftNumeric, 0, 99, 0 }, 42 42 { "Rating", "rating", ftNumeric, 0, 10, 0 }, 43 { "Play Count", " playcount", ftNumeric, 0, 9999, 0 },43 { "Play Count", "numplays", ftNumeric, 0, 9999, 0 }, 44 44 { "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 }, 46 46 { "Last Play", "FROM_DAYS(TO_DAYS(lastplay))", ftDate, 0, 0, 0 }, 47 47 { "Date Imported", "FROM_DAYS(TO_DAYS(date_added))", ftDate, 0, 0, 0 }, 48 48 }; … … 656 656 657 657 MSqlQuery query(MSqlQuery::InitCon()); 658 658 QString querystr; 659 querystr = QString("SELECT DISTINCT %1 FROM musicmetadataORDER 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); 660 660 661 661 query.exec(querystr); 662 662 if (query.isActive() && query.numRowsAffected()) … … 815 815 } 816 816 817 817 MSqlQuery query(MSqlQuery::InitCon()); 818 query.prepare("INSERT INTO smartplaylistitem (smartplaylistid, field, operator,"818 query.prepare("INSERT INTO music_smartplaylistitem (smartplaylistid, field, operator," 819 819 " value1, value2)" 820 820 "VALUES (:SMARTPLAYLISTID, :FIELD, :OPERATOR, :VALUE1, :VALUE2);"); 821 821 query.bindValue(":SMARTPLAYLISTID", smartPlaylistID); … … 1130 1130 { 1131 1131 bPlaylistIsValid = true; 1132 1132 1133 QString sql = "select count(*) from music metadata";1133 QString sql = "select count(*) from music_songs "; 1134 1134 sql += getWhereClause(); 1135 1135 1136 1136 MSqlQuery query(MSqlQuery::InitCon()); … … 1177 1177 1178 1178 MSqlQuery query(MSqlQuery::InitCon()); 1179 1179 // 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) " 1181 1181 "VALUES (:NAME, :CATEGORYID, :MATCHTYPE, :ORDERBY, :LIMIT);"); 1182 1182 query.bindValue(":NAME", name.utf8()); 1183 1183 query.bindValue(":CATEGORYID", categoryid); … … 1193 1193 1194 1194 // get smartplaylistid 1195 1195 int ID; 1196 query.prepare("SELECT smartplaylistid FROM smartplaylist "1196 query.prepare("SELECT smartplaylistid FROM music_smartplaylist " 1197 1197 "WHERE categoryid = :CATEGORYID AND name = :NAME;"); 1198 1198 query.bindValue(":CATEGORYID", categoryid); 1199 1199 query.bindValue(":NAME", name.utf8()); … … 1253 1253 int ID; 1254 1254 1255 1255 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;"); 1257 1257 query.bindValue(":NAME", name.utf8()); 1258 1258 query.bindValue(":CATEGORYID", categoryid); 1259 1259 if (query.exec()) … … 1285 1285 uint rowCount; 1286 1286 1287 1287 query.prepare("SELECT field, operator, value1, value2 " 1288 "FROM smartplaylistitem WHERE smartplaylistid = :ID "1288 "FROM music_smartplaylistitem WHERE smartplaylistid = :ID " 1289 1289 "ORDER BY smartplaylistitemid;"); 1290 1290 query.bindValue(":ID", ID); 1291 1291 if (!query.exec()) … … 1392 1392 // insert new smartplaylistcategory 1393 1393 1394 1394 MSqlQuery query(MSqlQuery::InitCon()); 1395 query.prepare("INSERT INTO smartplaylistcategory (name) "1395 query.prepare("INSERT INTO music_smartplaylistcategory (name) " 1396 1396 "VALUES (:NAME);"); 1397 1397 query.bindValue(":NAME", categoryEdit->text().utf8()); 1398 1398 … … 1438 1438 1439 1439 // change the category 1440 1440 MSqlQuery query(MSqlQuery::InitCon()); 1441 query.prepare("UPDATE smartplaylistcategory SET name = :NEW_CATEGORY "1441 query.prepare("UPDATE music_smartplaylistcategory SET name = :NEW_CATEGORY " 1442 1442 "WHERE name = :OLD_CATEGORY;"); 1443 1443 query.bindValue(":OLD_CATEGORY", categoryCombo->currentText().utf8()); 1444 1444 query.bindValue(":NEW_CATEGORY", categoryEdit->text().utf8()); … … 1459 1459 { 1460 1460 QString sql, whereClause, orderByClause, limitClause; 1461 1461 1462 sql = "SELECT " + fields + " FROM music metadata";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 "; 1463 1463 whereClause = getWhereClause(); 1464 1464 orderByClause = getOrderByClause(); 1465 1465 if (limitSpinEdit->value() > 0) … … 1506 1506 1507 1507 void SmartPlaylistEditor::showResultsClicked(void) 1508 1508 { 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"); 1510 1510 1511 1511 SmartPLResultViewer *resultViewer = new SmartPLResultViewer(gContext->GetMainWindow(), "resultviewer"); 1512 1512 resultViewer->setSQL(sql); … … 1535 1535 categoryCombo->clear(); 1536 1536 MSqlQuery query(MSqlQuery::InitCon()); 1537 1537 1538 if (query.exec("SELECT name FROM smartplaylistcategory ORDER BY name;"))1538 if (query.exec("SELECT name FROM music_smartplaylistcategory ORDER BY name;")) 1539 1539 { 1540 1540 if (query.isActive() && query.numRowsAffected() > 0) 1541 1541 { … … 1563 1563 1564 1564 // get playlist ID 1565 1565 int ID; 1566 query.prepare("SELECT smartplaylistid FROM smartplaylist WHERE name = :NAME "1566 query.prepare("SELECT smartplaylistid FROM music_smartplaylist WHERE name = :NAME " 1567 1567 "AND categoryid = :CATEGORYID;"); 1568 1568 query.bindValue(":NAME", name.utf8()); 1569 1569 query.bindValue(":CATEGORYID", categoryid); … … 1588 1588 } 1589 1589 1590 1590 //delete smartplaylist items 1591 query.prepare("DELETE FROM smartplaylistitem WHERE smartplaylistid = :ID;");1591 query.prepare("DELETE FROM music_smartplaylistitem WHERE smartplaylistid = :ID;"); 1592 1592 query.bindValue(":ID", ID); 1593 1593 if (!query.exec()) 1594 1594 MythContext::DBError("Delete smartplaylist items", query); 1595 1595 1596 1596 //delete smartplaylist 1597 query.prepare("DELETE FROM smartplaylist WHERE smartplaylistid = :ID;");1597 query.prepare("DELETE FROM music_smartplaylist WHERE smartplaylistid = :ID;"); 1598 1598 query.bindValue(":ID", ID); 1599 1599 if (!query.exec()) 1600 1600 MythContext::DBError("Delete smartplaylist", query); … … 1610 1610 MSqlQuery query(MSqlQuery::InitCon()); 1611 1611 1612 1612 //delete all smartplaylists with the selected category 1613 query.prepare("SELECT name FROM smartplaylist "1613 query.prepare("SELECT name FROM music_smartplaylist " 1614 1614 "WHERE categoryid = :CATEGORYID;"); 1615 1615 query.bindValue(":CATEGORYID", categoryid); 1616 1616 if (!query.exec()) … … 1629 1629 } 1630 1630 1631 1631 // delete the category 1632 query.prepare("DELETE FROM smartplaylistcategory WHERE categoryid = :ID;");1632 query.prepare("DELETE FROM music_smartplaylistcategory WHERE categoryid = :ID;"); 1633 1633 query.bindValue(":ID", categoryid); 1634 1634 if (!query.exec()) 1635 1635 MythContext::DBError("Delete smartplaylist category", query); … … 1642 1642 { 1643 1643 int ID; 1644 1644 MSqlQuery query(MSqlQuery::InitCon()); 1645 query.prepare("SELECT categoryid FROM smartplaylistcategory "1645 query.prepare("SELECT categoryid FROM music_smartplaylistcategory " 1646 1646 "WHERE name = :CATEGORY;"); 1647 1647 query.bindValue(":CATEGORY", category.utf8()); 1648 1648 … … 2023 2023 categoryCombo->clear(); 2024 2024 MSqlQuery query(MSqlQuery::InitCon()); 2025 2025 2026 if (query.exec("SELECT name FROM smartplaylistcategory ORDER BY name;"))2026 if (query.exec("SELECT name FROM music_smartplaylistcategory ORDER BY name;")) 2027 2027 { 2028 2028 if (query.isActive() && query.numRowsAffected() > 0) 2029 2029 { … … 2045 2045 listbox->clear(); 2046 2046 2047 2047 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 " 2049 2049 "ORDER BY name;"); 2050 2050 query.bindValue(":CATEGORYID", categoryid); 2051 2051 -
mythmusic/mythmusic/metadata.h
18 18 Metadata(QString lfilename = "", QString lartist = "", QString lcompilation_artist = "", 19 19 QString lalbum = "", QString ltitle = "", QString lgenre = "", 20 20 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 = "", 22 22 bool lcompilation = false, QString lformat="") 23 23 { 24 24 filename = lfilename; … … 35 35 id = lid; 36 36 rating = lrating; 37 37 playcount = lplaycount; 38 bitrate = lbitrate; 39 filesize = lfilesize; 38 40 lastplay = llastplay; 39 41 compilation = lcompilation; 40 42 changed = false; … … 59 61 rating = other.rating; 60 62 lastplay = other.lastplay; 61 63 playcount = other.playcount; 64 bitrate = other.bitrate; 65 filesize = other.filesize; 62 66 compilation = other.compilation; 63 67 show = other.show; 64 68 changed = false; … … 97 101 int Playcount() { return playcount; } 98 102 void setPlaycount(int lplaycount) { playcount = lplaycount; } 99 103 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 100 110 unsigned int ID() { return id; } 101 111 void setID(int lid) { id = lid; } 102 112 … … 158 168 int rating; 159 169 QString lastplay; 160 170 int playcount; 171 int bitrate; 172 int filesize; 161 173 bool compilation; 162 174 163 175 unsigned int id; -
mythmusic/mythmusic/main.cpp
76 76 { 77 77 Metadata *data = decoder->getMetadata(); 78 78 if (data) { 79 QFileInfo fi1( filename ); 80 data->setFilesize( fi1.size() ); 79 81 data->dumpToDatabase(); 80 82 delete data; 81 83 } … … 90 92 QString name(filename); 91 93 name.remove(0, directory.length()); 92 94 MSqlQuery query(MSqlQuery::InitCon()); 93 query.prepare("DELETE FROM music metadataWHERE "95 query.prepare("DELETE FROM music_songs WHERE " 94 96 "filename = :NAME ;"); 95 97 query.bindValue(":NAME", filename.utf8()); 96 98 query.exec(); … … 260 262 261 263 MSqlQuery query(MSqlQuery::InitCon()); 262 264 query.exec("SELECT filename, date_modified " 263 "FROM music metadata"265 "FROM music_songs " 264 266 "WHERE filename NOT LIKE ('%://%')"); 265 267 266 268 int counter = 0; … … 558 560 559 561 560 562 MSqlQuery count_query(MSqlQuery::InitCon()); 561 count_query.exec("SELECT COUNT(*) FROM music metadata;");563 count_query.exec("SELECT COUNT(*) FROM music_songs;"); 562 564 563 565 bool musicdata_exists = false; 564 566 if (count_query.isActive()) -
mythmusic/mythmusic/metaioid3v2.cpp
174 174 { 175 175 QString artist = "", compilation_artist = "", album = "", title = "", 176 176 genre = ""; 177 int year = 0, tracknum = 0, length = 0 ;177 int year = 0, tracknum = 0, length = 0, bitrate = 0; 178 178 bool compilation = false; 179 179 id3_file *p_input = NULL; 180 180 … … 251 251 } 252 252 253 253 length = getTrackLength(filename); 254 bitrate = getTrackBitRate(filename); 254 255 255 256 // If we don't have title and artist or don't have the length return NULL 256 257 if ((title.isEmpty() && artist.isEmpty()) || length<=0) … … 261 262 } 262 263 263 264 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); 265 267 266 268 retdata->setCompilation(compilation); 267 269 … … 378 380 return alt_length; 379 381 } 380 382 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 */ 390 int MetaIOID3v2::getTrackBitRate(QString filename) 391 { 392 struct mad_stream stream; 393 struct mad_header header; 394 mad_timer_t timer; 381 395 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 382 490 inline QString MetaIOID3v2::getRawID3String(union id3_field *pField) 383 491 { 384 492 QString tmp = "";