package org.jabref.gui.externalfiles; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import javafx.concurrent.Task; import org.jabref.logic.net.ProgressInputStream; import org.jabref.logic.net.URLDownload; import org.fxmisc.easybind.EasyBind; public class FileDownloadTask extends Task<Void> { private final URL source; private final Path destination; public FileDownloadTask(URL source, Path destination) { this.source = source; this.destination = destination; } @Override protected Void call() throws Exception { URLDownload download = new URLDownload(source); try (ProgressInputStream inputStream = download.asInputStream()) { EasyBind.subscribe( inputStream.totalNumBytesReadProperty(), bytesRead -> updateProgress(bytesRead.longValue(), inputStream.getMaxNumBytes())); Files.copy(inputStream, destination, StandardCopyOption.REPLACE_EXISTING); } return null; } }