From ff3259e08a3846f4abbb4b3d15fb30040780a95f Mon Sep 17 00:00:00 2001 From: chudov Date: Thu, 4 Mar 2010 05:56:17 +0000 Subject: [PATCH] --- CUETools.CTDB/Web/about.php | 35 ++ CUETools.CTDB/Web/img/bg_bottom.jpg | Bin 0 -> 9714 bytes CUETools.CTDB/Web/img/bg_left_border.jpg | Bin 0 -> 9727 bytes CUETools.CTDB/Web/img/bg_right_border.jpg | Bin 0 -> 9726 bytes CUETools.CTDB/Web/img/bg_top_border.jpg | Bin 0 -> 9710 bytes CUETools.CTDB/Web/img/bottom_left_corner.jpg | Bin 0 -> 293 bytes CUETools.CTDB/Web/img/bottom_right_corner.jpg | Bin 0 -> 290 bytes CUETools.CTDB/Web/img/top_left_corner.jpg | Bin 0 -> 293 bytes CUETools.CTDB/Web/img/top_right_corner.jpg | Bin 0 -> 293 bytes CUETools.CTDB/Web/index.php | 126 ++---- CUETools.CTDB/Web/list.php | 13 + CUETools.CTDB/Web/logo_start.php | 143 +++--- CUETools.CTDB/Web/phpctdb/ctdb.php | 427 +++++++++++++----- CUETools.CTDB/Web/robots.txt | 4 + CUETools.CTDB/Web/show.php | 153 ++++--- CUETools.CTDB/Web/submit.php | 77 +--- CUETools.CTDB/Web/table_end.php | 18 +- CUETools.CTDB/Web/table_start.php | 20 +- CUETools.CTDB/Web/top.php | 48 ++ 19 files changed, 660 insertions(+), 404 deletions(-) create mode 100644 CUETools.CTDB/Web/about.php create mode 100644 CUETools.CTDB/Web/img/bg_bottom.jpg create mode 100644 CUETools.CTDB/Web/img/bg_left_border.jpg create mode 100644 CUETools.CTDB/Web/img/bg_right_border.jpg create mode 100644 CUETools.CTDB/Web/img/bg_top_border.jpg create mode 100644 CUETools.CTDB/Web/img/bottom_left_corner.jpg create mode 100644 CUETools.CTDB/Web/img/bottom_right_corner.jpg create mode 100644 CUETools.CTDB/Web/img/top_left_corner.jpg create mode 100644 CUETools.CTDB/Web/img/top_right_corner.jpg create mode 100644 CUETools.CTDB/Web/list.php create mode 100644 CUETools.CTDB/Web/robots.txt create mode 100644 CUETools.CTDB/Web/top.php diff --git a/CUETools.CTDB/Web/about.php b/CUETools.CTDB/Web/about.php new file mode 100644 index 0000000..b0e7d47 --- /dev/null +++ b/CUETools.CTDB/Web/about.php @@ -0,0 +1,35 @@ + +

What's it for?

+You probably heard about AccurateRip, a wonderfull database of CD rip checksums, which helps you make sure your CD rip is an exact copy of original CD. What it can tell you is how many other people got the same data when copying this CD. + +CUETools Database is an extension of this idea. + +

What are the advantages?

+ +

What are the downsides and limitations?

+ +

How many errors can a rip contain and still be repairable?

+ +

What information does the database contain per each submission?

