diff options
Diffstat (limited to 'lib/class')
-rw-r--r-- | lib/class/catalog.class.php | 6 | ||||
-rw-r--r-- | lib/class/vainfo.class.php | 43 |
2 files changed, 45 insertions, 4 deletions
diff --git a/lib/class/catalog.class.php b/lib/class/catalog.class.php index 153153e1..3285ca64 100644 --- a/lib/class/catalog.class.php +++ b/lib/class/catalog.class.php @@ -1074,7 +1074,7 @@ class Catalog { /* Record the reading of these tags */ debug_event('tag-read',"Reading Tags from $song->file",'5','ampache-catalog'); - $vainfo = new vainfo($song->file,'',$sort_pattern,$rename_pattern); + $vainfo = new vainfo($song->file,'','','',$sort_pattern,$rename_pattern); $vainfo->get_info(); /* Find the correct key */ @@ -1502,7 +1502,7 @@ class Catalog { $db_results = Dba::query($sql); // Now nuke the tags themselves - $sql = "DELETE FROM `tag` USING `tag` LEFT JOIN `tag_map` ON `tag`.`id`=`tag_map`.`tag_id` " . + $sql = "DELETE FROM `tag` USING `tag` LEFT JOIN `tag_map` ON `tag`.`map_id`=`tag_map`.`tag_id` " . "WHERE `tag_map`.`id` IS NULL"; $db_results = Dba::query($sql); @@ -2000,7 +2000,7 @@ debug_event('prefix',$prefix_pattern,'3'); public function insert_local_song($file,$file_info) { /* Create the vainfo object and get info */ - $vainfo = new vainfo($file,'',$this->sort_pattern,$this->rename_pattern); + $vainfo = new vainfo($file,'','','',$this->sort_pattern,$this->rename_pattern); $vainfo->get_info(); $key = get_tag_type($vainfo->tags); diff --git a/lib/class/vainfo.class.php b/lib/class/vainfo.class.php index 694c19b6..206a146c 100644 --- a/lib/class/vainfo.class.php +++ b/lib/class/vainfo.class.php @@ -28,6 +28,8 @@ class vainfo { /* Default Encoding */ var $encoding = ''; + var $encoding_id3v1 = ''; + var $encoding_id3v2 = ''; /* Loaded Variables */ var $filename = ''; @@ -36,6 +38,7 @@ class vainfo { /* Internal Information */ var $_raw = array(); + var $_raw2 = array(); var $_getID3 = ''; var $_iconv = false; var $_file_encoding = ''; @@ -47,7 +50,7 @@ class vainfo { * This function just sets up the class, it doesn't * actually pull the information */ - function vainfo($file,$encoding='',$dir_pattern,$file_pattern) { + function vainfo($file,$encoding='',$encoding_id3v1='',$encoding_id3v2='',$dir_pattern,$file_pattern) { $this->filename = $file; if ($encoding) { @@ -63,12 +66,50 @@ class vainfo { // Initialize getID3 engine $this->_getID3 = new getID3(); + + // get id3tag encodings + $this->_raw2 = $this->_getID3->analyze($file); + if(function_exists('mb_detect_encoding')) { + $this->encoding_id3v1 = array(); + $this->encoding_id3v1[] = mb_detect_encoding($this->_raw2['tags']['id3v1']['artist']['0']); + $this->encoding_id3v1[] = mb_detect_encoding($this->_raw2['tags']['id3v1']['album']['0']); + $this->encoding_id3v1[] = mb_detect_encoding($this->_raw2['tags']['id3v1']['genre']['0']); + $this->encoding_id3v1[] = mb_detect_encoding($this->_raw2['tags']['id3v1']['title']['0']); + array_multisort($this->encoding_id3v1); + array_splice($this->encoding_id3v1, -4, 3); + if($this->encoding_id3v1[0] != "ASCII") { + $this->encoding_id3v1 = $this->encoding_id3v1[0]; + } else { + $this->encoding_id3v1 = "ISO-8859-1"; + } + + + $this->encoding_id3v2 = array(); + $this->encoding_id3v2[] = mb_detect_encoding($this->_raw2['tags']['id3v2']['artist']['0']); + $this->encoding_id3v2[] = mb_detect_encoding($this->_raw2['tags']['id3v2']['album']['0']); + $this->encoding_id3v2[] = mb_detect_encoding($this->_raw2['tags']['id3v2']['genre']['0']); + $this->encoding_id3v2[] = mb_detect_encoding($this->_raw2['tags']['id3v2']['title']['0']); + array_multisort($this->encoding_id3v2); + array_splice($this->encoding_id3v2, -4, 3); + if($this->encoding_id3v2[0] != "ASCII"){ + $this->encoding_id3v2 = $this->encoding_id3v2[0]; + } else { + $this->encoding_id3v2 = "ISO-8859-1"; + } + } + else { + $this->encoding_id3v1 = $encoding_id3v1; + $this->encoding_id3v2 = $encoding_id3v2; + } + $this->_getID3->option_md5_data = false; $this->_getID3->option_md5_data_source = false; $this->_getID3->option_tags_html = false; $this->_getID3->option_extra_info = false; $this->_getID3->option_tag_lyrics3 = false; $this->_getID3->encoding = $this->encoding; + $this->_getID3->encoding_id3v1 = $this->encoding_id3v1; + $this->_getID3->encoding_id3v2 = $this->encoding_id3v2; $this->_getID3->option_tags_process = true; /* Check for ICONV */ |