2014-04-19 02:30:29 -04:00
|
|
|
package net.filebot.mediainfo;
|
2013-12-20 00:32:28 -05:00
|
|
|
|
2016-03-11 03:16:59 -05:00
|
|
|
import static net.filebot.Logging.*;
|
|
|
|
|
2013-12-20 00:32:28 -05:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileFilter;
|
|
|
|
|
2014-04-19 02:30:29 -04:00
|
|
|
import net.filebot.mediainfo.MediaInfo.StreamKind;
|
2013-12-20 00:32:28 -05:00
|
|
|
|
|
|
|
public class MediaDurationFilter implements FileFilter {
|
|
|
|
|
|
|
|
private final MediaInfo mediaInfo = new MediaInfo();
|
|
|
|
|
|
|
|
private final long min;
|
|
|
|
private final long max;
|
|
|
|
private final boolean acceptByDefault;
|
|
|
|
|
|
|
|
public MediaDurationFilter(long min) {
|
|
|
|
this(min, Long.MAX_VALUE, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public MediaDurationFilter(long min, long max, boolean acceptByDefault) {
|
|
|
|
this.min = min;
|
|
|
|
this.max = max;
|
|
|
|
this.acceptByDefault = acceptByDefault;
|
|
|
|
}
|
|
|
|
|
|
|
|
public long getDuration(File file) {
|
|
|
|
synchronized (mediaInfo) {
|
2016-03-11 03:16:59 -05:00
|
|
|
try {
|
|
|
|
String duration = mediaInfo.open(file).get(StreamKind.General, 0, "Duration");
|
|
|
|
return Long.parseLong(duration);
|
|
|
|
} catch (Exception e) {
|
|
|
|
debug.warning("Failed to read video duration: " + e.getMessage());
|
2013-12-20 00:32:28 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean accept(File file) {
|
|
|
|
long d = getDuration(file);
|
|
|
|
if (d >= 0) {
|
|
|
|
return d >= min && d <= max;
|
|
|
|
}
|
|
|
|
return acceptByDefault;
|
|
|
|
}
|
|
|
|
}
|