Dependency fix + Local/Remote Library support
[fanfix.git] / src / be / nikiroo / fanfix / Main.java
index 85d74928458e1589926bd0e0ab0f8d34be725c78..a05df434fb81fdf8edbc57ce391ec78de940678b 100644 (file)
@@ -16,7 +16,7 @@ import be.nikiroo.fanfix.supported.BasicSupport;
 import be.nikiroo.fanfix.supported.BasicSupport.SupportType;
 import be.nikiroo.utils.Progress;
 import be.nikiroo.utils.Version;
-import be.nikiroo.utils.ui.UIUtils;
+import be.nikiroo.utils.serial.Server;
 
 /**
  * Main program entry point.
@@ -25,7 +25,7 @@ import be.nikiroo.utils.ui.UIUtils;
  */
 public class Main {
        private enum MainAction {
-               IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER, START, VERSION,
+               IMPORT, EXPORT, CONVERT, READ, READ_URL, LIST, HELP, SET_READER, START, VERSION, SERVER, REMOTE,
        }
 
        /**
@@ -52,9 +52,11 @@ public class Main {
         * <li>--read-url [URL] ([chapter number]): convert on the fly and read the
         * story, without saving it</li>
         * <li>--list ([type]): list the stories present in the library</li>
-        * <li>--set-reader [reader type]: set the reader type to CLI or LOCAL for
-        * this command</li>
+        * <li>--set-reader [reader type]: set the reader type to CLI, TUI or LOCAL
+        * for this command</li>
         * <li>--version: get the version of the program</li>
+        * <li>--server [port]: start a server on this port</li>
+        * <li>--remote [host] [port]: use a the given remote library</li>
         * </ul>
         * 
         * @param args
@@ -63,11 +65,13 @@ public class Main {
        public static void main(String[] args) {
                String urlString = null;
                String luid = null;
-               String typeString = null;
+               String sourceString = null;
                String chapString = null;
                String target = null;
                MainAction action = MainAction.START;
                Boolean plusInfo = null;
+               String host = null;
+               Integer port = null;
 
                boolean noMoreActions = false;
 
@@ -102,8 +106,8 @@ public class Main {
                        case EXPORT:
                                if (luid == null) {
                                        luid = args[i];
-                               } else if (typeString == null) {
-                                       typeString = args[i];
+                               } else if (sourceString == null) {
+                                       sourceString = args[i];
                                } else if (target == null) {
                                        target = args[i];
                                } else {
@@ -113,8 +117,8 @@ public class Main {
                        case CONVERT:
                                if (urlString == null) {
                                        urlString = args[i];
-                               } else if (typeString == null) {
-                                       typeString = args[i];
+                               } else if (sourceString == null) {
+                                       sourceString = args[i];
                                } else if (target == null) {
                                        target = args[i];
                                } else if (plusInfo == null) {
@@ -128,8 +132,8 @@ public class Main {
                                }
                                break;
                        case LIST:
-                               if (typeString == null) {
-                                       typeString = args[i];
+                               if (sourceString == null) {
+                                       sourceString = args[i];
                                } else {
                                        exitCode = 255;
                                }
@@ -157,12 +161,33 @@ public class Main {
                                break;
                        case SET_READER:
                                exitCode = setReaderType(args[i]);
+                               action = MainAction.START;
                                break;
                        case START:
                                exitCode = 255; // not supposed to be selected by user
                                break;
                        case VERSION:
                                exitCode = 255; // no arguments for this option
+                               break;
+                       case SERVER:
+                               if (port == null) {
+                                       port = Integer.parseInt(args[i]);
+                               } else {
+                                       exitCode = 255;
+                               }
+                               break;
+                       case REMOTE:
+                               if (host == null) {
+                                       host = args[i];
+                               } else if (port == null) {
+                                       port = Integer.parseInt(args[i]);
+                                       BasicReader
+                                                       .setDefaultLibrary(new RemoteLibrary(host, port));
+                                       action = MainAction.START;
+                               } else {
+                                       exitCode = 255;
+                               }
+                               break;
                        }
                }
 
@@ -214,16 +239,16 @@ public class Main {
                                updates.ok(); // we consider it read
                                break;
                        case EXPORT:
-                               exitCode = export(luid, typeString, target, pg);
+                               exitCode = export(luid, sourceString, target, pg);
                                updates.ok(); // we consider it read
                                break;
                        case CONVERT:
-                               exitCode = convert(urlString, typeString, target,
+                               exitCode = convert(urlString, sourceString, target,
                                                plusInfo == null ? false : plusInfo, pg);
                                updates.ok(); // we consider it read
                                break;
                        case LIST:
-                               exitCode = list(typeString);
+                               exitCode = list(sourceString);
                                break;
                        case READ:
                                exitCode = read(luid, chapString, true);
@@ -236,6 +261,7 @@ public class Main {
                                exitCode = 0;
                                break;
                        case SET_READER:
+                               exitCode = 255;
                                break;
                        case VERSION:
                                System.out
@@ -246,9 +272,23 @@ public class Main {
                                updates.ok(); // we consider it read
                                break;
                        case START:
-                               UIUtils.setLookAndFeel();
-                               BasicReader.setDefaultReaderType(ReaderType.LOCAL);
-                               BasicReader.getReader().start(null);
+                               BasicReader.getReader().browse(null);
+                               break;
+                       case SERVER:
+                               if (port == null) {
+                                       exitCode = 255;
+                                       break;
+                               }
+                               try {
+                                       Server server = new RemoteLibraryServer(port);
+                                       server.start();
+                                       System.out.println("Remote server started on: " + port);
+                               } catch (IOException e) {
+                                       Instance.syserr(e);
+                               }
+                               return;
+                       case REMOTE:
+                               exitCode = 255;
                                break;
                        }
                }
@@ -263,7 +303,7 @@ public class Main {
        }
 
        /**
-        * Import the given resource into the {@link Library}.
+        * Import the given resource into the {@link LocalLibrary}.
         * 
         * @param urlString
         *            the resource to import
@@ -287,7 +327,8 @@ public class Main {
        }
 
        /**
-        * Export the {@link Story} from the {@link Library} to the given target.
+        * Export the {@link Story} from the {@link LocalLibrary} to the given
+        * target.
         * 
         * @param luid
         *            the story LUID
@@ -320,17 +361,17 @@ public class Main {
        }
 
        /**
-        * List the stories of the given type from the {@link Library} (unless NULL
-        * is passed, in which case all stories will be listed).
+        * List the stories of the given source from the {@link LocalLibrary}
+        * (unless NULL is passed, in which case all stories will be listed).
         * 
-        * @param typeString
-        *            the type to list the known stories of, or NULL to list all
+        * @param source
+        *            the source to list the known stories of, or NULL to list all
         *            stories
         * 
         * @return the exit return code (0 = success)
         */
-       private static int list(String type) {
-               BasicReader.getReader().start(type);
+       private static int list(String source) {
+               BasicReader.getReader().browse(source);
                return 0;
        }
 
@@ -338,8 +379,8 @@ public class Main {
         * Start the CLI reader for this {@link Story}.
         * 
         * @param story
-        *            the LUID of the {@link Story} in the {@link Library} <b>or</b>
-        *            the {@link Story} {@link URL}
+        *            the LUID of the {@link Story} in the {@link LocalLibrary}
+        *            <b>or</b> the {@link Story} {@link URL}
         * @param chapString
         *            which {@link Chapter} to read (starting at 1), or NULL to get
         *            the {@link Story} description