+ // TODO del, save...
+ actions.add(new KeyAction(Mode.CONTACT_LIST, KeyType.Enter,
+ StringId.KEY_ACTION_VIEW_CARD) {
+ private Object obj = null;
+
+ @Override
+ public Object getObject() {
+ if (obj == null) {
+ int index = getSelectedIndex();
+ if (index < 0 || index >= cards.size())
+ return null;
+
+ try {
+ if (cards.get(index) != null) {
+ obj = cards.get(index).getCard();
+ } else {
+ String file = files.get(index);
+
+ CardResult card = null;
+ final Card arr[] = new Card[4];
+ try {
+ card = Main.getCard(file, new MergeCallback() {
+ @Override
+ public Card merge(Card previous,
+ Card local, Card server,
+ Card autoMerged) {
+ arr[0] = previous;
+ arr[1] = local;
+ arr[2] = server;
+ arr[3] = autoMerged;
+
+ return null;
+ }
+ });
+
+ obj = card.getCard(); // throw IOE if problem
+ } catch (IOException e) {
+ if (arr[0] == null)
+ throw e;
+
+ // merge management: set all merge vars in
+ // merger,
+ // make sure it has cards but mergeTargetFile
+ // does not exist
+ // (create then delete if needed)
+ // TODO: i18n
+ setMessage(
+ "Merge error, please check/fix the merged contact",
+ true);
+
+ // TODO: i18n + filename with numbers in it to
+ // fix
+ File a = File.createTempFile("Merge result ",
+ ".vcf");
+ File p = File.createTempFile(
+ "Previous common version ", ".vcf");
+ File l = File.createTempFile("Local ", ".vcf");
+ File s = File.createTempFile("Remote ", ".vcf");
+ arr[3].saveAs(a, Format.VCard21);
+ arr[0].saveAs(p, Format.VCard21);
+ arr[1].saveAs(l, Format.VCard21);
+ arr[2].saveAs(s, Format.VCard21);
+ List<String> mfiles = new LinkedList<String>();
+ mfiles.add(a.getAbsolutePath());
+ mfiles.add(p.getAbsolutePath());
+ mfiles.add(l.getAbsolutePath());
+ mfiles.add(s.getAbsolutePath());
+ merger = new FileList(mfiles);
+ merger.mergeRemoteState = arr[2]
+ .getContentState(false);
+ merger.mergeSourceFile = files.get(index);
+ merger.mergeTargetFile = a;
+
+ obj = merger;
+ return obj;
+ }
+
+ cards.set(index, card);
+
+ invalidate();
+
+ if (card.isSynchronised()) {
+ // TODO i18n
+ if (card.isChanged())
+ setMessage(
+ "card synchronised: changes from server",
+ false);
+ else
+ setMessage("card synchronised: no changes",
+ false);
+ }
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ // TODO
+ setMessage("ERROR!", true);
+ }
+ }
+
+ return obj;
+ }
+
+ });
+
+ return actions;