New option: save/load contacts' photos
[jvcard.git] / src / be / nikiroo / jvcard / tui / panes / ContactDetails.java
index 4cbbdf7d38e2e27a6264880123c647d3fd2f7410..5756c7cb1a25cd7aa6d8bde5ba379823f5455a13 100644 (file)
@@ -1,15 +1,11 @@
 package be.nikiroo.jvcard.tui.panes;
 
 import java.awt.Image;
-import java.io.ByteArrayInputStream;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
-import javax.imageio.ImageIO;
-import javax.xml.bind.DatatypeConverter;
-
 import be.nikiroo.jvcard.Contact;
 import be.nikiroo.jvcard.Data;
 import be.nikiroo.jvcard.TypeInfo;
@@ -151,23 +147,25 @@ public class ContactDetails extends MainContent {
                                        if (all) {
                                                for (Data data : contact.getData(field)) {
                                                        if (data.isPreferred()) {
-                                                               infoPanel
-                                                                               .addComponent(el.createLabel(StringUtils
-                                                                                               .padString(label, labelSize)
-                                                                                               + contact
-                                                                                                               .getPreferredDataValue(field)));
+                                                               infoPanel.addComponent(el
+                                                                               .createLabel(StringUtils.padString(
+                                                                                               label, labelSize)
+                                                                                               + data.toString()));
                                                        } else {
                                                                infoPanel
-                                                                               .addComponent(UiColors.Element.VIEW_CONTACT_NORMAL.createLabel(StringUtils
-                                                                                               .padString(label, labelSize)
-                                                                                               + contact
-                                                                                                               .getPreferredDataValue(field)));
+                                                                               .addComponent(UiColors.Element.VIEW_CONTACT_NORMAL
+                                                                                               .createLabel(StringUtils
+                                                                                                               .padString(label,
+                                                                                                                               labelSize)
+                                                                                                               + data.toString()));
                                                        }
                                                }
                                        } else {
+                                               String val = contact.getPreferredDataValue(field);
+                                               if (val == null)
+                                                       val = "";
                                                infoPanel.addComponent(el.createLabel(StringUtils
-                                                               .padString(label, labelSize)
-                                                               + contact.getPreferredDataValue(field)));
+                                                               .padString(label, labelSize) + val));
                                        }
                                } else {
                                        String label = info;
@@ -184,13 +182,12 @@ public class ContactDetails extends MainContent {
                        String notes = contact.getPreferredDataValue("NOTE");
                        if (notes == null)
                                notes = "";
-                       note.setText(notes.replaceAll("\\\\n", "\n"));
+                       note.setText(notes);
 
                        Data photo = contact.getPreferredData("PHOTO");
                        if (photo != null) {
                                TypeInfo encoding = null;
-                               for (int index = 0; index < photo.size(); index++) {
-                                       TypeInfo info = photo.get(index);
+                               for (TypeInfo info : photo) {
                                        if (info.getName() != null) {
                                                if (info.getName().equalsIgnoreCase("ENCODING"))
                                                        encoding = info;
@@ -203,10 +200,7 @@ public class ContactDetails extends MainContent {
                                                && encoding.getValue().equalsIgnoreCase("b")) {
 
                                        try {
-                                               image = ImageIO.read(new ByteArrayInputStream(
-                                                               DatatypeConverter.parseBase64Binary(photo
-                                                                               .getValue())));
-                                               image.toString();
+                                               image = StringUtils.toImage(photo.getValue());
                                        } catch (Exception e) {
                                                System.err.println("Cannot parse image for contact: "
                                                                + contact.getPreferredDataValue("UID"));
@@ -319,7 +313,7 @@ public class ContactDetails extends MainContent {
                        } else {
                                // TODO: configure size?
                                int w = getSize().getColumns() - 40;
-                               int h = getSize().getRows() - 5;
+                               int h = getSize().getRows() - 9;
                                if (w <= 0 || h <= 0)
                                        return null;