* allow AcoustID override mode that'll only use acoustid data as backup but prefer id3 tag if possible

This commit is contained in:
Reinhard Pointner 2013-03-13 16:14:23 +00:00
parent 768fcd3075
commit f3e5ab574b
1 changed files with 22 additions and 2 deletions

View File

@ -7,13 +7,16 @@ import static net.sourceforge.tuned.FileUtilities.*;
import java.awt.Component; import java.awt.Component;
import java.io.File; import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map.Entry; import java.util.Map.Entry;
import net.sourceforge.filebot.similarity.Match; import net.sourceforge.filebot.similarity.Match;
import net.sourceforge.filebot.web.AudioTrack; import net.sourceforge.filebot.web.AudioTrack;
import net.sourceforge.filebot.web.ID3Lookup;
import net.sourceforge.filebot.web.MusicIdentificationService; import net.sourceforge.filebot.web.MusicIdentificationService;
import net.sourceforge.filebot.web.SortOrder; import net.sourceforge.filebot.web.SortOrder;
@ -31,11 +34,28 @@ class AudioFingerprintMatcher implements AutoCompleteMatcher {
@Override @Override
public List<Match<File, ?>> match(List<File> files, SortOrder order, Locale locale, boolean autodetection, Component parent) throws Exception { public List<Match<File, ?>> match(List<File> files, SortOrder order, Locale locale, boolean autodetection, Component parent) throws Exception {
List<Match<File, ?>> matches = new ArrayList<Match<File, ?>>(); List<Match<File, ?>> matches = new ArrayList<Match<File, ?>>();
List<File> audioFiles = filter(files, AUDIO_FILES);
// check audio files against acoustid // check audio files against acoustid
for (Entry<File, AudioTrack> it : service.lookup(filter(files, AUDIO_FILES)).entrySet()) { for (Entry<File, AudioTrack> it : service.lookup(audioFiles).entrySet()) {
if (it.getKey().exists() && it.getValue() != null) { if (it.getKey().exists() && it.getValue() != null) {
matches.add(new Match<File, AudioTrack>(it.getKey(), it.getValue().clone())); AudioTrack track = it.getValue().clone();
// use AcoustID as default but prefer with ID3 data if available
if (!autodetection) {
AudioTrack id3 = new ID3Lookup().lookup(Collections.singleton(it.getKey())).get(it.getKey());
for (Field field : AudioTrack.class.getDeclaredFields()) {
if (!field.isAccessible()) {
field.setAccessible(true);
}
Object id3value = field.get(id3);
if (id3value != null && !id3value.toString().isEmpty()) {
field.set(track, id3value);
}
}
}
matches.add(new Match<File, AudioTrack>(it.getKey(), track));
} }
} }