1 package be
.nikiroo
.jvcard
.tui
.windows
;
4 import java
.io
.IOException
;
5 import java
.util
.ArrayList
;
6 import java
.util
.LinkedList
;
10 import jexer
.TApplication
;
11 import jexer
.TKeypress
;
13 import be
.nikiroo
.jvcard
.Card
;
14 import be
.nikiroo
.jvcard
.launcher
.CardResult
;
15 import be
.nikiroo
.jvcard
.launcher
.CardResult
.MergeCallback
;
16 import be
.nikiroo
.jvcard
.launcher
.Main
;
17 import be
.nikiroo
.jvcard
.parsers
.Format
;
19 public class TuiFileListWindow
extends TuiBrowserWindow
{
20 private TApplication app
;
21 private List
<String
> files
;
22 private List
<CardResult
> cards
;
24 public TuiFileListWindow(TApplication app
, List
<String
> files
) {
25 super(app
, "Contacts", false);
30 cards
= new ArrayList
<CardResult
>();
31 for (int i
= 0; i
< files
.size(); i
++) {
35 List
<String
> headers
= new ArrayList
<String
>();
37 List
<List
<String
>> dataLines
= new ArrayList
<List
<String
>>();
38 for (String file
: files
) {
39 List
<String
> listOfOneFile
= new ArrayList
<String
>(1);
40 listOfOneFile
.add(new File(file
).getName());
41 dataLines
.add(listOfOneFile
);
44 addKeyBinding(TKeypress
.kbQ
, new TAction() {
51 setData(headers
, dataLines
);
55 public void onAction(int selectedLine
, int selectedColumn
) {
57 @SuppressWarnings("unused")
58 TWindow w
= new TuiContactListWindow(app
, getCard(selectedLine
));
59 } catch (IOException e
) {
60 setMessage("Fail to get file: " + e
.getMessage(), true);
64 private Card
getCard(int index
) throws IOException
{
66 if (cards
.get(index
) == null) {
67 String file
= files
.get(index
);
68 CardResult cardResult
= retrieveCardResult(file
);
69 cards
.set(index
, cardResult
);
72 return cards
.get(index
).getCard();
75 private CardResult
retrieveCardResult(String file
) throws IOException
{
76 CardResult cardResult
= null;
77 final Card arr
[] = new Card
[4];
79 cardResult
= Main
.getCard(file
, new MergeCallback() {
81 public Card
merge(Card previous
, Card local
, Card server
,
92 cardResult
.getCard(); // throw IOE if sync issues
93 } catch (IOException e
) {
94 // Check if merge issue or something else I/O related
96 throw e
; // other I/O problems
98 // merge management: set all merge vars in
100 // make sure it has cards but mergeTargetFile
102 // (create then delete if needed)
104 setMessage("Merge error, please check/fix the merged contact", true);
106 // TODO: i18n + filename with numbers in it to
108 File a
= File
.createTempFile("Merge result ", ".vcf");
109 File p
= File
.createTempFile("Previous common version ", ".vcf");
110 File l
= File
.createTempFile("Local ", ".vcf");
111 File s
= File
.createTempFile("Remote ", ".vcf");
112 arr
[3].saveAs(a
, Format
.VCard21
);
113 arr
[0].saveAs(p
, Format
.VCard21
);
114 arr
[1].saveAs(l
, Format
.VCard21
);
115 arr
[2].saveAs(s
, Format
.VCard21
);
116 List
<String
> mfiles
= new LinkedList
<String
>();
117 mfiles
.add(a
.getAbsolutePath());
118 mfiles
.add(p
.getAbsolutePath());
119 mfiles
.add(l
.getAbsolutePath());
120 mfiles
.add(s
.getAbsolutePath());
122 * merger = new FileList(mfiles); merger.mergeRemoteState =
123 * arr[2].getContentState(false); merger.mergeSourceFile =
124 * files.get(index); merger.mergeTargetFile = a;
133 if (cardResult
.isSynchronised()) {
135 if (cardResult
.isChanged())
136 setMessage("card synchronised: changes from server", false);
138 setMessage("card synchronised: no changes", false);
145 private void setMessage(String message
, boolean error
) {
147 System
.err
.println(message
);
149 System
.out
.println(message
);