X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FMain.java;h=953bc45a50b776a99b533fab67bbd9dc5dafa7d9;hb=e10b51a2a23135fbdf9539933d7e729354e8ddcd;hp=813a9b40320758e42a4244778b5c86971cc95137;hpb=f569d249d96479f9da73e0b37d3f543fa41eeadc;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/Main.java b/src/be/nikiroo/fanfix/Main.java index 813a9b4..953bc45 100644 --- a/src/be/nikiroo/fanfix/Main.java +++ b/src/be/nikiroo/fanfix/Main.java @@ -21,11 +21,10 @@ import be.nikiroo.fanfix.reader.BasicReader; import be.nikiroo.fanfix.reader.Reader; import be.nikiroo.fanfix.reader.Reader.ReaderType; import be.nikiroo.fanfix.supported.BasicSupport; -import be.nikiroo.fanfix.supported.BasicSupport.SupportType; +import be.nikiroo.fanfix.supported.SupportType; import be.nikiroo.utils.Progress; import be.nikiroo.utils.Version; -import be.nikiroo.utils.serial.ConnectActionClient; -import be.nikiroo.utils.serial.Server; +import be.nikiroo.utils.serial.server.ServerObject; /** * Main program entry point. @@ -34,7 +33,7 @@ import be.nikiroo.utils.serial.Server; */ public class Main { private enum MainAction { - IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER, START, VERSION, SERVER, STOP_SERVER, REMOTE, + IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER, START, VERSION, SERVER, STOP_SERVER, REMOTE, SET_SOURCE, SET_TITLE, SET_AUTHOR } /** @@ -61,6 +60,9 @@ public class Main { *
  • --read-url [URL] ([chapter number]): convert on the fly and read the * story, without saving it
  • *
  • --list ([type]): list the stories present in the library
  • + *
  • --set-source [id] [new source]: change the source of the given story
  • + *
  • --set-title [id] [new title]: change the title of the given story
  • + *
  • --set-author [id] [new author]: change the author of the given story
  • *
  • --set-reader [reader type]: set the reader type to CLI, TUI or LOCAL * for this command
  • *
  • --version: get the version of the program
  • @@ -77,6 +79,8 @@ public class Main { String urlString = null; String luid = null; String sourceString = null; + String titleString = null; + String authorString = null; String chapString = null; String target = null; String key = null; @@ -98,8 +102,9 @@ public class Main { action = MainAction.valueOf(args[i].substring(2) .toUpperCase().replace("-", "_")); } catch (Exception e) { - Instance.syserr(new IllegalArgumentException( - "Unknown action: " + args[i], e)); + Instance.getTraceHandler().error( + new IllegalArgumentException("Unknown action: " + + args[i], e)); exitCode = 255; } } @@ -150,6 +155,33 @@ public class Main { exitCode = 255; } break; + case SET_SOURCE: + if (luid == null) { + luid = args[i]; + } else if (sourceString == null) { + sourceString = args[i]; + } else { + exitCode = 255; + } + break; + case SET_TITLE: + if (luid == null) { + luid = args[i]; + } else if (sourceString == null) { + titleString = args[i]; + } else { + exitCode = 255; + } + break; + case SET_AUTHOR: + if (luid == null) { + luid = args[i]; + } else if (sourceString == null) { + authorString = args[i]; + } else { + exitCode = 255; + } + break; case READ: if (luid == null) { luid = args[i]; @@ -199,9 +231,8 @@ public class Main { } else if (port == null) { port = Integer.parseInt(args[i]); - File remoteCacheDir = Instance.getRemoteDir(host); BasicLibrary lib = new RemoteLibrary(key, host, port); - lib = new CacheLibrary(remoteCacheDir, lib); + lib = new CacheLibrary(Instance.getRemoteDir(host), lib); BasicReader.setDefaultLibrary(lib); @@ -222,6 +253,9 @@ public class Main { int diff = progress.getProgress() - current; current += diff; + if (diff <= 0) + return; + StringBuilder builder = new StringBuilder(); for (int i = 0; i < diff; i++) { builder.append('.'); @@ -272,17 +306,43 @@ public class Main { break; case LIST: if (BasicReader.getReader() == null) { - Instance.syserr(new Exception( - "No reader type has been configured")); + Instance.getTraceHandler() + .error(new Exception( + "No reader type has been configured")); exitCode = 10; break; } exitCode = list(sourceString); break; + case SET_SOURCE: + try { + Instance.getLibrary().changeSource(luid, sourceString, pg); + } catch (IOException e1) { + Instance.getTraceHandler().error(e1); + exitCode = 21; + } + break; + case SET_TITLE: + try { + Instance.getLibrary().changeTitle(luid, titleString, pg); + } catch (IOException e1) { + Instance.getTraceHandler().error(e1); + exitCode = 22; + } + break; + case SET_AUTHOR: + try { + Instance.getLibrary().changeAuthor(luid, authorString, pg); + } catch (IOException e1) { + Instance.getTraceHandler().error(e1); + exitCode = 23; + } + break; case READ: if (BasicReader.getReader() == null) { - Instance.syserr(new Exception( - "No reader type has been configured")); + Instance.getTraceHandler() + .error(new Exception( + "No reader type has been configured")); exitCode = 10; break; } @@ -290,8 +350,9 @@ public class Main { break; case READ_URL: if (BasicReader.getReader() == null) { - Instance.syserr(new Exception( - "No reader type has been configured")); + Instance.getTraceHandler() + .error(new Exception( + "No reader type has been configured")); exitCode = 10; break; } @@ -307,15 +368,16 @@ public class Main { case VERSION: System.out .println(String.format("Fanfix version %s" - + "\nhttps://github.com/nikiroo/fanfix/" - + "\n\tWritten by Nikiroo", + + "%nhttps://github.com/nikiroo/fanfix/" + + "%n\tWritten by Nikiroo", Version.getCurrentVersion())); updates.ok(); // we consider it read break; case START: if (BasicReader.getReader() == null) { - Instance.syserr(new Exception( - "No reader type has been configured")); + Instance.getTraceHandler() + .error(new Exception( + "No reader type has been configured")); exitCode = 10; break; } @@ -327,11 +389,11 @@ public class Main { break; } try { - Server server = new RemoteLibraryServer(key, port); - server.start(); - System.out.println("Remote server started on: " + port); + ServerObject server = new RemoteLibraryServer(key, port); + server.setTraceHandler(Instance.getTraceHandler()); + server.run(); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); } return; case STOP_SERVER: @@ -340,22 +402,7 @@ public class Main { break; } - try { - final String fkey = key; - new ConnectActionClient(host, port, true) { - @Override - public void action(Version serverVersion) - throws Exception { - try { - send(new Object[] { fkey, "EXIT" }); - } catch (Exception e) { - Instance.syserr(e); - } - } - }.connect(); - } catch (IOException e) { - Instance.syserr(e); - } + new RemoteLibrary(key, host, port).exit(); break; case REMOTE: exitCode = 255; // should not be reachable (REMOTE -> START) @@ -363,13 +410,19 @@ public class Main { } } + try { + Instance.getTempFiles().close(); + } catch (IOException e) { + Instance.getTraceHandler() + .error(new IOException( + "Cannot dispose of the temporary files", e)); + } + if (exitCode == 255) { syntax(false); } - if (exitCode != 0) { - System.exit(exitCode); - } + System.exit(exitCode); } /** @@ -389,7 +442,7 @@ public class Main { System.out.println(story.getMeta().getLuid() + ": \"" + story.getMeta().getTitle() + "\" imported."); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); return 1; } @@ -415,15 +468,15 @@ public class Main { Progress pg) { OutputType type = OutputType.valueOfNullOkUC(typeString, null); if (type == null) { - Instance.syserr(new Exception(trans(StringId.OUTPUT_DESC, - typeString))); + Instance.getTraceHandler().error( + new Exception(trans(StringId.OUTPUT_DESC, typeString))); return 1; } try { Instance.getLibrary().export(luid, type, target, pg); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); return 4; } @@ -457,7 +510,7 @@ public class Main { } /** - * Start the CLI reader for this {@link Story}. + * Start the current reader for this {@link Story}. * * @param story * the LUID of the {@link Story} in the {@link LocalLibrary} @@ -483,17 +536,18 @@ public class Main { if (chapString != null) { try { reader.setChapter(Integer.parseInt(chapString)); - reader.read(); + reader.read(true); } catch (NumberFormatException e) { - Instance.syserr(new IOException( - "Chapter number cannot be parsed: " + chapString, e)); + Instance.getTraceHandler().error( + new IOException("Chapter number cannot be parsed: " + + chapString, e)); return 2; } } else { - reader.read(); + reader.read(true); } } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); return 1; } @@ -517,10 +571,11 @@ public class Main { * * @return the exit return code (0 = success) */ - private static int convert(String urlString, String typeString, + public static int convert(String urlString, String typeString, String target, boolean infoCover, Progress pg) { int exitCode = 0; + Instance.getTraceHandler().trace("Convert: " + urlString); String sourceName = urlString; try { URL source = BasicReader.getUrl(urlString); @@ -531,8 +586,9 @@ public class Main { OutputType type = OutputType.valueOfAllOkUC(typeString, null); if (type == null) { - Instance.syserr(new IOException(trans( - StringId.ERR_BAD_OUTPUT_TYPE, typeString))); + Instance.getTraceHandler().error( + new IOException(trans(StringId.ERR_BAD_OUTPUT_TYPE, + typeString))); exitCode = 2; } else { @@ -540,6 +596,8 @@ public class Main { BasicSupport support = BasicSupport.getSupport(source); if (support != null) { + Instance.getTraceHandler().trace( + "Support found: " + support.getClass()); Progress pgIn = new Progress(); Progress pgOut = new Progress(); if (pg != null) { @@ -548,31 +606,35 @@ public class Main { pg.addProgress(pgOut, 1); } - Story story = support.process(source, pgIn); + Story story = support.process(pgIn); try { target = new File(target).getAbsolutePath(); - BasicOutput.getOutput(type, infoCover).process( - story, target, pgOut); + BasicOutput.getOutput(type, infoCover, infoCover) + .process(story, target, pgOut); } catch (IOException e) { - Instance.syserr(new IOException(trans( - StringId.ERR_SAVING, target), e)); + Instance.getTraceHandler().error( + new IOException(trans(StringId.ERR_SAVING, + target), e)); exitCode = 5; } } else { - Instance.syserr(new IOException(trans( - StringId.ERR_NOT_SUPPORTED, source))); + Instance.getTraceHandler().error( + new IOException(trans( + StringId.ERR_NOT_SUPPORTED, source))); exitCode = 4; } } catch (IOException e) { - Instance.syserr(new IOException(trans(StringId.ERR_LOADING, - sourceName), e)); + Instance.getTraceHandler().error( + new IOException(trans(StringId.ERR_LOADING, + sourceName), e)); exitCode = 3; } } } catch (MalformedURLException e) { - Instance.syserr(new IOException(trans(StringId.ERR_BAD_URL, - sourceName), e)); + Instance.getTraceHandler() + .error(new IOException(trans(StringId.ERR_BAD_URL, + sourceName), e)); exitCode = 1; } @@ -638,8 +700,9 @@ public class Main { BasicReader.setDefaultReaderType(readerType); return 0; } catch (IllegalArgumentException e) { - Instance.syserr(new IOException("Unknown reader type: " - + readerTypeString, e)); + Instance.getTraceHandler().error( + new IOException("Unknown reader type: " + readerTypeString, + e)); return 1; } }