X-Git-Url: http://git.nikiroo.be/?p=jvcard.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Ftui%2FMain.java;h=bf6ab4ba2c589a026d0285cde03fe8e397dc9f2f;hp=4c3f7623b96828ad1fd9573efadc9735f1c55cec;hb=0b6140e4a200c4952c9dc003d8389f375191564e;hpb=adf9c44949504512002cff293641225b31ec568a diff --git a/src/be/nikiroo/jvcard/tui/Main.java b/src/be/nikiroo/jvcard/tui/Main.java index 4c3f762..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,6 +28,11 @@ 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-dev"; @@ -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; @@ -170,8 +234,10 @@ public class Main { Field charset = Charset.class.getDeclaredField("defaultCharset"); charset.setAccessible(true); charset.set(null, null); - } catch (SecurityException | NoSuchFieldException - | IllegalArgumentException | IllegalAccessException e) { + } catch (SecurityException e) { + } catch (NoSuchFieldException e) { + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { } } }