X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=inline;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Ftui%2FMain.java;h=bf6ab4ba2c589a026d0285cde03fe8e397dc9f2f;hb=0b6140e4a200c4952c9dc003d8389f375191564e;hp=4884e70f8d44efb5835ebbf121332fdad2209f68;hpb=6b6a62ca3293ed5f52ee07ee3d39e920d42ba887;p=jvcard.git
diff --git a/src/be/nikiroo/jvcard/tui/Main.java b/src/be/nikiroo/jvcard/tui/Main.java
index 4884e70..bf6ab4b 100644
--- a/src/be/nikiroo/jvcard/tui/Main.java
+++ b/src/be/nikiroo/jvcard/tui/Main.java
@@ -3,12 +3,17 @@ package be.nikiroo.jvcard.tui;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
+import java.net.Socket;
import java.nio.charset.Charset;
import java.util.LinkedList;
import java.util.List;
+import be.nikiroo.jvcard.Card;
import be.nikiroo.jvcard.i18n.Trans;
import be.nikiroo.jvcard.i18n.Trans.StringId;
+import be.nikiroo.jvcard.remote.Command.Verb;
+import be.nikiroo.jvcard.remote.SimpleSocket;
+import be.nikiroo.jvcard.resources.Bundles;
import be.nikiroo.jvcard.tui.panes.FileList;
import com.googlecode.lanterna.gui2.Window;
@@ -23,8 +28,13 @@ import com.googlecode.lanterna.input.KeyStroke;
*
*/
public class Main {
+ // TODO: move Main to be.nikiroo.jvcard, use introspection to load the other
+ // main classes, allow the 3 programs to run from this new Main
+ // also requires StringUtils/... in a new package
+ private int TODO;
+
public static final String APPLICATION_TITLE = "jVcard";
- public static final String APPLICATION_VERSION = "1.0-beta2";
+ public static final String APPLICATION_VERSION = "1.0-beta2-dev";
static private Trans transService;
@@ -62,7 +72,8 @@ public class Main {
* Start the application.
*
* @param args
- * the parameters (see --help to know hich are supported)
+ * the parameters (see --help to know which are
+ * supported)
*/
public static void main(String[] args) {
Boolean textMode = null;
@@ -72,9 +83,9 @@ public class Main {
// get the "system default" language to help translate the --help
// message if needed
String language = null;
- transService = new Trans(null);
+ transService = new Trans(language);
- List files = new LinkedList();
+ List files = new LinkedList();
for (int index = 0; index < args.length; index++) {
String arg = args[index];
if (!noMoreParams && arg.equals("--")) {
@@ -89,8 +100,10 @@ public class Main {
+ "\t--tui: force pure text mode even if swing treminal is available\n"
+ "\t--gui: force swing terminal mode\n"
+ "\t--noutf: force non-utf8 mode if you need it\n"
+ + "\t--config DIRECTORY: force the given directory as a CONFIG_DIR\n"
+ "everyhing else is either a file to open or a directory to open\n"
- + "(we will only open 1st level files in given directories)");
+ + "(we will only open 1st level files in given directories)\n"
+ + "('jvcard://hostname:8888/file' links -- or without 'file' -- are also ok)\n");
return;
} else if (!noMoreParams && arg.equals("--tui")) {
textMode = true;
@@ -103,6 +116,12 @@ public class Main {
if (index < args.length)
language = args[index];
transService = new Trans(language);
+ } else if (!noMoreParams && arg.equals("--config")) {
+ index++;
+ if (index < args.length) {
+ Bundles.setDirectory(args[index]);
+ transService = new Trans(language);
+ }
} else {
filesTried = true;
files.addAll(open(arg));
@@ -122,6 +141,8 @@ public class Main {
files.addAll(open("."));
}
+ // TODO error case when no file
+
Window win = new MainWindow(new FileList(files));
try {
@@ -141,21 +162,64 @@ public class Main {
*
* @return the list of opened files
*/
- static private List open(String path) {
- List files = new LinkedList();
-
- File file = new File(path);
- if (file.exists()) {
- if (file.isDirectory()) {
- for (File subfile : file.listFiles()) {
- if (!subfile.isDirectory())
- files.add(subfile);
- }
+ static private List open(String path) {
+ List files = new LinkedList();
+
+ if (path != null && path.startsWith("jvcard://")) {
+ if (path.endsWith("/")) {
+ files.addAll(list(path));
} else {
- files.add(file);
+ files.add(path);
}
} else {
- System.err.println("File or directory not found: \"" + path + "\"");
+ File file = new File(path);
+ if (file.exists()) {
+ if (file.isDirectory()) {
+ for (File subfile : file.listFiles()) {
+ if (!subfile.isDirectory())
+ files.add(subfile.getAbsolutePath());
+ }
+ } else {
+ files.add(file.getAbsolutePath());
+ }
+ } else {
+ System.err.println("File or directory not found: \"" + path
+ + "\"");
+ }
+ }
+
+ return files;
+ }
+
+ /**
+ * List all the available {@link Card}s on the given network location (which
+ * is expected to be a jVCard remote server, obviously).
+ *
+ * @param path
+ * the jVCard remote server path (e.g.:
+ * jvcard://localhost:4444/)
+ *
+ * @return the list of {@link Card}s
+ */
+ static private List list(String path) {
+ List files = new LinkedList();
+
+ try {
+ String host = path.split("\\:")[1].substring(2);
+ int port = Integer.parseInt(path.split("\\:")[2].replaceAll("/$",
+ ""));
+ SimpleSocket s = new SimpleSocket(new Socket(host, port),
+ "sync client");
+ s.open(true);
+
+ s.sendCommand(Verb.LIST);
+ for (String p : s.receiveBlock()) {
+ files.add(path
+ + p.substring(StringUtils.fromTime(0).length() + 1));
+ }
+ s.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
return files;