X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FMain.java;h=db4316e8c499d22fad8417bddde2fe2cb41f9c9e;hp=46eb0b5ab9fc08becb2b55924aa9ef2bb6b9f092;hb=68e370a441d8e6b10bfaa904ecacb29e7d6160d8;hpb=a6395bef99a8e917f67341ef1906917b87df24a4 diff --git a/src/be/nikiroo/fanfix/Main.java b/src/be/nikiroo/fanfix/Main.java index 46eb0b5..db4316e 100644 --- a/src/be/nikiroo/fanfix/Main.java +++ b/src/be/nikiroo/fanfix/Main.java @@ -14,6 +14,8 @@ import be.nikiroo.fanfix.reader.BasicReader; import be.nikiroo.fanfix.reader.BasicReader.ReaderType; import be.nikiroo.fanfix.supported.BasicSupport; import be.nikiroo.fanfix.supported.BasicSupport.SupportType; +import be.nikiroo.utils.Progress; +import be.nikiroo.utils.ui.UIUtils; /** * Main program entry point. @@ -22,7 +24,7 @@ import be.nikiroo.fanfix.supported.BasicSupport.SupportType; */ public class Main { private enum MainAction { - IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER + IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER, START, } /** @@ -46,9 +48,9 @@ public class Main { * target *
  • --read [id] ([chapter number]): read the given story from the library *
  • - *
  • --read-url [URL] ([cahpter number]): convert on the fly and read the + *
  • --read-url [URL] ([chapter number]): convert on the fly and read the * story, without saving it
  • - *
  • --list: list the stories present in the library
  • + *
  • --list ([type]): list the stories present in the library
  • *
  • --set-reader [reader type]: set the reader type to CLI or LOCAL for * this command
  • * @@ -62,7 +64,7 @@ public class Main { String typeString = null; String chapString = null; String target = null; - MainAction action = MainAction.HELP; + MainAction action = MainAction.START; Boolean plusInfo = null; boolean noMoreActions = false; @@ -154,20 +156,46 @@ public class Main { case SET_READER: exitCode = setReaderType(args[i]); break; + case START: + exitCode = 255; // not supposed to be selected by user + break; } } + final Progress mainProgress = new Progress(0, 80); + mainProgress.addProgressListener(new Progress.ProgressListener() { + private int current = mainProgress.getMin(); + + public void progress(Progress progress, String name) { + int diff = progress.getProgress() - current; + current += diff; + + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < diff; i++) { + builder.append('.'); + } + + System.err.print(builder.toString()); + + if (progress.isDone()) { + System.err.println(""); + } + } + }); + Progress pg = new Progress(); + mainProgress.addProgress(pg, mainProgress.getMax()); + if (exitCode != 255) { switch (action) { case IMPORT: - exitCode = imprt(urlString); + exitCode = imprt(urlString, pg); break; case EXPORT: - exitCode = export(luid, typeString, target); + exitCode = export(luid, typeString, target, pg); break; case CONVERT: exitCode = convert(urlString, typeString, target, - plusInfo == null ? false : plusInfo); + plusInfo == null ? false : plusInfo, pg); break; case LIST: exitCode = list(typeString); @@ -184,6 +212,11 @@ public class Main { break; case SET_READER: break; + case START: + UIUtils.setLookAndFeel(); + BasicReader.setDefaultReaderType(ReaderType.LOCAL); + BasicReader.getReader().start(null); + break; } } @@ -196,45 +229,20 @@ public class Main { } } - /** - * Return an {@link URL} from this {@link String}, be it a file path or an - * actual {@link URL}. - * - * @param sourceString - * the source - * - * @return the corresponding {@link URL} - * - * @throws MalformedURLException - * if this is neither a file nor a conventional {@link URL} - */ - private static URL getUrl(String sourceString) throws MalformedURLException { - if (sourceString == null || sourceString.isEmpty()) { - throw new MalformedURLException("Empty url"); - } - - URL source = null; - try { - source = new URL(sourceString); - } catch (MalformedURLException e) { - File sourceFile = new File(sourceString); - source = sourceFile.toURI().toURL(); - } - - return source; - } - /** * Import the given resource into the {@link Library}. * * @param urlString * the resource to import + * @param pg + * the optional progress reporter * * @return the exit return code (0 = success) */ - private static int imprt(String urlString) { + public static int imprt(String urlString, Progress pg) { try { - Story story = Instance.getLibrary().imprt(getUrl(urlString)); + Story story = Instance.getLibrary().imprt( + BasicReader.getUrl(urlString), pg); System.out.println(story.getMeta().getLuid() + ": \"" + story.getMeta().getTitle() + "\" imported."); } catch (IOException e) { @@ -254,10 +262,13 @@ public class Main { * the {@link OutputType} to use * @param target * the target + * @param pg + * the optional progress reporter * * @return the exit return code (0 = success) */ - private static int export(String luid, String typeString, String target) { + public static int export(String luid, String typeString, String target, + Progress pg) { OutputType type = OutputType.valueOfNullOkUC(typeString); if (type == null) { Instance.syserr(new Exception(trans(StringId.OUTPUT_DESC, @@ -266,7 +277,7 @@ public class Main { } try { - Instance.getLibrary().export(luid, type, target); + Instance.getLibrary().export(luid, type, target, pg); } catch (IOException e) { Instance.syserr(e); return 4; @@ -280,23 +291,13 @@ public class Main { * is passed, in which case all stories will be listed). * * @param typeString - * the {@link SupportType} to list the known stories of, or NULL - * to list all stories + * the type to list the known stories of, or NULL to list all + * stories * * @return the exit return code (0 = success) */ - private static int list(String typeString) { - SupportType type = null; - try { - type = SupportType.valueOfNullOkUC(typeString); - } catch (Exception e) { - Instance.syserr(new Exception( - trans(StringId.INPUT_DESC, typeString), e)); - return 1; - } - + private static int list(String type) { BasicReader.getReader().start(type); - return 0; } @@ -319,9 +320,9 @@ public class Main { try { BasicReader reader = BasicReader.getReader(); if (library) { - reader.setStory(story); + reader.setStory(story, null); } else { - reader.setStory(getUrl(story)); + reader.setStory(BasicReader.getUrl(story), null); } if (chapString != null) { @@ -355,16 +356,18 @@ public class Main { * @param infoCover * TRUE to also export the cover and info file, even if the given * {@link OutputType} does not usually save them + * @param pg + * the optional progress reporter * * @return the exit return code (0 = success) */ private static int convert(String urlString, String typeString, - String target, boolean infoCover) { + String target, boolean infoCover, Progress pg) { int exitCode = 0; String sourceName = urlString; try { - URL source = getUrl(urlString); + URL source = BasicReader.getUrl(urlString); sourceName = source.toString(); if (source.toString().startsWith("file://")) { sourceName = sourceName.substring("file://".length()); @@ -379,14 +382,21 @@ public class Main { } else { try { BasicSupport support = BasicSupport.getSupport(source); - + if (support != null) { - Story story = support.process(source); + Progress pgIn = new Progress(); + Progress pgOut = new Progress(); + if (pg != null) { + pg.setMax(2); + pg.addProgress(pgIn, 1); + pg.addProgress(pgOut, 1); + } + Story story = support.process(source, pgIn); try { target = new File(target).getAbsolutePath(); BasicOutput.getOutput(type, infoCover).process( - story, target); + story, target, pgOut); } catch (IOException e) { Instance.syserr(new IOException(trans( StringId.ERR_SAVING, target), e));