Ticket #1699: changes.3.3.patch
| File changes.3.3.patch, 161.3 KB (added by , 20 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("musicLookup","playlist_rem","playlist_add","playlistInfo","clearPlaylist","buildBreadcrumb","play","playlist_move","searchMusic","viewPlaylist","getDropDown","savePlaylist","getRandItems","randAdd","deletePlaylist"); 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"><?php echo t("Search"); ?></a></li> 53 <li><a href="#" id="browse" onclick="switchPage('browse'); return false;" title="Browse the Music Database" class="c"><?php echo t("Browse"); ?></a></li> 54 <li><a href="#" id="random" onclick="switchPage('random'); return false;" title="Create Random Mixes"><?php echo t("Random"); ?></a></li> 55 <li><a href="#" id="playlists" onclick="switchPage('playlists'); return false;" title="Load Saved Playlists"><?php echo t("Playlists"); ?></a></li> 56 <li><a href="#" id="stats" onclick="switchPage('stats'); return false;" title="View Server Statistics"><?php echo t("Stats"); ?></a></li> 57 </ul> 58 59 </div> 60 <div id="loading"><h1><?php echo t("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 setPageTitle(); 11 x_viewPlaylist(viewPlaylist_cb); 12 x_playlistInfo(plinfo_cb); 13 setPLTitle(); 14 setCurrentPage(); 15 updateBox(page,0); 16 } 17 function empty_cb(new_data){ 18 19 } 20 21 function setPageNav(){ 22 //document.getElementById("breadcrumb").innerHTML = prevpage; 23 } 24 25 function switchPage(newpage){ 26 prevpage = page; 27 page = newpage; 28 29 updateBox(page,0); 30 setPageTitle(); 31 setCurrentPage(); 32 //setPageNav(); 33 } 34 35 function setPLTitle(){ 36 document.getElementById("pl_title").innerHTML = " <? echo t("Playlist"); ?> "; 37 } 38 39 function viewPlaylist_cb(new_data){ 40 document.getElementById("playlist").innerHTML = new_data; 41 } 42 43 function setCurrentPage(){ 44 var x = document.getElementById('nav'); 45 var y = x.getElementsByTagName('a'); 46 for (var i=0;i<y.length;i++){ 47 y[i].removeAttribute("class"); 48 if(y[i].id == page) 49 y[i].setAttribute('class','c'); 50 } 51 } 52 53 function getDropDown(type,id){ 54 x_getDropDown(type,id,getDropDown_cb); 55 } 56 57 function getDropDown_cb(new_data){ 58 ul = document.getElementById("browse_ul"); 59 ul.innerHTML = new_data; 60 ul.style.display = 'block'; 61 } 62 63 function closeDropDown(){ 64 ul = document.getElementById("browse_ul"); 65 ul.style.display = 'none'; 66 ul.innerHTML = ''; 67 } 68 69 function savePL(type,data){ 70 if(type=='open'){ 71 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>"; 72 save_form = save_form + "<form onsubmit='return savePL(\"saveold\",this)' method='get' action=''><hr><strong>overwrite Playlist: </strong></ br><select name='overwrite_pl_name'>"; 73 <?php 74 $query = "SELECT playlist_name,hostname FROM music_saved_playlists;"; 75 $result = mysql_query($query); 76 while($row = mysql_fetch_array($result)){ 77 if ($row[1] == "") 78 echo "save_form = save_form + \"<option>".$row[playlist_name]."</option>\";"; 79 else 80 echo "save_form = save_form + \"<option>".$row[0]."@".$row[1]."</option>\";"; 81 } 82 ?> 83 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> "; 84 document.getElementById("box_extra").innerHTML = save_form; 85 document.getElementById("box_extra").style.display = 'block'; 86 } 87 else if(type=='save'){ 88 var pl_name = data.save_pl_name.value; 89 x_savePlaylist(pl_name,0,save_Playlist_cb); 90 91 return false; 92 } 93 else if(type=='saveold'){ 94 var ov_pl_name = data.overwrite_pl_name.value; 95 x_savePlaylist(ov_pl_name,1,save_Playlist_cb); 96 97 return false; 98 } 99 else if(type=='close') 100 document.getElementById("box_extra").style.display = 'none'; 101 } 102 103 function save_Playlist_cb(new_data){ 104 box = document.getElementById("box_extra"); 105 box.innerHTML = new_data; 106 setTimeout("box.style.display='none'","1250"); 107 } 108 109 function movePLItem(direction,item){ 110 var y; 111 var temp; 112 if(direction == "up") 113 y = item.previousSibling; 114 else if(direction == "down") 115 y = item.nextSibling; 116 117 if(y && y.nodeName == 'LI'){ 118 pl_move(y.id,item.id); 119 120 var temp = y.innerHTML; 121 y.innerHTML = item.innerHTML; 122 item.innerHTML = temp; 123 Fat.fade_element(y.id,null,900,'#ffcc99','#f3f3f3'); 124 } 125 } 126 127 function setBgcolor(id, c) 128 { 129 if(id != ('pl'+nowplaying)){ 130 var o = document.getElementById(id); 131 o.style.backgroundColor = c; 132 } 133 } 134 135 function setPageTitle(){ 136 var pages= new Array() 137 pages["browse"]="<?php echo t("Browse Music"); ?> "; 138 pages["search"]="<?php echo t("Search Music"); ?> "; 139 pages["random"]="<?php echo t("Create a Random Mix"); ?> "; 140 pages["playlists"]="<?php echo t("Load a Saved Playlist"); ?> "; 141 pages["stats"]="<?php echo t("Server Statistics"); ?> "; 142 document.getElementById("pagetitle").innerHTML = pages[page]; 143 144 } 145 146 function getRandItems(type){ 147 //document.getElementById("breadcrumb").innerHTML = ''; 148 document.getElementById("rand_items").innerHTML = ''; 149 x_getRandItems(type,getRandItems_cb); 150 } 151 152 function getRandItems_cb(new_data){ 153 document.getElementById("rand_items").innerHTML = new_data; 154 } 155 156 function updateBox_cb(new_data){ 157 document.getElementById("info").innerHTML = new_data; 158 document.getElementById("loading").style.display = 'none'; 159 160 if(clearbc==1) 161 breadcrumb(); 162 clearbc = 1; 163 164 } 165 166 function updateBox(type,itemid){ 167 document.getElementById("loading").style.display = 'block'; 168 x_musicLookup(type,itemid,updateBox_cb); 169 170 if(type == 'genre' || type == 'letter'){ 171 bc_parenttype = ''; 172 bc_parentitem = ''; 173 } 174 else if(type == 'album' || (type == 'artist' && bc_parenttype != '')){ 175 if(bc_childtype == 'all'){ 176 bc_parenttype = bc_childtype; 177 bc_parentitem = bc_childitem; 178 } 179 } 180 else if(type == 'browse' || type == 'search' || type == 'about' || type == 'prefs' || type == 'random' || type == 'admin' || type == 'playlists' || type == 'stats'){ 181 182 bc_parenttype = ''; 183 bc_parentitem = ''; 184 itemid=''; 185 type=''; 186 } 187 else{ 188 bc_parenttype = bc_childtype; 189 bc_parentitem = bc_childitem; 190 } 191 192 bc_childitem = itemid; 193 bc_childtype = type; 194 195 } 196 197 function deletePlaylist(id){ 198 if(confirm("Are you sure you want to DELETE THIS SAVED PLAYLIST?")){ 199 x_deletePlaylist(id,deletePlaylist_cb); 200 } 201 } 202 203 function deletePlaylist_cb(new_data){ 204 // reload saved PL page 205 clearbc = 0; 206 x_musicLookup('playlists',0,updateBox_cb); 207 setMsgText("Saved Playlist Successfully Deleted"); 208 } 209 210 function plrem(item){ 211 x_playlist_rem(item,plrem_cb); 212 } 213 214 function plrem_cb(rem){ 215 p = document.getElementById("playlist"); 216 d_nested = document.getElementById(rem); 217 throwaway_node = p.removeChild(d_nested); 218 x_playlistInfo(plinfo_cb); 219 } 220 221 function pladd(type,id){ 222 x_playlist_add(type,id,pladd_cb); 223 } 224 225 function pladd_cb(new_data){ 226 227 if(new_data[0] == 1){ 228 x_viewPlaylist(viewPlaylist_cb); 229 x_playlistInfo(plinfo_cb); 230 } 231 else{ 232 document.getElementById("playlist").innerHTML += new_data[0]; 233 234 for(var i=2; i<new_data[1]+2; i++){ 235 Fat.fade_element(new_data[i],null,1400,'#B4EAA2','#f3f3f3'); 236 } 237 x_playlistInfo(plinfo_cb); 238 } 239 } 240 241 function pl_move(item1,item2){ 242 x_playlist_move(item1,item2,pl_move_cb); 243 } 244 245 function pl_move_cb(){ 246 // do nothing 247 } 248 249 function plclear(){ 250 x_clearPlaylist(plinfo_cb); 251 document.getElementById("playlist").innerHTML = ""; 252 } 253 254 function plinfo_cb(new_data){ 255 document.getElementById("pl_info").innerHTML = new_data; 256 } 257 258 function breadcrumb(){ 259 x_buildBreadcrumb(page,bc_parenttype,bc_parentitem,bc_childtype,bc_childitem,breadcrumb_cb); 260 } 261 262 function breadcrumb_cb(new_data){ 263 //if(new_data!="") 264 document.getElementById("breadcrumb").innerHTML = new_data; 265 } 266 267 function play(type,id){ 268 document.getElementById('hidden').src = null; 269 document.getElementById("hidden").src = "<?php echo music_dir(); ?>mp3act_hidden.php?type="+type+"&id="+id; 270 } 271 272 function randAdd(data){ 273 var type = data.random_type.value; 274 if(type == ""){ 275 setMsgText("You must choose a random type"); 276 return false; 277 } 278 var num=0; 279 num = data.random_count.value; 280 var items =''; 281 if(type != 'all'){ 282 for(var i=0;i<data.random_items.options.length;i++){ 283 if(data.random_items.options[i].selected == true) 284 items += data.random_items.options[i].value+" "; 285 } 286 287 if(items == ""){ 288 setMsgText("You must choose at least one random item"); 289 return false; 290 } 291 } 292 x_randAdd(type,num,items,randadd_cb); 293 return false; 294 295 } 296 297 function randadd_cb(new_data){ 298 x_viewPlaylist(viewPlaylist_cb); 299 x_playlistInfo(plinfo_cb); 300 } 301 302 function play_cb(new_data){ 303 //refresh(); 304 } 305 306 function setMsgText(text){ 307 document.getElementById("breadcrumb").innerHTML = "<span class='error'>"+text+"</span>"; 308 Fat.fade_element('breadcrumb',null,2000,'#F5C2C2','#ffffff'); 309 } 310 311 function searchMusic(form){ 312 if(form.searchbox.value == '' || form.searchbox.value == '[<? echo t("enter your search terms"); ?>]'){ 313 setMsgText("You Must Enter Something to Search For"); 314 } 315 else{ 316 document.getElementById("breadcrumb").innerHTML = ""; 317 x_searchMusic(form.searchbox.value,form.search_options.value,updateBox_cb); 318 } 319 return false; 320 } 321 -
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 genreform(){ 19 $query = "SELECT * FROM music_genres ORDER BY genre"; 20 $result = mysql_query($query); 21 22 $output = "<select id=\"genre\" name=\"genre\" onchange=\"updateBox('genre',this.options[selectedIndex].value); return false;\"> 23 <option value=\"\" selected>".t("Choose Genre.."); 24 25 while($genre = mysql_fetch_array($result)){ 26 $output .= " <option value=\"$genre[genre]\">$genre[genre]\n"; 27 } 28 $output .= "</select>"; 29 30 return $output; 31 } 32 33 function letters(){ 34 $output = "<ul class=\"music\" id=\"letters\">"; 35 $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'); 36 37 foreach($letters as $letter){ 38 $output .= "<li><a class=music href=\"#\" onclick=\"updateBox('letter','$letter'); return false;\">".strtoupper($letter)."</a></li>\n"; 39 } 40 $output .= "</ul>"; 41 return $output; 42 } 43 44 function getDropDown($type, $id){ 45 $dropdown = ""; 46 return $dropdown; 47 } 48 49 function buildBreadcrumb($page,$parent,$parentitem,$child,$childitem){ 50 $childoutput=''; 51 $parentoutput =''; 52 if($page == 'browse' && $child != ''){ 53 $output = "<a class=music href=\"#\" onclick=\"updateBox('browse',0); return false;\">Browse</a> » "; 54 } 55 switch($child){ 56 case 'album': 57 $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"; 58 $result = mysql_query($query); 59 $row = mysql_fetch_array($result); 60 $albums = ''; 61 $query = "SELECT album_name,album_id FROM music_albums WHERE artist_id=$row[artist_id] ORDER BY album_name"; 62 $result = mysql_query($query); 63 while($row2 = mysql_fetch_array($result)){ 64 $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>"; 65 } 66 $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']); 67 break; 68 case 'artist': 69 $query = "SELECT artist_name FROM music_artists WHERE artist_id=$childitem"; 70 $result = mysql_query($query); 71 $row = mysql_fetch_array($result); 72 $albums = ''; 73 $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));"; 74 $result = mysql_query($query); 75 while($row2 = mysql_fetch_array($result)){ 76 $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>"; 77 } 78 $childoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('artist',$childitem); return false;\">$row[artist_name]</a><ul class=\"music\">$albums</ul></span>"; 79 break; 80 case 'letter': 81 $childoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('letter','$childitem'); return false;\">".strtoupper($childitem)."</a>".letters()."</span>"; 82 break; 83 case 'genre': 84 $childoutput .= $childitem; 85 break; 86 case 'all': 87 $childoutput .= $childitem; 88 break; 89 90 } 91 switch($parent){ 92 93 case 'letter': 94 $parentoutput .= "<span><a class=music href=\"#\" onclick=\"updateBox('letter','$parentitem'); return false;\">".strtoupper($parentitem)."</a>".letters()."</span> » "; 95 break; 96 case 'genre': 97 $query = "SELECT album_name FROM music_albums WHERE album_id=$childitem"; 98 $result = mysql_query($query); 99 $row = mysql_fetch_array($result); 100 $parentoutput .= "<a class=music href=\"#\" onclick=\"updateBox('genre','$parentitem'); return false;\">$parentitem</a> » "; 101 break; 102 case 'all': 103 $parentoutput .= "<a class=music href=\"#\" onclick=\"updateBox('all','$parentitem'); return false;\">$parentitem</a> » "; 104 break; 105 106 } 107 if (isset($output)) { 108 return $output.$parentoutput.$childoutput; 109 } else { 110 return ''; 111 } 112 } 113 114 function musicLookup($type,$itemid){ 115 switch($type){ 116 case 'browse': 117 $output = "<div class=\"head\">"; 118 $output .= "<h2 class=music>".t("Browse the Music Database")."</h2></div>"; 119 $output .= "<p>"; 120 $output .= "<strong>".t("By Artist Beginning With")."</strong><br/>".letters()."<br/></p>\n"; 121 $output .= "<p><strong>".t("By Genre")."</strong><br/>\n"; 122 $output .= genreForm()."<br/><br/>\n"; 123 $output .= "<input type='button' value='".t("Browse All Albums")."' onclick=\"updateBox('all','All'); return false;\" class='btn2' />\n"; 124 $output .= "</p>\n"; 125 126 break; 127 case 'search': 128 $output = "<div class=\"head\">"; 129 $output .= "<h2 class=music>".t("Search the Music Database")."</h2></div>"; 130 $output .= "<form onsubmit='return searchMusic(this)' method='get' action=''>\n"; 131 $output .= "<p> 132 <strong>".t("Keywords")."</strong><br/> 133 <input type='text' onfocus='this.select()' name='searchbox' size='35' id='searchbox' value='[".t("enter your search terms")."]' /> 134 <br/><br/> 135 <strong>".t("Narrow Your Search")."</strong> 136 <br/> 137 <select name='search_options' size='1'> 138 <option value='all'>".t("All Fields")."</option> 139 <option value='artists'>".t("Artists")."</option> 140 <option value='albums'>".t("Albums")."</option> 141 <option value='songs'>".t("Songs")."</option> 142 </select><br/><br/> 143 <input type='submit' value='".t("submit search")."' class='btn' /></form>"; 144 $output .= "</p>\n"; 145 146 break; 147 case 'letter': 148 if($itemid == "#"){ 149 $query = "SELECT * FROM music_artists 150 WHERE artist_name 151 LIKE '0%' 152 OR artist_name LIKE '1%' 153 OR artist_name LIKE '2%' 154 OR artist_name LIKE '3%' 155 OR artist_name LIKE '4%' 156 OR artist_name LIKE '5%' 157 OR artist_name LIKE '6%' 158 OR artist_name LIKE '7%' 159 OR artist_name LIKE '8%' 160 OR artist_name LIKE '9%' 161 ORDER BY artist_name"; 162 }else{ 163 $query = "SELECT * FROM music_artists 164 WHERE artist_name LIKE '$itemid%' 165 ORDER BY artist_name"; 166 } 167 $result = mysql_query($query); 168 $output = "<div class=\"head\">"; 169 $output .= "<h2 class=music>".t("Artists Beginning with")." '".strtoupper($itemid)."'</h2></div>"; 170 $output .= "<p> 171 <strong>".t("Artist Listing")."</strong></p> 172 <ul class=\"music\">"; 173 $count =1; 174 while($row = mysql_fetch_array($result)){ 175 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 176 $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"; 177 $count++; 178 } 179 $output .= "</ul>\n"; 180 181 break; 182 183 case 'all': 184 $output = "<div class=\"head\">"; 185 $output .= "<h2 class=music>".t("All Albums")."</h2></div> "; 186 $output .= "<p> 187 <strong>".t("Album Listing")."</strong></p> 188 <ul class=\"music\">"; 189 $start = $itemid; 190 $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"; 191 $result = mysql_query($query); 192 $count = 1; 193 while($row = mysql_fetch_array($result)){ 194 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 195 $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"; 196 197 $count++; 198 } 199 $output .= "</ul>\n"; 200 break; 201 202 case 'album': 203 $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));"; 204 $result = mysql_query($query); 205 $row = mysql_fetch_array($result); 206 207 $album_art=''; 208 209 210 if($row['album_art'] == ""){ 211 $row['album_art'] = art_insert($row['album_id'],$row['artist_name'],$row['album_name']); 212 if($row['album_art'] != ''){ 213 $album_art = "<img onmouseover=\"showAlbumArt('block'); return false;\" onmouseout=\"showAlbumArt('none'); return false;\" src=\"art/$row[album_art]\" />\n"; 214 } 215 }elseif($row['album_art'] != "fail"){ 216 $album_art = "<img onmouseover=\"showAlbumArt('block'); return false;\" onmouseout=\"showAlbumArt('none'); return false;\" src=\"art/$row[album_art]\" />\n"; 217 } 218 $output = "<div class=\"head\">"; 219 $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>"; 220 $output .= "<h2 class=music>".$row['album_name']."</h2></div>"; 221 $output .= "<p>$album_art\n"; 222 $output .= " <strong>".t("Tracks").":</strong> $row[tracks]<br/>\n"; 223 $output .= (($row['album_year'] != 0) ? ("<strong>".t("Year").":</strong> " . $row['album_year'] . "<br/>\n") : ("")); 224 $output .= " <strong>".t("Play Time").":</strong> $row[time]\n"; 225 $output .= " <br/><br/>\n"; 226 $output .= " <strong>".t("Album Tracks")."</strong></p>\n"; 227 $output .= "<ul class=\"music\">\n"; 228 $output .= "<img id='bigart' src=\"art/$row[album_art]\" />\n"; 229 $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"; 230 $result = mysql_query($query); 231 $count=1; 232 while($row = mysql_fetch_array($result)){ 233 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 234 $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"; 235 $count++; 236 } 237 238 $output .= "</ul>\n"; 239 break; 240 case 'genre': 241 242 $output = "<div class=\"head\">"; 243 $output .= "<h2 class=\"music\">".t("Songs for Genre")." '$itemid'</h2></div>"; 244 $output .= "<p> 245 <strong>".t("Songs")."</strong></p> 246 <ul class=\"music\">"; 247 248 $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';"; 249 250 $result = mysql_query($query); 251 $count=1; 252 while($row = mysql_fetch_array($result)){ 253 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 254 $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"; 255 $count++; 256 } 257 $output .= "</ul>\n"; 258 break; 259 case 'artist': 260 $query = "SELECT artist_id,artist_name FROM music_artists WHERE artist_id=$itemid"; 261 $result = mysql_query($query); 262 $row = mysql_fetch_array($result); 263 264 265 $artist = $row[artist_name]; 266 267 $output = "<div class=\"head\">"; 268 $output .= "<h2 class=\"music\">$row[artist_name] </h2></div>"; 269 $output .= "<p>\n"; 270 $output .= "<strong>".t("Songs")."</strong></p>\n"; 271 $output .= "<ul class=\"music\">\n"; 272 273 $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;"; 274 $result = mysql_query($query); 275 $count=1; 276 while($row = mysql_fetch_array($result)){ 277 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 278 $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"; 279 $count++; 280 } 281 $output .= "</ul><br />\n"; 282 283 $output .= "<p>\n"; 284 $output .= "<strong>".t("Album's with songs from")." <i>$artist</i></strong></p>\n"; 285 $output .= "<ul class=\"music\">\n"; 286 287 $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));"; 288 289 //$query = "SELECT music_albums.* FROM music_albums WHERE music_albums.artist_id=$itemid ORDER BY music_albums.album_name"; 290 $result = mysql_query($query); 291 $count=1; 292 while($row = mysql_fetch_array($result)){ 293 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 294 $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"; 295 $count++; 296 } 297 $output .= "</ul>\n"; 298 break; 299 case 'random': 300 $output = "<div class=\"head\">"; 301 $output .= "<h2 class=\"music\">".t("Random Mix Maker")."</h2></div>"; 302 $output .= "<form onsubmit='return randAdd(this)' method='get' action=''>\n<p>"; 303 $output .= "<strong>".t("Number of Songs")."</strong><br/>\n 304 <select name='random_count'> 305 <option value=10>10 </option> 306 <option value=20>20 </option> 307 <option value=30>30 </option> 308 <option value=40>40 </option> 309 <option value=50>50 </option> 310 </select><br/>\n"; 311 $output .= "<strong>".t("Random Type")."</strong><br/>\n 312 <select name='random_type' onchange=\"getRandItems(this.options[selectedIndex].value); return false;\" > 313 <option value='' >".t("Choose Type")."...</option> 314 <option value='artists' >".t("Artists")."</option> 315 <option value='genre' >".t("Genre")."</option> 316 <option value='albums' >".t("Albums")."</option> 317 <option value='all' >".t("Everything")."</option> 318 </select><br/>\n"; 319 $output .= "<strong>".t("Random Items")."</strong>\n<span id='rand_items'></span> 320 <br/><br/>"; 321 $output .= "<input type='submit' value='".t("add mix")."' class='btn' />"; 322 $output .= "</form></p>\n"; 323 break; 324 case 'playlists': 325 $query = "SELECT *,SEC_TO_TIME(time) AS time2 FROM music_saved_playlists"; 326 $result = mysql_query($query); 327 328 $output = "<div class=\"head\">"; 329 $output .= "<h2 class=\"music\">".t("Saved Playlists")."</h2></div><br />"; 330 $output .= "<ul class=\"music\">\n"; 331 if(mysql_num_rows($result) == 0) 332 $output .= t("No Public Playlists"); 333 while ($row = mysql_fetch_array($result)){ 334 if ($row["hostname"] == "") 335 $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>"; 336 else 337 $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>"; 338 } 339 $output .= "</ul>\n"; 340 break; 341 case 'saved_pl': 342 $query = "SELECT *,SEC_TO_TIME(time) AS time2 FROM music_saved_playlists WHERE playlist_id=$itemid"; 343 $result = mysql_query($query); 344 $row = mysql_fetch_array($result); 345 $output = "<div class=\"head\">"; 346 $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"pladd('playlist',$row[playlist_id]); return false;\" title=\"Load Playlist\">load playlist</a></div>"; 347 348 $output .= "<h2 class=\"music\">".t("View Saved Playlist")."</h2></div>"; 349 $output .= "<p><strong>".t("Playlist Info")."</strong><br/>$row[songcount] ".t("Songs")."<br/>$row[time2]</p>\n"; 350 $output .= "<p><strong>".t("Playlist Songs")."</strong></p>\n"; 351 $output .= "<ul class=\"music\">\n"; 352 $songs = explode(",",$row['playlist_songs']); 353 354 if (strlen($row['playlist_songs']) != 0) 355 { 356 $count = 0; 357 foreach($songs as $song){ 358 $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"; 359 $result = mysql_query($query); 360 $row = mysql_fetch_array($result); 361 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 362 $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"; 363 $count++; 364 } 365 } 366 else 367 $output = " <b>".t("There are no songs in this Playlist!")."</b>"; 368 $output .= "</ul>\n"; 369 370 break; 371 case 'stats': 372 $query = "SELECT * FROM music_stats"; 373 $result = mysql_query($query); 374 $row = mysql_fetch_array($result); 375 $query = "SELECT COUNT(play_id) AS songs FROM music_playhistory"; 376 $result = mysql_query($query); 377 $row3 = mysql_fetch_array($result); 378 379 $output = "<div class=\"head\">"; 380 $output .= "<h2 class=\"music\">".t("Server Statistics")."</h2></div>"; 381 $output .= "<p>\n"; 382 $output .= "<a class=music href='#' onclick=\"updateBox('recentadd',0); return false;\" >".t("Recently Added Albums")."</a><br/>"; 383 $output .= "<a class=music href='#' onclick=\"updateBox('recentplay',0); return false;\" >".t("Recently Played Songs")."</a><br/>"; 384 $output .= "<a class=music href='#' onclick=\"updateBox('topplay',0); return false;\" >".t("Top Played Songs")."</a><br/>"; 385 386 387 $output .= "</p>\n"; 388 $output .= "<h3>".t("Local Server Statistics")."</h3>\n"; 389 $result = mysql_query("SELECT song_id from music_songs;"); 390 $output .= "<p><strong>".t("Songs").":</strong> ". mysql_num_rows($result)."<br/>\n"; 391 $result = mysql_query("SELECT album_id from music_albums;"); 392 $output .= "<strong>".t("Albums").":</strong> ". mysql_num_rows($result)."<br/>\n"; 393 $result = mysql_query("SELECT artist_id from music_artists;"); 394 $output .= "<strong>".t("Artists").":</strong> ". mysql_num_rows($result)."<br/>\n"; 395 $result = mysql_query("SELECT genre_id from music_genres;"); 396 $output .= "<strong>".t("Genres").":</strong> ". mysql_num_rows($result)."<br/><br/>\n"; 397 $output .= "<strong>".t("Songs Played").":</strong> $row3[songs]<br/></p>\n"; 398 399 break; 400 case 'recentadd': 401 $query = "SELECT music_albums.album_name,music_albums.album_id, 402 music_artists.artist_name, 403 DATE_FORMAT(music_songs.date_entered,'%m.%d.%Y') as pubdate 404 FROM music_songs,music_albums,music_artists 405 WHERE music_songs.album_id=music_albums.album_id 406 AND music_artists.artist_id=music_songs.artist_id 407 GROUP BY music_songs.album_id ORDER BY music_songs.date_entered DESC LIMIT 40"; 408 $result = mysql_query($query); 409 410 $output = "<div class=\"head\">"; 411 $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"Return to Statistics Page\">back</a></div>"; 412 $output .= "<h2 class=\"music\">".t("Recently Added Albums")."</h2></div><ul class=\"music\">"; 413 $count=1; 414 while($row = mysql_fetch_array($result)){ 415 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 416 $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>"; 417 $count++; 418 } 419 $output .= "</ul>"; 420 421 422 break; 423 case 'topplay': 424 $query = "SELECT music_albums.album_name, music_songs.numplays, music_songs.name, 425 music_artists.artist_name,music_songs.song_id 426 FROM music_songs,music_albums,music_artists 427 WHERE music_songs.album_id=music_albums.album_id 428 AND music_artists.artist_id=music_songs.artist_id 429 AND music_songs.numplays > 0 430 ORDER BY music_songs.numplays DESC LIMIT 40"; 431 $result = mysql_query($query); 432 433 $output = "<div class=\"head\">"; 434 $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"".t("Return to Statistics Page")."\">".t("back")."</a></div>"; 435 $output .= "<h2 class=\"music\">".t("Top Played Songs")."</h2></div><ul class=\"music\">"; 436 $count=1; 437 while($row = mysql_fetch_array($result)){ 438 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 439 $output .= "<li $alt><small>$row[numplays] ".t("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>"; 440 $count++; 441 } 442 $output .= "</ul>"; 443 break; 444 case 'recentplay': 445 $query = "SELECT music_songs.name, music_songs.song_id, 446 music_artists.artist_name, 447 DATE_FORMAT(music_playhistory.date_played,'%m.%d.%Y') as playdate 448 FROM music_songs,music_artists,music_playhistory 449 WHERE music_songs.song_id=music_playhistory.song_id 450 AND music_artists.artist_id=music_songs.artist_id 451 ORDER BY music_playhistory.play_id DESC LIMIT 40"; 452 $result = mysql_query($query); 453 454 $output = "<div class=\"head\">"; 455 $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('stats'); return false;\" title=\"Return to Statistics Page\">back</a></div>"; 456 $output .= "<h2 class=\"music\">Recently Played Songs</h2></div><ul class=\"music\">"; 457 $count=1; 458 while($row = mysql_fetch_array($result)){ 459 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 460 $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>"; 461 $count++; 462 } 463 $output .= "</ul>"; 464 465 466 break; 467 } 468 469 return $output; 470 471 } 472 473 function getRandItems($type){ 474 $options = ''; 475 switch($type){ 476 case 'artists': 477 $query = "SELECT * FROM music_artists ORDER BY artist_name"; 478 $result = mysql_query($query); 479 while($row = mysql_fetch_array($result)){ 480 $options .= "<option value=$row[artist_id]>$row[artist_name]</option>\n"; 481 } 482 break; 483 case 'genre': 484 $query = "SELECT genre_id,genre FROM music_genres ORDER BY genre"; 485 $result = mysql_query($query); 486 while($row = mysql_fetch_array($result)){ 487 $options .= "<option value=$row[genre_id]>$row[genre]</option>\n"; 488 } 489 break; 490 case 'albums': 491 $query = "SELECT music_albums.album_id,music_albums.album_name FROM music_albums ORDER BY album_name"; 492 $result = mysql_query($query); 493 while($row = mysql_fetch_array($result)){ 494 $options .= "<option value=$row[album_id]>$row[album_name]</option>\n"; 495 } 496 break; 497 case 'all': 498 return "<br/>".t("All Songs"); 499 break; 500 } 501 502 return "<select name='random_items' multiple size='12' style='width: 90%;'>$options</select>"; 503 } 504 505 function searchMusic($terms,$option){ 506 $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 507 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 "; 508 if($option == 'all') 509 $query .= "(music_songs.name LIKE '%$terms%' OR music_artists.artist_name LIKE '%$terms%' OR music_albums.album_name LIKE '%$terms%')"; 510 elseif($option == 'artists') 511 $query .= "(music_artists.artist_name LIKE '%$terms%')"; 512 elseif($option == 'albums') 513 $query .= "(music_albums.album_name LIKE '%$terms%')"; 514 elseif($option == 'songs') 515 $query .= "(music_songs.name LIKE '%$terms%')"; 516 517 $query .= " ORDER BY music_artists.artist_name,music_albums.album_name,music_songs.track"; 518 519 $result = mysql_query($query); 520 $count = mysql_num_rows($result); 521 522 $output = "<div class=\"head\">"; 523 $output .= "<div class=\"right\"><a class=music href=\"#\" onclick=\"switchPage('search'); return false;\" title=\"Begin a New Search\">new search</a></div>"; 524 $output .= "<h2 class=\"music\">".t("Found")." $count ".t("Results for")." '$terms'</h2></div>"; 525 $output .= "<ul class=\"music\">\n"; 526 if($count>0){ 527 $count=1; 528 while($row = mysql_fetch_array($result)){ 529 ($count%2 == 0 ? $alt = "class=\"alt\"" : $alt = ''); 530 $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"; 531 $count++; 532 } 533 } 534 $output .= "</ul>\n"; 535 return $output; 536 } 537 538 function viewPlaylist(){ 539 $output = ''; 540 $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"; 541 542 $result=mysql_query($query); 543 544 while($row = mysql_fetch_array($result)){ 545 $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>"; 546 } 547 if (isset($output)) { 548 return $output; 549 } else { 550 return ''; 551 } 552 } 553 function savePlaylist($pl_name, $newpl){ 554 555 $songs = array(); 556 $time=0; 557 $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"; 558 $result = mysql_query($query); 559 while($row = mysql_fetch_array($result)){ 560 $songs[] = $row['song_id']; 561 $time += $row['length']; 562 } 563 $songslist = implode(",",$songs); 564 if ($newpl == 0) 565 { 566 $query = "INSERT INTO music_saved_playlists (playlist_name, playlist_songs, date_created, time, songcount) VALUES (\"$pl_name\",\"$songslist\",NOW(),$time,".count($songs).")"; 567 mysql_query($query); 568 return "<h2 class=\"music\">Playlist Saved as '".$pl_name."'</h2>"; 569 } 570 else 571 { 572 $arr = explode("@",$pl_name); 573 $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]."\""; 574 mysql_query($query); 575 return "<h2 class=\"music\">Playlist '".$pl_name."' has been updated</h2>"; 576 } 577 578 } 579 580 function clearPlaylist(){ 581 $query = "DELETE FROM music_playlist"; 582 mysql_query($query); 583 return "Playlist is empty"; 584 } 585 function deletePlaylist($id){ 586 $query = "DELETE FROM music_saved_playlists WHERE playlist_id=$id"; 587 mysql_query($query); 588 return 1; 589 } 590 591 function playlistInfo(){ 592 $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"; 593 $result = mysql_query($query); 594 $row = mysql_fetch_array($result); 595 if($row['count'] == 0){ 596 return "Playlist is empty"; 597 } 598 return "$row[count] Songs - $row[time]"; 599 } 600 601 function playlist_rem($itemid){ 602 $id = substr($itemid, 2); 603 $query = "DELETE FROM music_playlist WHERE pl_id=$id"; 604 mysql_query($query); 605 return $itemid; 606 } 607 608 function playlist_move($item1,$item2){ 609 $item1 = substr($item1, 2); 610 $item2 = substr($item2, 2); 611 $row = array(); 612 $query = "SELECT pl_id,song_id FROM music_playlist WHERE pl_id=$item1 OR pl_id=$item2"; 613 $result = mysql_query($query); 614 while($row[] = mysql_fetch_array($result)){ 615 616 } 617 $query = "UPDATE music_playlist SET song_id=" . $row[0]['song_id'] . " WHERE pl_id=" . $row[1]['pl_id']; 618 mysql_query($query); 619 $query = "UPDATE music_playlist SET song_id=" . $row[1]['song_id'] . " WHERE pl_id=" . $row[0]['pl_id']; 620 621 mysql_query($query); 622 } 623 624 function playlist_add($type,$itemid){ 625 626 switch($type){ 627 case 'song': 628 $query = "INSERT INTO music_playlist (song_id) VALUES (N$itemid)"; 629 mysql_query($query); 630 $id = mysql_insert_id(); 631 $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"; 632 $result = mysql_query($query); 633 $row = mysql_fetch_array($result); 634 635 $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>"; 636 $output[] = 1; 637 $output[] = 'pl'.$id; 638 return $output; 639 break; 640 case 'album': 641 $items=''; 642 $output = array(); 643 $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"; 644 $result = mysql_query($query); 645 while($row = mysql_fetch_array($result)){ 646 $query = "INSERT INTO music_playlist (song_id) VALUES(" . $row['song_id'] . ")"; 647 mysql_query($query); 648 $id = mysql_insert_id(); 649 $output[] = 'pl'.$id; 650 $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>"; 651 } 652 $text[] = $items; 653 $num[] = count($output); 654 $text = array_merge($text,$num); 655 $output = array_merge($text,$output); 656 return $output; 657 658 break; 659 case 'playlist': 660 clearPlaylist(); 661 $query = "SELECT * FROM music_saved_playlists WHERE playlist_id=$itemid LIMIT 1"; 662 $result = mysql_query($query); 663 $row = mysql_fetch_array($result); 664 $songs = explode(",",$row['playlist_songs']); 665 666 foreach($songs as $song){ 667 $query = "INSERT INTO music_playlist (song_id) VALUES($song)"; 668 mysql_query($query); 669 } 670 $output[0] = 1; 671 return $output; 672 673 break; 674 } 675 } 676 677 function randAdd($type,$num=0,$items){ 678 $tmp = ''; 679 $query = ''; 680 $items2 = explode(" ",trim($items)); 681 $items = ''; 682 $output = ''; 683 684 switch($type){ 685 case 'artists': 686 foreach($items2 as $item){ 687 $items .= " artist_id=$item OR"; 688 } 689 $items = preg_replace("/OR$/","",$items); 690 $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num"; 691 $result = mysql_query($query); 692 while($row = @mysql_fetch_array($result)){ 693 $query = "INSERT into music_playlist (song_id) values($row[song_id])"; 694 mysql_query($query); 695 } 696 $output[0] = 1; 697 break; 698 case 'genre': 699 foreach($items2 as $item){ 700 $items .= " genre_id=$item OR"; 701 } 702 $items = preg_replace("/OR$/","",$items); 703 $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num"; 704 $result = mysql_query($query); 705 while($row = @mysql_fetch_array($result)){ 706 $query = "INSERT into music_playlist (song_id) values($row[song_id])"; 707 mysql_query($query); 708 } 709 $output[0] = 1; 710 break; 711 case 'albums': 712 foreach($items2 as $item){ 713 $items .= " album_id=$item OR"; 714 } 715 $items = preg_replace("/OR$/","",$items); 716 $query = "SELECT music_songs.song_id FROM music_songs WHERE (".$items.") ORDER BY rand()+0 LIMIT $num"; 717 $result = mysql_query($query); 718 while($row = @mysql_fetch_array($result)){ 719 $query = "INSERT into music_playlist (song_id) values($row[song_id])"; 720 mysql_query($query); 721 } 722 $output[0] = 1; 723 break; 724 case 'all': 725 $query = "SELECT music_songs.song_id FROM music_songs ORDER BY rand()+0 LIMIT $num"; 726 $result = mysql_query($query); 727 while($row = @mysql_fetch_array($result)){ 728 $query = "INSERT into music_playlist (song_id) values($row[song_id])"; 729 mysql_query($query); 730 } 731 $output[0] = 1; 732 break; 733 } 734 735 return $output; 736 } 737 738 function play($type,$id){ 739 $tmp = ''; 740 $query = ''; 741 742 session_cache_limiter('nocache'); 743 header("Content-Type: audio/mpegurl;"); 744 header("Content-Disposition: inline; filename=\"playlist.m3u\""); 745 header("Expires: 0"); 746 header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 747 header("Pragma: nocache"); 748 $tmp .= "#EXTM3U\n"; 749 750 if($type=='song'){ 751 $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"; 752 } 753 elseif($type=='album'){ 754 $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"; 755 } 756 elseif($type=='pl'){ 757 $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"; 758 } 759 760 $result = mysql_query($query); 761 while($row = mysql_fetch_array($result)){ 762 $length = $row['length']; 763 /*if($GLOBALS[sample_mode] == 1){ 764 $length = floor($row['length']/4); 765 }*/ 766 $tmp .= "#EXTINF:$length,$row[artist_name] - $row[name]\n"; 767 $tmp .= music_dir()."mp3act_playstream.php?i=$row[song_id]\n"; 768 } 769 return $tmp; 770 exit; 771 } 772 773 /* 774 function download($album){ 775 $query = "SELECT music_songs.filename, 776 music_artists.artist_name, 777 music_albums.album_name 778 FROM music_songs,music_artists,music_albums 779 WHERE music_songs.album_id=$album 780 AND music_songs.album_id=music_albums.album_id 781 AND music_songs.artist_id=music_artists.artist_id LIMIT 1"; 782 783 $result = mysql_query($query); 784 $row = mysql_fetch_array($result); 785 $dir = dirname($row['filename']); 786 787 $test = new zip_file("/tmp/album_$album.zip"); 788 $test->set_options(array('inmemory'=>0,'storepaths'=>0,'level'=>0,'method'=>0,'prepend'=>"$row[artist_name] - $row[album_name]")); 789 $test->add_files($dir); 790 791 $test->store_files($dir); 792 $test->create_archive(); 793 794 header("Content-type:application/zip"); 795 796 $header = "Content-disposition: attachment; filename=\""; 797 $header .= "album_$album.zip"; 798 $header .= "\""; 799 header($header); 800 header("Content-length: " . filesize("/tmp/album_$album.zip")); 801 header("Content-transfer-encoding: binary"); 802 header("Pragma: no-cache"); 803 header("Expires: 0"); 804 $chunksize = 1*(1024*1024); // how many bytes per chunk 805 $buffer = ''; 806 $handle = fopen("/tmp/album_$album.zip", 'rb'); 807 if ($handle === false) { 808 return false; 809 } 810 while (!feof($handle)) { 811 $buffer = fread($handle, $chunksize); 812 print $buffer; 813 } 814 fclose($handle); 815 //readfile("/tmp/album_$album.zip"); 816 unlink("/tmp/album_$album.zip"); 817 //$test->download_file(); 818 }*/ 819 820 function updateNumPlays($num){ 821 $query = "UPDATE music_songs SET numplays=numplays+1"; 822 $query .= " WHERE song_id=$num"; 823 mysql_query($query); 824 825 $query = "INSERT INTO music_playhistory VALUES (NULL,$num,NOW())"; 826 mysql_query($query); 827 } 828 829 function streamPlay($id){ 830 $query = "SELECT music_artists.artist_name, 831 music_songs.name, 832 music_songs.bitrate, 833 music_songs.length as length, 834 music_songs.filename as filename, 835 music_songs.size as size 836 FROM music_songs,music_artists 837 WHERE music_songs.song_id=$id 838 AND music_artists.artist_id=music_songs.artist_id"; 839 840 $result=mysql_query($query); 841 $row = mysql_fetch_array($result); 842 updateNumPlays($id); 843 clearstatcache(); // flush buffer 844 845 $file['name'] = basename($row['filename']); 846 $mp3out = stripslashes($row['filename']); 847 848 $size=$row['size']; 849 850 header("Content-Type: audio/mpeg"); 851 header("Content-Length: $size"); 852 header("Content-Disposition: filename=$row[artist_name] - $row[name]"); 853 $bitrate = $row[$bitrate] / 1000; 854 // Run the command, and read back the results at the bitrate size + 1K. 855 $blocksize=($bitrate*1024)+1024; 856 $totaldata=0; 857 /*if($rate!=0 && $mode==1){ 858 $temp = @popen($mp3out, "r"); 859 while (($data = @fread($temp, $blocksize )) && ($totaldata <= $size ) ) 860 {echo $data; $totaldata+=$blocksize; } 861 pclose($temp); 862 } 863 elseif($rate!=0 ){ 864 $temp = @popen($mp3out, "r"); 865 while ($data = @fread($temp, $blocksize) ) 866 {echo $data; } 867 pclose($temp); 868 } 869 elseif($mode==1 ){*/ 870 $temp = fopen($mp3out, "r"); 871 while (!feof($temp) && ($totaldata <= $size ) ) 872 {$data = @fread($temp, $blocksize); echo $data; $totaldata+=$blocksize; } 873 fclose($temp); 874 /*} 875 else{ 876 $temp = @fopen($mp3out, "r"); 877 while (!feof($temp) ) 878 {$data = @fread($temp, $blocksize); echo $data; } 879 fclose($temp); 880 //}*/ 881 exit; 882 } 883 ?> 884 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 echo play($_GET['type'],$_GET['id']); 7 ?> -
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']) 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, 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, 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, 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, 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 = "";
