import java.util.LinkedList;
import java.util.List;
-import javax.imageio.ImageIO;
-
import be.nikiroo.jvcard.Card;
import be.nikiroo.jvcard.Contact;
import be.nikiroo.jvcard.Data;
import be.nikiroo.jvcard.parsers.Format;
import be.nikiroo.jvcard.remote.Command;
import be.nikiroo.jvcard.remote.SimpleSocket;
-import be.nikiroo.jvcard.resources.Bundles;
-import be.nikiroo.jvcard.resources.StringUtils;
-import be.nikiroo.jvcard.resources.bundles.ColorBundle;
-import be.nikiroo.jvcard.resources.bundles.DisplayBundle;
-import be.nikiroo.jvcard.resources.bundles.RemoteBundle;
-import be.nikiroo.jvcard.resources.bundles.TransBundle;
-import be.nikiroo.jvcard.resources.enums.DisplayOption;
-import be.nikiroo.jvcard.resources.enums.StringId;
+import be.nikiroo.jvcard.resources.DisplayBundle;
+import be.nikiroo.jvcard.resources.DisplayOption;
+import be.nikiroo.jvcard.resources.RemoteBundle;
+import be.nikiroo.jvcard.resources.StringId;
+import be.nikiroo.jvcard.resources.TransBundle;
+import be.nikiroo.utils.IOUtils;
+import be.nikiroo.utils.Image;
+import be.nikiroo.utils.ImageUtils;
+import be.nikiroo.utils.StringUtils;
+import be.nikiroo.utils.Version;
+import be.nikiroo.utils.resources.Bundles;
/**
* This class contains the runnable Main method. It will parse the user supplied
* a MainWindow.
*
* @author niki
- *
+ *
*/
public class Main {
+ /** The name of the program */
static public final String APPLICATION_TITLE = "jVcard";
- static public final String APPLICATION_VERSION = "1.1-dev";
static private final int ERR_NO_FILE = 1;
static private final int ERR_SYNTAX = 2;
static private boolean forceComputedFn;
enum Mode {
- CONTACT_MANAGER, I18N, SERVER, LOAD_PHOTO, SAVE_PHOTO, SAVE_CONFIG, HELP
+ CONTACT_MANAGER, I18N, SERVER, LOAD_PHOTO, SAVE_PHOTO, SAVE_CONFIG, HELP, SAVE_TO,
}
/**
* Translate the given {@link StringId} into user text.
*
- * @param stringId
+ * @param id
* the ID to translate
* @param values
* the values to insert instead of the place holders in the
int port = -1;
Mode mode = Mode.CONTACT_MANAGER;
String format = null;
+ String output = null;
for (int index = 0; index < args.length; index++) {
String arg = args[index];
if (!noMoreParams && arg.equals("--")) {
}
format = args[index];
+ } else if (!noMoreParams && (arg.equals("--save-to"))) {
+ if (mode != Mode.CONTACT_MANAGER) {
+ SERR(StringId.CLI_SERR_MODES);
+ return;
+ }
+ mode = Mode.SAVE_TO;
+
+ index++;
+ if (index >= args.length) {
+ SERR(StringId.CLI_ERR_NOFILES);
+ return;
+ }
+
+ output = args[index];
} else {
filesTried = true;
files.addAll(open(arg));
}
new TransBundle().updateFile(dir); // default locale
- for (String lang : TransBundle.getKnownLanguages()) {
+ for (String lang : new TransBundle().getKnownLanguages()) {
new TransBundle(lang).updateFile(dir);
}
- new ColorBundle().updateFile(dir);
+ // new UIColors().updateFile(dir);
new DisplayBundle().updateFile(dir);
new RemoteBundle().updateFile(dir);
} catch (IOException e) {
ERR(StringId.CLI_ERR, StringId.CLI_ERR_NO_REMOTING,
ERR_INTERNAL);
return;
- } else {
- e.printStackTrace();
- ERR(StringId.CLI_ERR, StringId.CLI_ERR, ERR_INTERNAL);
- return;
}
+ e.printStackTrace();
+ ERR(StringId.CLI_ERR, StringId.CLI_ERR, ERR_INTERNAL);
+ return;
}
break;
}
.toLowerCase();
}
- String b64 = StringUtils.fromImage(f);
+ String b64;
+ Image img = new Image(IOUtils.toByteArray(f));
+ try {
+ b64 = img.toBase64();
+ } finally {
+ img.close();
+ }
// remove previous photos:
for (Data photo = contact
String filename = contact.toString(format, "");
File f = new File(dir, filename + ".png");
System.out.println("Saving " + f);
+ Image img = new Image(photo.getValue());
try {
- ImageIO.write(
- StringUtils.toImage(photo.getValue()),
- "png", f);
+ ImageUtils.getInstance().saveAsImage(img, f,
+ "png");
} catch (IOException e) {
System.err.println(trans(
StringId.CLI_ERR_CANNOT_SAVE_PHOTO,
if (!e.isCompiledIn()) {
ERR(StringId.CLI_ERR, StringId.CLI_ERR_NO_TUI, ERR_INTERNAL);
return;
- } else {
- e.printStackTrace();
- ERR(StringId.CLI_ERR, StringId.CLI_ERR, ERR_INTERNAL);
- return;
}
+ e.printStackTrace();
+ ERR(StringId.CLI_ERR, StringId.CLI_ERR, ERR_INTERNAL);
+ return;
}
break;
}
+ case SAVE_TO: {
+ try {
+ Card total = new Card(null, getCardFormat(output));
+
+ for (String file : files) {
+ try {
+ Card card = getCard(file, null).getCard();
+ card.unlink();
+ while (card.size() > 0) {
+ total.add(card.remove(0));
+ }
+ } catch (IOException e) {
+ System.err.println(trans(StringId.CLI_ERR_CANNOT_OPEN,
+ file));
+ }
+ }
+
+ total.saveAs(new File(output), getCardFormat(output));
+ } catch (IOException e) {
+ System.err.println(trans(StringId.CLI_ERR_CANNOT_OPEN, output));
+ }
+
+ break;
+ }
case HELP: {
- System.out.println(APPLICATION_TITLE + " " + APPLICATION_VERSION);
+ System.out.println(APPLICATION_TITLE + " "
+ + Version.getCurrentVersion());
System.out.println();
System.out.println(trans(StringId.CLI_HELP));
+ trans(StringId.CLI_HELP_MODE_LOAD_PHOTO));
System.out.println("\t--save-photo DIR FORMAT ... : "
+ trans(StringId.CLI_HELP_MODE_SAVE_PHOTO));
+ System.out.println("\t--save-to output(.vcf) ... : "
+ + trans(StringId.CLI_HELP_MODE_SAVE_TO));
System.out.println();
System.out.println(trans(StringId.CLI_HELP_OPTIONS));
System.out.println(trans(StringId.CLI_HELP_FOOTER));
System.out.println();
+ break;
}
}
}
*/
static public CardResult getCard(String input, MergeCallback callback)
throws IOException {
- boolean remote = false;
- Format format = Format.Abook;
- String ext = input;
- if (ext.contains(".")) {
- String tab[] = ext.split("\\.");
- if (tab.length > 1 && tab[tab.length - 1].equalsIgnoreCase("vcf")) {
- format = Format.VCard21;
- }
- }
-
- if (input.contains("://")) {
- format = Format.VCard21;
- remote = true;
- }
+ boolean remote = isFileRemote(input);
+ Format format = getCardFormat(input);
CardResult card = null;
try {
try {
for (Contact contact : card.getCard()) {
Data name = contact.getPreferredData("FN");
+ Data n = contact.getPreferredData("N");
+ boolean hasN = n != null && n.getValue().length() > 0;
if (name == null || name.getValue().length() == 0
- || forceComputedFn) {
+ || (forceComputedFn && hasN)) {
name.setValue(contact.toString(defaultFn, "").trim());
}
}
return card;
}
+ static private boolean isFileRemote(String input) {
+ return input.contains("://");
+ }
+
+ static Format getCardFormat(String input) {
+ if (isFileRemote(input)) {
+ return Format.VCard21;
+ }
+
+ Format format = Format.Abook;
+ String ext = input;
+ if (ext.contains(".")) {
+ String tab[] = ext.split("\\.");
+ if (tab.length > 1 && tab[tab.length - 1].equalsIgnoreCase("vcf")) {
+ format = Format.VCard21;
+ }
+ }
+
+ return format;
+ }
+
/**
* Open the given path and add all its files if it is a directory or just
* this one if not to the returned list.