/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package de.fatalix.book.convert;
import java.io.BufferedReader;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
*
* @author felixhusse1
*/
public class Converter {
private static String EBOOK_CONVERT = "C:\\Program Files\\Calibre2\\ebook-convert.exe";
private static String EPUB_FILE = "/Users/felixhusse1/Documents/fabian-books/Adler-Olsen, Jussi/Erbarmen (75)/Erbarmen - Adler-Olsen, Jussi.epub";
private static String MOBI_FILE = "/Users/felixhusse1/Documents/fabian-books/Adler-Olsen, Jussi/Erbarmen (75)/Erbarmen - Adler-Olsen, Jussi.mobi";
static public void main(String[] args) throws IOException, InterruptedException, ExecutionException {
convertAllFiles();
}
private static void convertAllFiles() throws IOException, InterruptedException, ExecutionException {
File folder = new File("/Users/felixhusse1/Documents/test");
File[] ebooks = folder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.contains("epub");
}
});
System.out.println("Converting " +ebooks.length + " books");
ExecutorService executorService = Executors.newFixedThreadPool(10);
Set<Callable<String>> callables = new HashSet<>();
for (File ebook : ebooks) {
ConverterTask task = new ConverterTask(ebook);
callables.add(task);
}
List<Future<String>> results = executorService.invokeAll(callables);
boolean running = true;
while (running) {
System.out.println("Check threads: " + results.size());
Thread.sleep(250);
for(Future<String> future : results){
System.out.println("future.get = " + future.get());
}
if (results.size() == ebooks.length) {
running = false;
}
else {
System.out.println("Finished: " + results.size());
}
}
executorService.shutdown();
System.out.println("Finished");
}
private static void copyAllFiles() throws IOException {
Path start = Paths.get("/Users/felixhusse1/Documents/fabian-books");
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
String filename = file.getFileName().toString();
if (filename.contains(".epub")) {
try {
Path destination = Paths.get("/Users/felixhusse1/Documents/only-epub", filename);
Files.copy(file, destination);
System.out.println("copied " + filename);
} catch (FileAlreadyExistsException ex) {
//IGNORE..ouch
}
}
return FileVisitResult.CONTINUE;
}
});
}
}