|  |  |  | @ -28,12 +28,16 @@ import org.jaudiotagger.audio.AudioFileIO; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.audio.AudioHeader; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.FieldKey; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.Tag; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.id3.AbstractID3Tag; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.id3.ID3v24Frames; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.id3.ID3v24Tag; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.images.Artwork; | 
			
		
	
		
			
				
					|  |  |  |  | import org.jaudiotagger.tag.reference.GenreTypes; | 
			
		
	
		
			
				
					|  |  |  |  | import org.slf4j.Logger; | 
			
		
	
		
			
				
					|  |  |  |  | import org.slf4j.LoggerFactory; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.stereotype.Service; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.util.ObjectUtils; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import java.io.File; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.SortedSet; | 
			
		
	
	
		
			
				
					|  |  |  | @ -94,10 +98,71 @@ public class JaudiotaggerParser extends MetaDataParser { | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setTrackNumber(parseTrackNumber(getTagField(tag, FieldKey.TRACK))); | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setMusicBrainzReleaseId(getTagField(tag, FieldKey.MUSICBRAINZ_RELEASEID)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 String songArtist = getTagField(tag, FieldKey.ARTIST); | 
			
		
	
		
			
				
					|  |  |  |  |                 String albumArtist = getTagField(tag, FieldKey.ALBUM_ARTIST); | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setArtist(StringUtils.isBlank(songArtist) ? albumArtist : songArtist); | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setAlbumArtist(StringUtils.isBlank(albumArtist) ? songArtist : albumArtist); | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setArtist(getTagField(tag, FieldKey.ARTIST)); | 
			
		
	
		
			
				
					|  |  |  |  |                 metaData.setAlbumArtist(getTagField(tag, FieldKey.ALBUM_ARTIST)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (tag instanceof AbstractID3Tag && 0 < audioFile.getTag().getFieldCount()) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                     AbstractID3Tag id3Tag = (AbstractID3Tag)tag; | 
			
		
	
		
			
				
					|  |  |  |  |                     if (ID3v24Tag.RELEASE == id3Tag.getRelease() | 
			
		
	
		
			
				
					|  |  |  |  |                             && ID3v24Tag.MAJOR_VERSION == id3Tag.getMajorVersion() | 
			
		
	
		
			
				
					|  |  |  |  |                             && ID3v24Tag.REVISION == id3Tag.getRevision()) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                         audioFile.getTag().getFields().forEachRemaining(f -> { | 
			
		
	
		
			
				
					|  |  |  |  |                             switch (f.getId()) { | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_ALBUM: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (StringUtils.isBlank(metaData.getAlbumName())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setAlbumName(f.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_TITLE: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (StringUtils.isBlank(metaData.getTitle())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setTitle(f.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_YEAR: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (ObjectUtils.isEmpty(metaData.getYear())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setYear(parseYear(f.toString())); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_GENRE: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (StringUtils.isBlank(metaData.getGenre())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setGenre(mapGenre(f.toString())); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_SET: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (ObjectUtils.isEmpty(metaData.getDiscNumber())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setDiscNumber(parseInteger(f.toString())); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_TRACK: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (ObjectUtils.isEmpty(metaData.getTrackNumber())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setTrackNumber(parseTrackNumber(f.toString())); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_ARTIST: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (StringUtils.isBlank(metaData.getArtist())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setArtist(f.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 case ID3v24Frames.FRAME_ID_ACCOMPANIMENT: | 
			
		
	
		
			
				
					|  |  |  |  |                                     if (StringUtils.isBlank(metaData.getAlbumArtist())) { | 
			
		
	
		
			
				
					|  |  |  |  |                                         metaData.setAlbumArtist(f.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                                 default: | 
			
		
	
		
			
				
					|  |  |  |  |                                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                             } | 
			
		
	
		
			
				
					|  |  |  |  |                         }); | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 if (StringUtils.isBlank(metaData.getArtist())) { | 
			
		
	
		
			
				
					|  |  |  |  |                     metaData.setArtist(metaData.getAlbumArtist()); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 if (StringUtils.isBlank(metaData.getAlbumArtist())) { | 
			
		
	
		
			
				
					|  |  |  |  |                     metaData.setAlbumArtist(metaData.getArtist()); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             AudioHeader audioHeader = audioFile.getAudioHeader(); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |