Changeset 18937 for lang/php

Show
Ignore:
Timestamp:
09/07/08 14:11:26 (3 months ago)
Author:
sasezaki
Message:

lang/php/Diggin_CDDB: modify

Location:
lang/php/Diggin_CDDB/library/Diggin/CDDB
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/php/Diggin_CDDB/library/Diggin/CDDB/CDex.php

    r18918 r18937  
    6666    public function getLastFile() 
    6767    {        
    68         $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->getLocalCDDBDirPath())); 
     68        $rii = new RecursiveIteratorIterator( 
     69                    new RecursiveDirectoryIterator($this->getLocalCDDBDirPath())); 
    6970         
    7071        $ai = new ArrayIterator(array()); 
     
    9091        //if not found 
    9192        require_once 'Diggin/CDDB/Exception.php'; 
    92         throw new Diggin_CDDB_Exception('LocalCDDB Foramt text not found, etc. c:\cdex_151\LocalCDDB'); 
     93        $errorMsg = sprintf('LocalCDDB Foramt text not found at %s', 
     94                             $this->getLocalCDDBDirPath()); 
     95        throw new Diggin_CDDB_Exception($errorMsg); 
    9396    } 
    9497     
     
    99102     * @return array 
    100103     */ 
    101     public function getLastDiscInfo() 
     104    public function getLastDisc($style = 'Net_CDDB_Disc') 
    102105    {                 
    103         $splFileObject = $this->getLastFile()->openFile(); 
    104          
    105         $points = $this->getSeekPointsLatestOfFile($splFileObject); 
    106         $splFileObject->seek($points['start']); 
    107          
    108         $disc = array(); 
    109         $disc['discid'] = trim(preg_replace('/^DISCID=(.*)(\s)$/i', '$1', $splFileObject->current())); 
    110         list($disc['dartist'], $disc['dtitle']) = explode(' / ', $splFileObject->fgets(), 2); 
    111         $disc['dtitle'] = trim($disc['dtitle']); 
    112         $disc['dartist'] = ltrim($disc['dartist'], 'DTITLE='); 
    113         $disc['dyear'] = rtrim(ltrim($splFileObject->fgets(), 'DYEAR=')); 
    114         $disc['dgenre'] = rtrim(ltrim($splFileObject->fgets(), 'DGENRE=')); 
    115          
    116         do { 
    117             $title = preg_replace('/^TTITLE(\d*)=(.*)(\s)$/', '$2', $splFileObject->fgets()); 
    118  
    119             //if (preg_match('/^EXTD=/s', $title)) break; 
    120             if ($splFileObject->key() > $points['end']) break; 
    121             $disc['tracks'][] = trim($title); 
    122         } while ($splFileObject->valid()); 
     106        $lastFile = $this->getLastFile()->openFile(); 
     107         
     108        if ($style == 'Net_CDDB_Disc') { 
     109            $points = $this->getSeekPointsLatestOfFile($lastFile, '#FILENAME', 'PLAYORDER'); 
     110            //oops! FILENAME not defined Net_CDDB_Utilities, so I plus 1 for start point. 
     111            $discStr = implode('', array_slice(file($lastFile), $points['start'] +1, $points['end'])); 
     112             
     113            require_once 'Net/CDDB/Utilities.php'; 
     114            $ncu = new Net_CDDB_Utilities(); 
     115            $parse = $ncu->parseRecord($discStr); 
     116            require_once 'Net/CDDB/Disc.php'; 
     117            $disc = new Net_CDDB_Disc($parse); 
     118        } else { 
     119            $points = $this->getSeekPointsLatestOfFile($lastFile, 'DISCID'); 
     120            $lastFile->seek($points['start']); 
     121             
     122            $disc = array(); 
     123            $disc['discid'] = trim(preg_replace('/^DISCID=(.*)(\s)$/i', '$1', $lastFile->current())); 
     124            list($disc['dartist'], $disc['dtitle']) = explode(' / ', $lastFile->fgets(), 2); 
     125            $disc['dtitle'] = trim($disc['dtitle']); 
     126            $disc['dartist'] = ltrim($disc['dartist'], 'DTITLE='); 
     127            $disc['dyear'] = rtrim(ltrim($lastFile->fgets(), 'DYEAR=')); 
     128            $disc['dgenre'] = rtrim(ltrim($lastFile->fgets(), 'DGENRE=')); 
     129             
     130            do { 
     131                $title = preg_replace('/^TTITLE(\d*)=(.*)(\s)$/', '$2', $lastFile->fgets()); 
     132     
     133                //if (preg_match('/^EXTD=/s', $title)) break; 
     134                if ($lastFile->key() > $points['end']) break; 
     135                $disc['tracks'][] = trim($title); 
     136            } while ($lastFile->valid()); 
     137        } 
     138         
     139        //$disc = mb_convert_variables() 
    123140         
    124141        return $disc; 
    125142    } 
    126      
     143 
    127144    /** 
    128145     * get Seek point From => DISCID, TO => TTITLE{X} 
     
    131148     * @return array $points  
    132149     */ 
    133     public function getSeekPointsLatestOfFile(SplFileObject $splFileObject) 
     150    public function getSeekPointsLatestOfFile(SplFileObject $splFileObject, $start = 'DTITLE', $end = 'EXTD') 
    134151    { 
    135152        $line = count(file($splFileObject->getPathName())); 
    136         for ($i = 1; $i < $line; $i++) { 
     153        for ($i = 1; $i <= $line; $i++) { 
    137154            $splFileObject->seek($line - $i); 
    138155            //cdex comment is /^#FILE/ 
    139             if (preg_match('/^EXTD.*/i', $splFileObject->current())) { 
     156            if (preg_match("/^$end.*/i", $splFileObject->current())) { 
    140157                $end = $splFileObject->key() -1; 
    141158            } 
    142              
    143             if (preg_match('/^DTITLE.*$/s', $splFileObject->current())) { 
     159            if (preg_match("/^$start.*/i", $splFileObject->current())) { 
    144160                return array('start' => ($line - $i), 'end' => $end); 
    145161            } 
    146              
    147             $splFileObject->next(); 
    148162        } 
    149163    }   
     
    179193    } 
    180194     
    181     public function getRewriteStr($rewritefile, $points, $discArray) 
    182     { 
    183         $fileArray = file($rewritefile); 
    184  
    185         $rewriteStr = implode('', array_slice($fileArray, 0, $points['start'])); 
    186         $rewriteStr .=  'DTITLE='.$discArray['dartist'].' / '.$discArray['dtitle'].PHP_EOL. 
    187                         'DYEAR='.$discArray['dyear'].PHP_EOL. 
    188                         'DGENRE='.$discArray['dgenre'].PHP_EOL; 
     195    /** 
     196     *  
     197     * @param string | SPLFileInfo 
     198     * @param array  
     199     * @param array $disc 
     200     *  
     201     *  
     202     * NOTES: 
     203     * 0 
     204     * 1 
     205     * 2 <<if'start' ==3  'length' of array_slice is here 
     206     * 3 DTITLE <=rewrite_points['start']) 
     207     * 4 DYEAR 
     208     * 5 DGENRE 
     209     * 6 TTITLE0 
     210     * 7 TTITLE1 <=$rewrite_points['end'] (last track ) 
     211     * 8 EXTD=  
     212     */ 
     213    public function getRewriteStr($file, $rewrite_points, $disc) 
     214    { 
     215        $fileArray = file($file); 
     216 
     217        $rewriteStr = implode('', array_slice($fileArray, 0, $rewrite_points['start'])); 
     218        $rewriteStr .=  'DTITLE='.$disc['dartist'].' / '.$disc['dtitle'].PHP_EOL. 
     219                        'DYEAR='.$disc['dyear'].PHP_EOL. 
     220                        'DGENRE='.$disc['dgenre'].PHP_EOL; 
    189221        $trackStr = ''; 
    190         foreach ($discArray['tracks'] as $count => $track) { 
    191             $trackStr .= "TTITLE$count=".$track.PHP_EOL; 
     222        $trackCount = $rewrite_points['end'] - $rewrite_points['start'] - 3; 
     223        for ($i = 0; $i <= $trackCount; $i++) { 
     224            $track = isset($disc['tracks'][$i]) ? $disc['tracks'][$i] : false; 
     225            if (!$track) { 
     226                //@todo various fomart by sprintf 
     227                $trackStr .= "TTITLE$i=".$disc['dtitle'].'_'.($i+1).PHP_EOL; 
     228            } else { 
     229                $trackStr .= "TTITLE$i=".$track.PHP_EOL; 
     230            } 
    192231        } 
    193232        $rewriteStr .= $trackStr; 
    194         $rewriteStr .= implode('', array_slice($fileArray, $points['end'] +1)); 
     233        $rewriteStr .= implode('', array_slice($fileArray, $rewrite_points['end'] +1)); 
    195234 
    196235        //@todo 
  • lang/php/Diggin_CDDB/library/Diggin/CDDB/Exception.php

    r18918 r18937  
    99 *  
    1010 * @category   Diggin 
    11  * @package    Diggin_Service 
     11 * @package    Diggin_CDDB 
    1212 * @copyright  2006-2008 sasezaki (http://diggin.musicrider.com) 
    1313 * @license    http://framework.zend.com/license/new-bsd     New BSD License