package net.vhati.modmanager.core; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.vhati.ftldat.FTLDat; import net.vhati.modmanager.core.HashObserver; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * A thread to calculate MD5 hashes of files in the background. * * As each file is hashed, a class implementing HashObserver is notified. * Note: The callback on that class needs to be thread-safe. */ public class HashThread extends Thread { private static final Logger log = LogManager.getLogger(HashThread.class); private List<File> fileList = new ArrayList<File>(); private HashObserver hashObserver = null; public HashThread( File[] files, HashObserver hashObserver ) { this.fileList.addAll( Arrays.asList(files) ); this.hashObserver = hashObserver; } public void run() { for ( File f : fileList ) { String hash = calcFileMD5( f ); if ( hash != null ) { hashObserver.hashCalculated( f, hash ); } } log.info( "Background hashing finished." ); hashObserver.hashingEnded(); } private String calcFileMD5( File f ) { String result = null; try { result = FTLDat.calcFileMD5( f ); } catch ( Exception e ) { log.error( "Error while calculating hash for file: "+ f.getPath(), e ); } return result; } }