mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
50 lines
1.1 KiB
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;
|
|
}
|
|
}
|