+ + + diff --git a/CUETools.CTDB/Web/img/bg_bottom.jpg b/CUETools.CTDB/Web/img/bg_bottom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..668b9a1e2bdb38b627722ff66a72d6c798a31db3 GIT binary patch literal 9714 zcmex=Bm<7<_#hv=|r|I2hO&g&3F_7#J8C z7#SECr5ISjYzBrTMrk-Zi%|orhKYfJ(U5_Ofq_Aqfq|ij(Fn{IVPIhBZO>$2f$Ckt zz`$^UfdOPA$W#dJn3A8Ast}NoUy@&(kzb(T9IOzYnU|7ZUd&)*U|?!xU}$AzpkQcX zWo&L`YR&)x%nKMH_Wu9Rz_5S`Za(7zW;h#UCrB+DBQr!T0~@kG808TDU{pi)2NNUA z3`RXBxYtcsMzE z1i87m1x5LJc=$yngoQSbmIMkW?kHg*n9 zE^bD2Nk#@HW|*V^10xF~GZPCFD?1wpD>IKVBLkBlGmD~-A**9xqOek7qY<0P#DyE3 zlvPB74kj6!6g6FRW>=jQ{Ndrpz1iUt~~j&bnDTpPrrtxm9;ux4%s3gp4)HqQD1rMB#%|5o*CqFM8qz{CBQqxM1`A#MIxllgX8A0h8FnN&E*ot#9lT(Ysa(s$G=A+od3YKGF zU=U(pU|fvjRrFUl`1KoMfgFUm~M%uCHH1%(ZdYcR-kf3O$>0|RejX-U3& zYF=tlVo7QW$cT{2f>fwtE{I}~2uQ{=H(db~5j6Hcb7@gdh-*X$$nzj;85lr;k1FC@ zoSupz!j_m*5|WsXBF2}Tnv)ZfT2bOz>=EMYla!yI0}5Xbm@tZB&W!w`D#x76bXZ97 zLp<*R69xr%N@`kSX-)|P0|RGSYEcOmCX8%`9+|hga)o4#C#`rxCF?v ze))N+AmdB&3;at5;P-N7f3w=6DTKw0uh8ki5G+g7#Nte86+4ON2_Iq(Q5hG zH)5(~NE%ZFr?_BHN(3b+eg;Q|6o!0;B!*N51%?2I3~;fY&rl3z6@ZI9{3;X}oEgBz zLCj|Zo6pVws&N<@8U8;M|DRD(QedU8pI5Ax2xcph{(h^(s($dTnD?@Yh6a#Zh16{MkR0CZ@!xT&1B-5lcU5hm1v}E%%W1}R)RCO)| zsFkS|nFzO{SPGJXS*xI61L9hNOTOTO#N<>v6C+C#OEYsLOH&(tbU7}V`hd)e)SL*H z%-qzx;>`R!J42{iba7M-kq8YY$QqEuxfE>lK^{j62pR-V0a84ogiS$8n!cf)vA((; zog4z|^kGjQ1u$u(_=1aBd1MxsJh8QTZfCVFhQj7C*O2G=vjr0v|^f83tY9q0$MHYsuMJNr;%Pg@of|`paOrM~u zNG!k}=ddCWlmr!QDiRBiCt!HVtT56 zRzYgIjXpvYyL%x;caV#l9hZ$hxSj>oxprI%bO584kQB(H!8ICOB!vJ;ibqq|XmF7f z0wgIOOTqK16Ns32P*JyB&6apkECO36)AqMkP z^HOZp%hm1ekXD5_fF>Qlt3tp_E{G$T5P%sDkhFreVnw&C8XHZ&D=d%BQz{rYSW=hk3OX|mrQO+UA+15<;R*9X`f5AEUi2|y&@u` z(lau%%E~J$t6JOIJ370jOr17;#>`numM&YqV&$qWTeofBv2)jvqsNY)IC<*I)oa&p z+`RSV>9glAUcUPB_1pI!KYs~=oD5n;!pg$J!p6p$%gDqm$f793YRJZ*Ble z$l=teJW(`gVUn0J=SG!-7oCefh(ByHQJoYlk?itu(Iz!h$q+Nw6m_oR=E-g)Aoqr* zmWG+Pw1OS{SyO7tk}aSGEmI*YS~T3l(=6bNS`aH*JR&kGI%cfcapJ~{AC{hxnU$S0 rSMEG{^W{%1E3c@ms;*h9cAdKQ>KE$5lY5K*{;dC;e}C8a`2RNn28Y`b literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/img/bg_left_border.jpg b/CUETools.CTDB/Web/img/bg_left_border.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90756dfaad2e9c6a067c7b15521eb3922d6780d5 GIT binary patch literal 9727 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 literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/img/bg_top_border.jpg b/CUETools.CTDB/Web/img/bg_top_border.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3528ebeb93f6d5ac51e90b777a66184df2b4595 GIT binary patch literal 9710 zcmex=Bm<7<_#hv=|r|I2hO&g&3F_7#J8C z7#SECr5ISjYzBrTMrk-Zi%|orhKYfJ(U5_Ofq_Aqfq|ij(Fn{IVPIhBZO>$2f$Ckt zz`$^UfdOPA$W#dJn3A8Ast}NoUy@&(kzb(T9IOzYnU|7ZUd&)*U|?!xU}$AzpkQcX zWo&L`V!;3c%nKMH_Wu9Rz_5S`Za(7zW;h#UCrB+DBQr!T0~@kG808TDU{pi)2NNUA z3`RXBxYtcsMzE z1i87m1x5LJc=$yngoQSbmIMkW?kHg*n9 zE^bD2Nk#@HW|*V^10xF~GZPCFD?1wpD>IKVBLkBlGmD~-A**9xqOek7qY<0P#DyE3 zlvPB74kj6!6g6FRW>=jQ{Ndrpz1iUt~~j&bnDTpPrrtxm9;ux4%s3gp4)HqQD1rMB#%|5g-^&l<-te{|EV@P61XNYGgVaR7F0Q(ank4!Qm zaX@Ua*+^pWz(y8>Iu0b1SDKT|q7VF)%O)F)%Q& zgE^iqP_sZ*v8Na1mlmK1vE>(Krf24*=9T6$Ffj1A27^rZ2a7Q8U6p zY>7D~A&KcIVtmP|IXNMz6(yd<9wELyN%{FXpz!5@38N_H%*ZdQa?Ht0hlLbB#Pc37 zVNiglq^2d7=9DlnFmRTo7L{O89tIOeRnDE1?wp^KUjzzDXy6J$%y)8!OMpDvX^4=&V;!7NbGE<`|u0)sOH*f@y!Y+&=* z89;RnBO}BAhvNS;N=gc>^!4+K^%6l%U%lk~T>Xl~0)0b01APV?`-+0ZTbjaVdbUa!D;tF3Kz@$;{7F09l=wlwVq6 zt6o}~nPO#-WNK_;VQ!*pmY8awYiO8asheb)l%{KuW}KF6o@Q*6WSFYXr2w@uwIUPY zRuoG?GB9fu6l_3TD{#pdT#%TYYG-0(X<}(+Ze(d{qmM4f1ydi8S&^C(;gXq~npd2e zpJ!(XRf{f;sv#1g!30?Yk~o)wjXucZNC82Ez$rkAN0hKBNJ-N-)HBvsx1*CoVBJ0J z>7xK9jTB#SF)NSE;*$KLN;?~UOfmX6za%paMf4lLtF-*0+{6;Q%-qEERQ;@i)N~ttgeZ3R zLW=Gn7dJaD8+~v+3#xPNxD@CBMlB&JkVk`SG`L6#0g@DtrmoT8A}It&QaqZvMuUr_ z5FknMXzCgbE|NlkB*mktYc#k>3IUQ7kEX8C;36pmNK#C0>f%BS=BMVR*s7PS+uI?n z2XO#RI)K-MfEQa3M=&7(GaMjk1+9Kyf=dv~Kw1wXh`t_V5op4di5WCI0-noYU|{E9 zV`brF=3-)G;AUiCU}I)vM98wSvM{qVaWHZ+aB&MTFflT-FfucPT*So2S<1-7%p%At z#HPqDti-@!DB@_OEXo<^B$lXREFM(YD3LT#)p_B@4{9bwT#^SbnyNnxHf#DgX^~4v zv8$W8d$LAoSh&=tLzf*L@^Wn>nH7(LUmugvBd3bt7L`J1&WM-9>S5#KD zwzYS3c1@W&ZTgIvvz9DfwtU6PRa>@h+rDGxt|Lc}9Y1mM)Rn8(uHU$M>&eq+&tJTJ z_2uig?>~P25(GIJw0?w@g@uKUjWw5%iCK_EQHa%$jX_D+F_7ITQKXQ=sZn{NXwbqW zF=Nh+DhDq*7kvR7FYNnDQX09pfT*b|k-AX|24NWZ#GjC}HJNUDv z)RZM#KucMsLe{cqxQC}%z?ZWi*0Oj+WK?v_Sh3^8jTb*GJtH$KJ7=!kdGhAVpITO4 kQCU@8vsUdob?enH)FmhPR{#CC|8x33-|z4CUjKg+04#{x)Bpeg literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/img/bottom_left_corner.jpg b/CUETools.CTDB/Web/img/bottom_left_corner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..229d9d1d9ac9d0bd880c44f862e1af20b1bc90ef GIT binary patch literal 293 zcmex=%N5(112%qS9!3{1>|AoYwW!XT|6Q9(@6TMRtRj0{YI U%z_N|47K@vWmQ)q%N;sT5yA0SCEGBGHElry3$X8?%`Vv62k;9+KDU=m~& QWUyzbOG|U$OZa~i0LPXd1^@s6 literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/img/top_left_corner.jpg b/CUETools.CTDB/Web/img/top_left_corner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e6c0b3253859265bfef350979576ab81e9c49c3 GIT binary patch literal 293 zcmex=%N5(12j49v*ljLZy7f*|#b=;|3jqJo&Bw-|Vs85x)a UnFSf_8LHM-WxEK^kpF)Z02l8c9{>OV literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/img/top_right_corner.jpg b/CUETools.CTDB/Web/img/top_right_corner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f3332d343d30a7b7a671909e565382822a8ab01 GIT binary patch literal 293 zcmex=%N5&{g&j3^R}Ow0_1AoZxiAgv%#K@`Pc(OV2W%!~|7 Vg3N*p_6)U2Z!QN_71aN~2>>TLAbbD- literal 0 HcmV?d00001 diff --git a/CUETools.CTDB/Web/index.php b/CUETools.CTDB/Web/index.php index 054632d..b652e88 100644 --- a/CUETools.CTDB/Web/index.php +++ b/CUETools.CTDB/Web/index.php @@ -1,77 +1,49 @@ - $totaldiscs || $start < 0) $start = $totaldiscs - $count; -fseek($fp, 57 * $start, SEEK_SET); -$n = $count; -while($line=fgets($fp)) { - $name = trim($line); - if (file_exists($name)) - $lines[]=$name; - if (--$n <= 0) - break; -} -fclose($fp); -printf("

