filebot/source/net/filebot/similarity/TimeStampMetric.java

50 lines
1.1 KiB
Java

package net.filebot.similarity;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.temporal.ChronoUnit;
public class TimeStampMetric implements SimilarityMetric {
private long epoch;
public TimeStampMetric(int i, ChronoUnit unit) {
this.epoch = unit.getDuration().multipliedBy(i).toMillis();
}
@Override
public float getSimilarity(Object o1, Object o2) {
long t1 = getTimeStamp(o1);
long t2 = getTimeStamp(o2);
if (t1 > 0 && t2 > 0) {
float delta = Math.abs(t1 - t2);
return delta > epoch ? 0 : 1 - (delta / epoch);
}
return -1;
}
public long getTimeStamp(Object object) {
if (object instanceof File) {
File f = (File) object;
try {
BasicFileAttributes attr = Files.readAttributes(f.toPath(), BasicFileAttributes.class);
long creationTime = attr.creationTime().toMillis();
if (creationTime > 0) {
return creationTime;
} else {
return attr.lastModifiedTime().toMillis();
}
} catch (Exception e) {
// ignore, default to -1
}
}
return -1;
}
}