Recent additions:

"); -include 'table_start.php'; -?> - - -$imgs = ''; -if ($lines) foreach(array_reverse($lines) as $line) { - $ctdb = new phpCTDB($line); - $disc = $ctdb->db['discs'][0]; - $ctdb->ParseToc(); - //$id = @$disc['MBID']['value']; - $artist = @$disc['ART ']['value']; - $title = @$disc['nam ']['value']; - $discid = substr($line,13,30); - $ctdbid = $ctdb->db['discs'][0]['CRC ']['int']; - if ($artist == "" && $title == "") - { - //$q = new MusicBrainzQuery(new WebService('db4.cuetools.net')); - $q = new MusicBrainzQuery(); - $rf = new ReleaseFilter(); - try { - $rresults = $q->getReleases( $rf->discId($ctdb->mbid) ); - foreach ( $rresults as $key => $rr ) { - $rr = $rr->getRelease(); - $artist = $rr->getArtist()->getName(); - $title = $rr->getTitle(); - $imgs = $imgs . ''; - } - } - catch ( ResponseError $e ) { - // echo $e->getMessage() . " "; - } - } - printf('', htmlspecialchars($artist), htmlspecialchars($title), $ctdb->mbid, $discid, $discid, $ctdbid, $ctdbid); -} -printf('', $count * floor(($start - 1) / $count)); -printf("
ArtistAlbumDisc IdCTDB Id
%s%s%s%08x
More
"); -include 'table_end.php' ; -//printf('%s', $imgs); -printf("
"); -?> - - + pg_num_rows($result)) + $count = pg_num_rows($result); +if ($start == '') $start = pg_num_rows($result) - $count; + +printf("

Recent additions:

"); +include 'list.php'; +pg_free_result($result); +printf("
"); +?> + + diff --git a/CUETools.CTDB/Web/list.php b/CUETools.CTDB/Web/list.php new file mode 100644 index 0000000..7d81a05 --- /dev/null +++ b/CUETools.CTDB/Web/list.php @@ -0,0 +1,13 @@ + + += $start; $i--) { + $record = pg_fetch_array($result, $i); + printf('', urlencode($record['artist']), $record['artist'], $record['title'], $record['discid'], $record['discid'], $record['discid'], $record['ctdbid'], $record['ctdbid'], $record['confidence']); +} +if ($start > 0) printf('', $count * floor(($start - 1) / $count), $url); +printf("
ArtistAlbumDisc IdCTDB IdAR
%s%s%s%08x%d
More
"); +include 'table_end.php' ; +?> diff --git a/CUETools.CTDB/Web/logo_start.php b/CUETools.CTDB/Web/logo_start.php index 525bc13..79897f1 100644 --- a/CUETools.CTDB/Web/logo_start.php +++ b/CUETools.CTDB/Web/logo_start.php @@ -1,62 +1,81 @@ - - - -CUETools DB - - - - - - - - - - - - - - - -
- -
AboutCUETools
-
+ + + +CUETools DB + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
HomePopularAboutCUETools
+ +
+
diff --git a/CUETools.CTDB/Web/phpctdb/ctdb.php b/CUETools.CTDB/Web/phpctdb/ctdb.php index 135c7c7..afa7820 100644 --- a/CUETools.CTDB/Web/phpctdb/ctdb.php +++ b/CUETools.CTDB/Web/phpctdb/ctdb.php @@ -3,88 +3,267 @@ class phpCTDB{ private $fp; - private $fpstats; - private $atoms; - public $db; - public $fulltoc; - public $mbid; + private $fpstats; + private $atoms; + public $db; + public $fulltoc; function __construct($target_file) { - $this->fp = fopen($target_file, 'rb'); + $this->fp = fopen($target_file, 'rb'); $this->fpstats = fstat($this->fp); $this->atoms = $this->parse_container_atom(0, $this->fpstats['size']); - $this->db = false; + $this->db = false; foreach ($this->atoms as $entry) if($entry['name'] == 'CTDB') $this->db = $entry; } - function __destruct() { + function __destruct() { fclose($this->fp); - } + } function ParseTOC() { $disc = $this->db['discs'][0]; $this->fulltoc = ''; - $mbtoc = ''; + $totalcount = 0; + $firstaudio = 0; + $lastaudio = 0; foreach ($disc['TOC ']['subatoms'] as $track) { if ($track['name']=='INFO') { - $trackcount = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); - $pregap = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); - $pos = $pregap + 150; - } - if ($track['name']=='TRAK') { - $isaudio = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); - $length = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); - $this->fulltoc = sprintf('%s %d', $this->fulltoc, $pos); - $mbtoc = sprintf('%s%08X', $mbtoc, $pos); - $pos += $length; - } + $trackcount = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); + $pregap = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); + $pos = $pregap + 150; + } + if ($track['name']=='TRAK') { + $isaudio = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); + $length = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); + if ($isaudio == 0 && $totalcount!=0) + $pos += 11400; + $this->fulltoc = sprintf('%s %d', $this->fulltoc, $pos); + $pos += $length; + $totalcount ++; + if ($isaudio != 0) + $lastaudio = $totalcount; + if ($isaudio != 0 && $firstaudio == 0) + $firstaudio = $totalcount; + } } - $this->fulltoc = sprintf('1 %d %d%s', $trackcount, $pos, $this->fulltoc); - $mbtoc = sprintf('01%02X%08X%s', $trackcount, $pos, $mbtoc); + if ($trackcount != $totalcount) + die('wrong trackcount'); + $this->fulltoc = sprintf('%d %d %d %d%s', $firstaudio, $lastaudio, $totalcount, $pos, $this->fulltoc); + } + + static function toc2mbtoc($fulltoc) + { + $ids = explode(' ', $fulltoc); + $mbtoc = sprintf('%d %d', $ids[0], $ids[1]); + if ($ids[1] == $ids[2]) + { + for ($tr = 3; $tr < count($ids); $tr++) + $mbtoc = sprintf('%s %d', $mbtoc, $ids[$tr]); + } else // Enhanced CD + { + $mbtoc = sprintf('%s %d', $mbtoc, $ids[$ids[1] + 4] - 11400); + for ($tr = 4; $tr < $ids[1] + 4; $tr++) + $mbtoc = sprintf('%s %d', $mbtoc, $ids[$tr]); + } + return $mbtoc; + } + + static function toc2mbid($fulltoc) + { + $ids = explode(' ', $fulltoc); + $mbtoc = sprintf('%02X%02X', $ids[0], $ids[1]); + if ($ids[1] == $ids[2]) + { + for ($tr = 3; $tr < count($ids); $tr++) + $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$tr]); + } else // Enhanced CD + { + $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$ids[1] + 4] - 11400); + for ($tr = 4; $tr < $ids[1] + 4; $tr++) + $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$tr]); + } +// echo $fulltoc . ':' . $mbtoc . '
'; $mbtoc = str_pad($mbtoc,804,'0'); - $this->mbid = str_replace('+', '.', str_replace('/', '_', str_replace('=', '-', base64_encode(pack("H*" , sha1($mbtoc)))))); + $mbid = str_replace('+', '.', str_replace('/', '_', str_replace('=', '-', base64_encode(pack("H*" , sha1($mbtoc)))))); + return $mbid; + } + + static function mblookup($mbid) + { + $mbconn = pg_connect("dbname=musicbrainz_db user=musicbrainz_user"); + if (!$mbconn) + return false; + $mbresult = pg_query_params('SELECT DISTINCT album' + . ' FROM album_cdtoc, cdtoc' + . ' WHERE album_cdtoc.cdtoc = cdtoc.id' + . ' AND cdtoc.discid = $1', + array($mbid) + ); + $mbmeta = false; + while(true == ($mbrecord = pg_fetch_array($mbresult))) + { + $mbresult2 = pg_query_params('SELECT a.name as albumname, ar.name as artistname, coverarturl' + . ' FROM album a INNER JOIN albummeta m ON m.id = a.id, artist ar' + . ' WHERE a.id = $1' + . ' AND ar.id = a.artist', + array($mbrecord[0])); + $mbmeta[] = pg_fetch_array($mbresult2); + pg_free_result($mbresult2); + } + pg_free_result($mbresult); + return $mbmeta; + } + + function ctdb2pg($discid) + { + $disc = $this->db['discs'][0]; + $record = false; + $record['discid'] = $discid; + $record['ctdbid'] = $disc['CRC ']['int']; + $record['confidence'] = $disc['CONF']['int']; + $record['parity'] = base64_encode($this->read($disc['PAR ']['offset'], 16)); + $record['fulltoc'] = $this->fulltoc; + $record['userid'] = $disc['USER']['value']; + $record['agent'] = $disc['TOOL']['value']; + $record['time'] = date ("Y-m-d H:i:s"); + $record['artist'] = @$disc['ART ']['value']; + $record['title'] = @$disc['nam ']['value']; + return $record; + } + + static function pg2ctdb($dbconn, $id) + { + $target_path = phpCTDB::discid2path($id); + + $result = pg_query_params($dbconn, "SELECT * FROM submissions WHERE discid=$1", array($id)) + or die('Query failed: ' . pg_last_error()); + if (pg_num_rows($result) < 1) die('not found'); + + $totalconf = 0; + $newctdb = false; + $newctdb['name'] = 'CTDB'; + $newhead = false; + $newhead['name'] = 'HEAD'; + $newtotal = false; + $newtotal['name'] = 'TOTL'; + $newtotal['value'] = phpCTDB::BigEndian2String($totalconf,4); + $newhead['subatoms'][] = $newtotal; + $newctdb['subatoms'][] = $newhead; + + while (TRUE == ($record = pg_fetch_array($result))) + { + $totalconf += $record['confidence']; + $newdisc = false; + $newdisc['name'] = 'DISC'; + + $newatom = false; + $newatom['name'] = 'CRC '; + $newatom['value'] = phpCTDB::Hex2String(sprintf('%08x',$record['ctdbid'])); + $newdisc['subatoms'][] = $newatom; + + $newatom = false; + $newatom['name'] = 'NPAR'; + $newatom['value'] = phpCTDB::BigEndian2String(8,4); + $newdisc['subatoms'][] = $newatom; + + $newatom = false; + $newatom['name'] = 'CONF'; + $newatom['value'] = phpCTDB::BigEndian2String((int)($record['confidence']),4); + $newdisc['subatoms'][] = $newatom; + + $newatom = false; + $newatom['name'] = 'PAR '; + $newatom['value'] = base64_decode($record['parity']); + $newdisc['subatoms'][] = $newatom; + + $newctdb['subatoms'][] = $newdisc; + } + + pg_free_result($result); + + $newctdb['subatoms'][0]['subatoms'][0]['value'] = phpCTDB::BigEndian2String($totalconf,4); + + $ftyp=false; + $ftyp['name'] = 'ftyp'; + $ftyp['value'] = 'CTDB'; + + $tname = sprintf("%s/ctdb.tmp", $target_path); + $tfp = fopen($tname, 'wb'); + phpCTDB::unparse_atom($tfp,$ftyp); + phpCTDB::unparse_atom($tfp,$newctdb); + fclose($tfp); + if(!rename($tname,sprintf("%s/ctdb.bin", $target_path))) + die('error uploading file ' . $target_path); + } + + static function Hex2Int($hex_word, $signed = false) + { + $int_value = 0; + $byte_wordlen = strlen($hex_word); + for ($i = 0; $i < $byte_wordlen; $i++) { + sscanf($hex_word{$i}, "%x", $digit); + $int_value += $digit * pow(16, ($byte_wordlen - 1 - $i)); + } + if ($signed) { + $sign_mask_bit = 0x80 << 24; + if ($int_value & $sign_mask_bit) { + $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); + } + } + return $int_value; } static function BigEndian2Int($byte_word, $signed = false) { - $int_value = 0; - $byte_wordlen = strlen($byte_word); + $int_value = 0; + $byte_wordlen = strlen($byte_word); - for ($i = 0; $i < $byte_wordlen; $i++) { - $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); - } + for ($i = 0; $i < $byte_wordlen; $i++) { + $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); + } - if ($signed) { - $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); - if ($int_value & $sign_mask_bit) { - $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); - } - } + if ($signed) { + $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); + if ($int_value & $sign_mask_bit) { + $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); + } + } - return $int_value; + return $int_value; + } + + static function Hex2String($number) + { + $intstring = ''; + $hex_word = str_pad($number, 8, '0', STR_PAD_LEFT); + for ($i = 0; $i < 4; $i++) { + sscanf(substr($hex_word, $i*2, 2), "%x", $number); + $intstring = $intstring.chr($number); + } + return $intstring; } static function LittleEndian2String($number, $minbytes=1, $synchsafe=false) { - $intstring = ''; - while ($number > 0) { - if ($synchsafe) { - $intstring = $intstring.chr($number & 127); - $number >>= 7; - } else { - $intstring = $intstring.chr($number & 255); - $number >>= 8; - } - } - return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); + $intstring = ''; + while ($number > 0) { + if ($synchsafe) { + $intstring = $intstring.chr($number & 127); + $number >>= 7; + } else { + $intstring = $intstring.chr($number & 255); + $number >>= 8; + } + } + return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); } static function BigEndian2String($number, $minbytes=1, $synchsafe=false) { - return strrev(phpCTDB::LittleEndian2String($number, $minbytes, $synchsafe)); + return strrev(phpCTDB::LittleEndian2String($number, $minbytes, $synchsafe)); } - static function discid2path($id) + static function discid2path($id) { $err = sscanf($id, "%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); $parsedid = sprintf("%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); @@ -105,85 +284,87 @@ class phpCTDB{ static function unparse_atom($fp, $atom) { -// printf('unparse_atom(%s)
', $atom['name']); - $offset = ftell($fp); - fwrite($fp, phpCTDB::BigEndian2String(0, 4)); - fwrite($fp, $atom['name']); - if (@$atom['subatoms']) - foreach ($atom['subatoms'] as $subatom) - phpCTDB::unparse_atom($fp, $subatom); - else if ($atom['value']) - fwrite($fp, $atom['value']); - else - die(sprintf("couldn't write long atom %s: size %d", $atom['name'], $atom['size'])); - $pos = ftell($fp); - fseek($fp, $offset, SEEK_SET); - fwrite($fp, phpCTDB::BigEndian2String($pos - $offset, 4)); - fseek($fp, $pos, SEEK_SET); +// printf('unparse_atom(%s)
', $atom['name']); + $offset = ftell($fp); + fwrite($fp, phpCTDB::BigEndian2String(0, 4)); + fwrite($fp, $atom['name']); + if (@$atom['subatoms']) + foreach ($atom['subatoms'] as $subatom) + phpCTDB::unparse_atom($fp, $subatom); + else if ($atom['value']) + fwrite($fp, $atom['value']); + else + die(sprintf("couldn't write long atom %s: size %d", $atom['name'], $atom['size'])); + $pos = ftell($fp); + fseek($fp, $offset, SEEK_SET); + fwrite($fp, phpCTDB::BigEndian2String($pos - $offset, 4)); + fseek($fp, $pos, SEEK_SET); } - function read($offset, $len) - { - fseek($this->fp, $offset, SEEK_SET); - return fread($this->fp, $len); - } + function read($offset, $len) + { + fseek($this->fp, $offset, SEEK_SET); + return fread($this->fp, $len); + } function parse_container_atom($offset, $len) { -// printf('parse_container_atom(%d, %d)
', $offset, $len); - $atoms = false; - $fin = $offset + $len; - while ($offset < $fin) { - fseek($this->fp, $offset, SEEK_SET); - $atom_header = fread($this->fp, 8); - $atom_size = phpCTDB::BigEndian2Int(substr($atom_header, 0, 4)); - $atom_name = substr($atom_header, 4, 4); - $atom['name'] = $atom_name; - $atom['size'] = $atom_size - 8; - $atom['offset'] = $offset + 8; - if ($atom_size - 8 <= 256) - $atom['value'] = fread($this->fp, $atom_size - 8); - else - $atom['value'] = false; -// echo $len, ':', $offset, ":", $atom_size, ":", $atom_name, '
'; - if ($atom_name == 'CTDB' || $atom_name == 'DISC' || $atom_name == 'TOC ' || ($atom_name == 'HEAD' && ($atom_size != 28 || 256 != phpCTDB::BigEndian2Int(substr($atom['value'],0,4))))) - { - $atom['subatoms'] = $this->parse_container_atom($offset + 8, $atom_size - 8); - foreach ($atom['subatoms'] as $param) - switch ($param['name']) { - case 'HEAD': - case 'TOC ': - case 'CRC ': - case 'MBID': - case 'ART ': - case 'nam ': - case 'NPAR': - case 'CONF': - case 'TOTL': - case 'PAR ': - $atom[$param['name']] = $param; - break; - case 'DISC': - $atom['discs'][] = $param; - break; - } - } else - $atom['subatoms'] = false; - switch ($atom_name) - { - case 'CRC ': - case 'NPAR': - case 'CONF': - case 'TOTL': - $atom['int'] = phpCTDB::BigEndian2Int($atom['value']); - break; - } - $offset += $atom_size; - $atoms[] = $atom; - } - if ($offset > $fin) - die(printf("bad atom: offset=%d, fin=%d", $offset, $fin)); - return $atoms; +// printf('parse_container_atom(%d, %d)
', $offset, $len); + $atoms = false; + $fin = $offset + $len; + while ($offset < $fin) { + fseek($this->fp, $offset, SEEK_SET); + $atom_header = fread($this->fp, 8); + $atom_size = phpCTDB::BigEndian2Int(substr($atom_header, 0, 4)); + $atom_name = substr($atom_header, 4, 4); + $atom['name'] = $atom_name; + $atom['size'] = $atom_size - 8; + $atom['offset'] = $offset + 8; + if ($atom_size - 8 <= 256) + $atom['value'] = fread($this->fp, $atom_size - 8); + else + $atom['value'] = false; +// echo $len, ':', $offset, ":", $atom_size, ":", $atom_name, '
'; + if ($atom_name == 'CTDB' || $atom_name == 'DISC' || $atom_name == 'TOC ' || ($atom_name == 'HEAD' && ($atom_size != 28 || 256 != phpCTDB::BigEndian2Int(substr($atom['value'],0,4))))) + { + $atom['subatoms'] = $this->parse_container_atom($offset + 8, $atom_size - 8); + foreach ($atom['subatoms'] as $param) + switch ($param['name']) { + case 'HEAD': + case 'TOC ': + case 'CRC ': + case 'USER': + case 'TOOL': + case 'MBID': + case 'ART ': + case 'nam ': + case 'NPAR': + case 'CONF': + case 'TOTL': + case 'PAR ': + $atom[$param['name']] = $param; + break; + case 'DISC': + $atom['discs'][] = $param; + break; + } + } else + $atom['subatoms'] = false; + switch ($atom_name) + { + case 'CRC ': + case 'NPAR': + case 'CONF': + case 'TOTL': + $atom['int'] = phpCTDB::BigEndian2Int($atom['value']); + break; + } + $offset += $atom_size; + $atoms[] = $atom; + } + if ($offset > $fin) + die(printf("bad atom: offset=%d, fin=%d", $offset, $fin)); + return $atoms; } } ?> diff --git a/CUETools.CTDB/Web/robots.txt b/CUETools.CTDB/Web/robots.txt new file mode 100644 index 0000000..6072cbb --- /dev/null +++ b/CUETools.CTDB/Web/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: /show.php +Disallow: /top.php +Disallow: /parity/ diff --git a/CUETools.CTDB/Web/show.php b/CUETools.CTDB/Web/show.php index 8eb0cfc..3358fbd 100644 --- a/CUETools.CTDB/Web/show.php +++ b/CUETools.CTDB/Web/show.php @@ -1,55 +1,98 @@ -db['discs'][0]; -//$id = @$disc['MBID']['value']; -$ctdb->ParseTOC(); -$artist = @$disc['ART ']['value']; -$title = @$disc['nam ']['value']; -$link = ''; -$q = new MusicBrainzQuery(); -$rf = new ReleaseFilter(); -$mbrr = false; -try { - $rresults = $q->getReleases( $rf->discId($ctdb->mbid) ); - foreach ( $rresults as $key => $rr ) { - $mbrr = $rr->getRelease(); - } -} -catch ( ResponseError $e ) { - // echo $e->getMessage() . " "; -} -printf('
'); -if ($mbrr && $mbrr->getAsin()) -{ - include 'table_start.php'; - $imgurl = 'http://ec1.images-amazon.com/images/P/' . $mbrr->getAsin() . '.01.MZZZZZZZ.jpg'; - #$imgurl = 'http://images.amazon.com/images/P/' . $mbrr->getAsin() . '.01._SCLZZZZZZZ_PU_PU-5_.jpg'; - printf('', $imgurl); - include 'table_end.php'; - printf('

'); -} -include 'table_start.php'; -?> - -', $ctdb->fulltoc); -printf('', $artist); -if ($mbrr && $mbrr->getArtist()->getName() != $artist) -printf('', $mbrr->getArtist()->getName()); -printf('', $title); -if ($mbrr && $mbrr->getTitle() != $title) -printf('', $mbrr->getTitle()); -printf('', $link, $ctdb->mbid); -?> -
Full TOC%s
Artist%s
Artist (MB)%s
Title%s
Title (MB)%s
MusicbrainzId%s%s
- -
- - + 1) die('not unique'); +$record = pg_fetch_array($result); +pg_free_result($result); + +$mbid = phpCTDB::toc2mbid($record['fulltoc']); +$mbmeta = phpCTDB::mblookup($mbid); + +printf('
'); +$imgfound = false; +if ($mbmeta) + foreach ($mbmeta as $mbr) + if ($mbr['coverarturl']) + { + if (!$imgfound) include 'table_start.php'; + printf('', $mbr['coverarturl']); + $imgfound = true; + } +if ($imgfound) { + include 'table_end.php'; + printf('

'); +} +include 'table_start.php'; +?> + +', $discid); +printf('', $ctdbid); +printf('', phpCTDB::toc2mbtoc($record['fulltoc']), $mbid, $mbmeta ? count($mbmeta) : "-"); +//printf('', $record['fulltoc']); +printf(''); +if ($record['artist'] != '') + printf('', $record['artist']); +if ($mbmeta) + foreach ($mbmeta as $mbr) + if ($mbr['artistname'] != $record['artist']) + printf('', $mbr['artistname']); +if ($record['title'] != '') + printf('', $record['title']); +if ($mbmeta) + foreach ($mbmeta as $mbr) + if ($mbr['albumname'] != $record['title']) + printf('', $mbr['albumname']); +?> +
Disc ID%s
CTDB ID%s
Musicbrainz ID%s (%s)
Full TOC%s
'); +?> + +', $trno, $trstartmsf, $trlenmsf, $trstart, $trend); +} +printf("
TrackStartLengthStart sectorEnd sector
%d%s%s%d%d
"); +printf('
Artist%s
Artist (MB)%s
Title%s
Title (MB)%s
+ +
+ + diff --git a/CUETools.CTDB/Web/submit.php b/CUETools.CTDB/Web/submit.php index 1320a14..a7e28ff 100644 --- a/CUETools.CTDB/Web/submit.php +++ b/CUETools.CTDB/Web/submit.php @@ -74,86 +74,27 @@ if ($size == 0) { return; } +$dbconn = pg_connect("dbname=ctdb user=ctdb_user") + or die('Could not connect: ' . pg_last_error()); + $id = $_POST['id']; $target_path = phpCTDB::discid2path($id); @mkdir($target_path, 0777, true); $target_file = sprintf("%s/ctdb.bin", $target_path); $ctdb = new phpCTDB($tmpname); -$ctdb1 = @file_exists($target_file) ? new phpCTDB($target_file) : false; -$merging = $ctdb1 ? true : false; - -$ftyp['name'] = 'ftyp'; -$ftyp['value'] = 'CTDB'; - -$newctdb['name'] = 'CTDB'; - $newhead['name'] = 'HEAD'; - $newtotal['name'] = 'TOTL'; - $newtotal['value'] = $ctdb1 ? phpCTDB::BigEndian2String($ctdb1->db['HEAD']['TOTL']['int'] + 1,4) : $ctdb->db['HEAD']['TOTL']['value']; - $newhead['subatoms'][] = $newtotal; -$newctdb['subatoms'][] = $newhead; - -if ($ctdb1) -foreach ($ctdb1->db['subatoms'] as $disc) - if ($disc['name'] == 'DISC') - { - if ($crc == $disc['CRC ']['value']) - die("duplicate entry"); - - $newdisc = false; - $newdisc['name'] = 'DISC'; - $newdisc['subatoms'][] = $disc['CRC ']; - $newdisc['subatoms'][] = $disc['NPAR']; - $newdisc['subatoms'][] = $disc['CONF']; - $newpar['name'] = 'PAR '; - $newpar['value'] = $ctdb1->read($disc['PAR ']['offset'], 16); - $newdisc['subatoms'][] = $newpar; - $newctdb['subatoms'][] = $newdisc; - } - -$discs = 0; -foreach ($ctdb->db['subatoms'] as $disc) - if ($disc['name'] == 'DISC') - { - $crc = $disc['CRC ']['value']; - - $newdisc = false; - $newdisc['name'] = 'DISC'; - $newdisc['subatoms'][] = $disc['CRC ']; - $newdisc['subatoms'][] = $disc['NPAR']; - $newdisc['subatoms'][] = $disc['CONF']; - $newpar['name'] = 'PAR '; - $newpar['value'] = $ctdb->read($disc['PAR ']['offset'], 16); - $newdisc['subatoms'][] = $newpar; - $newctdb['subatoms'][] = $newdisc; - $discs++; - } -if ($discs > 1) - die('One disc at a time, please'); -if ($discs < 1) - die('No disc records found'); - -$tname = sprintf("%s/ctdb.tmp", $target_path); -$tfp = fopen($tname, 'wb'); -phpCTDB::unparse_atom($tfp,$ftyp); -phpCTDB::unparse_atom($tfp,$newctdb); -fclose($tfp); +$merging = @file_exists($target_file); +$ctdb->ParseTOC(); +$record = $ctdb->ctdb2pg($id); unset($ctdb); -unset($ctdb1); -$crca = phpCTDB::BigEndian2Int(substr($crc,0,2)); -$crcb = phpCTDB::BigEndian2Int(substr($crc,2,2)); -$destname = sprintf("%s/%04x%04x.bin", $target_path, $crca, $crcb); +$destname = sprintf("%s/%08x.bin", $target_path, $record['ctdbid']); if(!move_uploaded_file($tmpname, $destname)) die('error uploading file ' . $tmpname . ' to ' . $destname); -if(!rename($tname,sprintf("%s/ctdb.bin", $target_path))) - die('error uploading file ' . $target_path); +$subres = pg_insert($dbconn, 'submissions', $record); -$listfp = fopen("parity/list.txt", 'a'); -fwrite($listfp, $destname); -fwrite($listfp, "\n"); -fclose($listfp); +phpCTDB::pg2ctdb($dbconn, $id); if ($merging) printf("%s has been updated", $id); diff --git a/CUETools.CTDB/Web/table_end.php b/CUETools.CTDB/Web/table_end.php index 520a0e5..ebe80f2 100644 --- a/CUETools.CTDB/Web/table_end.php +++ b/CUETools.CTDB/Web/table_end.php @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + diff --git a/CUETools.CTDB/Web/table_start.php b/CUETools.CTDB/Web/table_start.php index 0a32d34..b39065d 100644 --- a/CUETools.CTDB/Web/table_start.php +++ b/CUETools.CTDB/Web/table_start.php @@ -1,10 +1,10 @@ - - - - - - - - -
- + + + + + + + + +
+ diff --git a/CUETools.CTDB/Web/top.php b/CUETools.CTDB/Web/top.php new file mode 100644 index 0000000..ce0de21 --- /dev/null +++ b/CUETools.CTDB/Web/top.php @@ -0,0 +1,48 @@ +=100"; + $term = ' AND '; +} +$query = $query . " ORDER BY confidence"; +$result = pg_query($query) or die('Query failed: ' . pg_last_error()); +$start = @$_GET['start']; +if (pg_num_rows($result) == 0) + die('nothing found'); +if ($count > pg_num_rows($result)) + $count = pg_num_rows($result); +if ($start == '') $start = pg_num_rows($result) - $count; + +printf("

Popular discs:

"); +include 'list.php'; +pg_free_result($result); +printf("
"); +?> + +