~people-project/people-core/deep-refactoring

« back to all changes in this revision

Viewing changes to clients/friend/friend.vala

  • Committer: Ali Sabil
  • Date: 2009-01-13 18:23:49 UTC
  • Revision ID: ali.sabil@gmail.com-20090113182349-i58139nx9n1ifigt
- Removed the clients/ code

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
using GLib;
2
 
using Gee;
3
 
 
4
 
using People;
5
 
using PeopleUtils;
6
 
 
7
 
 
8
 
class People.Client.Friend {
9
 
 
10
 
        private Backend.ContactSourceFactory factory;
11
 
        private Backend.ContactSource ab;
12
 
 
13
 
        private static Gee.Map<string, string> ns_to_desc;
14
 
 
15
 
        Friend () {
16
 
                ns_to_desc = new HashMap<string, string> (str_hash, str_equal, str_equal);
17
 
                ns_to_desc.set ("identity.name.first", "First name");
18
 
                ns_to_desc.set ("identity.name.middle", "Middle name");
19
 
                ns_to_desc.set ("identity.name.last", "Last name");
20
 
                ns_to_desc.set ("communication.phone.home", "Home phone");
21
 
                ns_to_desc.set ("communication.phone.work", "Work phone");
22
 
                ns_to_desc.set ("communication.phone.mobile", "Mobile phone");
23
 
                ns_to_desc.set ("communication.email.home", "Home email");
24
 
                ns_to_desc.set ("communication.email.work", "Work email");
25
 
 
26
 
                factory = new Backend.Sqlite.ContactSourceFactory ();
27
 
 
28
 
                Map<string, string> parameters =
29
 
                                new HashMap<string, string> (str_hash, str_equal, str_equal);
30
 
                parameters.set ("db-path", "/tmp/people-sqlite.db");
31
 
 
32
 
                try {
33
 
                        ab = factory.request_contact_source (parameters);
34
 
                } catch (Backend.ContactSourceFactoryError e) {
35
 
                        stdout.printf ("failed to open the Address Book");
36
 
                }
37
 
        }
38
 
 
39
 
        /* --list */
40
 
        public void list () {
41
 
                AsyncSearch<Backend.Contact> search = ((Backend.DumpableContactSource) ab).dump ();
42
 
                search.hit_found += list_hit_found_callback;
43
 
                search.done += list_done_callback;
44
 
                search.start();
45
 
        }
46
 
 
47
 
        private static void list_hit_found_callback (AsyncSearch<Backend.Contact> search, Backend.Contact contact) {
48
 
                var fields = new Gee.HashSet<string> (str_hash, str_equal);
49
 
                fields.add ("identity.name.first");
50
 
                contact.get_fields (fields).add_callback (list_first_name_callback, contact);
51
 
        }
52
 
 
53
 
        private static void list_done_callback (AsyncSearch search) {
54
 
                search.stop();
55
 
        }
56
 
 
57
 
        private static void list_first_name_callback (AsyncOperation<Gee.Map<string, string> >op, void* data) {
58
 
                var contact = (Backend.Contact) data;
59
 
                stdout.printf ("- [%s]\t%s\n", contact.id, op.get_result ().get ("identity.name.first"));
60
 
        }
61
 
        /* end of --list */
62
 
 
63
 
        /* --display */
64
 
        public void display (string id) {
65
 
                ab.request_contact (id).add_callback (display_request_contact_callback);
66
 
        }
67
 
 
68
 
        private void display_request_contact_callback (AsyncOperation<Backend.Contact>op) {
69
 
                var contact = op.get_result ();
70
 
                contact.get_fields (ns_to_desc.get_keys ()).add_callback (display_get_fields_callback, contact);
71
 
        }
72
 
 
73
 
        private void display_get_fields_callback (AsyncOperation<Gee.Map<string, string> >op, void* data) {
74
 
                var contact = (Backend.Contact) data;
75
 
                try {
76
 
                        var fields = op.get_result ();
77
 
                        stdout.printf ("%s\t[%s]\n", contact.id, fields.get ("identity.name.first"));
78
 
                        foreach (string field in fields.get_keys ()) {
79
 
                                stdout.printf ("%s: %s\n", ns_to_desc.get (field), fields.get (field));
80
 
                        }
81
 
                } catch (Error e) {
82
 
                        warning ("%s", e.message);
83
 
                }
84
 
        }
85
 
        /* end of --display */
86
 
 
87
 
        /* --create */
88
 
        public void create() {
89
 
                ab.request_contact (null).add_callback(create_request_contact_callback);
90
 
        }
91
 
 
92
 
        private void create_request_contact_callback(AsyncOperation<Backend.Contact>op) {
93
 
                var contact = op.get_result ();
94
 
                contact.get_definable_fields ().add_callback (create_get_definable_fields_callback, contact);
95
 
        }
96
 
 
97
 
        private void create_get_definable_fields_callback(AsyncOperation<Gee.Set<string> > op, void* data) {
98
 
                var contact = (Backend.Contact) data;
99
 
                try {
100
 
                        var definable = op.get_result ();
101
 
                        contact.set_data ("definable", definable);
102
 
                        do_create_contact (contact);
103
 
                } catch (Error e) {
104
 
                        warning ("%s", e.message);
105
 
                }
106
 
        }
107
 
 
108
 
        private void do_create_contact (Backend.Contact contact) {
109
 
                Gee.Map<string, string> fields = new HashMap<string, string> (str_hash, str_equal, str_equal);
110
 
                var definable = (Gee.Set<string>) contact.get_data ("definable");
111
 
 
112
 
                foreach(string field in definable) {
113
 
                        var value = get_entry ("%s: ".printf (ns_to_desc.get (field)));
114
 
 
115
 
                        if(value != null)
116
 
                                fields.set (field, value);
117
 
                }
118
 
 
119
 
                contact.set_fields (fields).add_callback (create_contact_callback, contact);
120
 
        }
121
 
 
122
 
        private static void create_contact_callback(AsyncOperation<Gee.Set<string> > op, void* data) {
123
 
                var contact = (Backend.Contact) data;
124
 
                stdout.printf ("Contact created with %s.\n", contact.id);
125
 
        }
126
 
        /* end of --create */
127
 
 
128
 
        /* --delete */
129
 
        public void @delete (string id) {
130
 
                ab.request_contact (id).add_callback (delete_request_contact_callback);
131
 
        }
132
 
 
133
 
        private void delete_request_contact_callback (AsyncOperation<Backend.Contact> op) {
134
 
                var contact = op.get_result ();
135
 
                contact.delete ().add_callback (delete_contact_callback, contact.id);
136
 
        }
137
 
 
138
 
        private void delete_contact_callback (AsyncOperation<bool> op, void* data) {
139
 
                var id = (string) data;
140
 
                stdout.printf ("Contact %s deleted.\n", id);
141
 
        }
142
 
        /* end of --delete */
143
 
 
144
 
        /* --modify */
145
 
        public void modify (string id) {
146
 
                ab.request_contact (id).add_callback (modify_request_contact_callback);
147
 
        }
148
 
 
149
 
        private void modify_request_contact_callback(AsyncOperation<Backend.Contact> op) {
150
 
                var contact = op.get_result ();
151
 
                contact.get_definable_fields ().add_callback (modify_get_definable_fields_callback, contact);
152
 
        }
153
 
 
154
 
        private void modify_get_definable_fields_callback (AsyncOperation<Gee.Set<string> > op, void* data) {
155
 
                var contact = (Backend.Contact) data;
156
 
                contact.set_data ("definable", op.get_result());
157
 
                contact.get_defined_fields ().add_callback (modify_get_defined_fields_callback, contact);
158
 
        }
159
 
 
160
 
        private void modify_get_defined_fields_callback (AsyncOperation<Gee.Set<string> > op, void* data) {
161
 
                var contact = (Backend.Contact) data;
162
 
                contact.get_fields (op.get_result ()).add_callback (modify_get_fields_callback, contact);
163
 
        }
164
 
 
165
 
        private void modify_get_fields_callback (AsyncOperation<Gee.Map<string, string> > op, void* data) {
166
 
                var contact = (Backend.Contact) data;
167
 
                do_modify_contact (contact, op.get_result ());
168
 
        }
169
 
 
170
 
        private void do_modify_contact(Backend.Contact contact, Gee.Map<string, string> defined_fields) {
171
 
                Gee.Map<string, string> fields = new HashMap<string, string> (str_hash, str_equal, str_equal);
172
 
                var definable = (Gee.Set<string>) contact.get_data("definable");
173
 
 
174
 
                foreach (string field in definable) {
175
 
                        string current = defined_fields.get (field);
176
 
                        if (current == null) current = "undefined";
177
 
 
178
 
                        var value = get_entry ("%s [%s]: ".printf (ns_to_desc.get (field), current));
179
 
 
180
 
                        if (value != null) {
181
 
                                if (value == "*") value = null;
182
 
                                fields.set (field, value);
183
 
                        }
184
 
                }
185
 
 
186
 
                contact.set_fields (fields).add_callback (modify_contact_callback, contact.id);
187
 
        }
188
 
 
189
 
        private void modify_contact_callback(AsyncOperation<Gee.Map<string, string> > op, void* data) {
190
 
                var id = (string) data;
191
 
                stdout.printf ("Contact %s was modified.\n", id);
192
 
        }
193
 
        /* end of --modify */
194
 
 
195
 
        /**
196
 
         * Gets a text entry from the user.
197
 
         *
198
 
         * @param prompt the message prompted to the user
199
 
         * @return       a string containing the user entry or <code>null</code> if
200
 
         *               no entry was specified by the user
201
 
         */
202
 
        private static string? get_entry(string? prompt=null) {
203
 
                var s = new GLib.StringBuilder ();
204
 
 
205
 
                if (prompt != null)
206
 
                        stdout.printf (prompt);
207
 
 
208
 
                while (true) {
209
 
                        var c = (char) stdin.getc();
210
 
                        if (c == '\n')
211
 
                                break;
212
 
                        s.append_c(c);
213
 
                }
214
 
 
215
 
                if (s.len == 0)
216
 
                        return null;
217
 
                return s.str;
218
 
        }
219
 
 
220
 
        public static int main (string[] args) {
221
 
                var friend = new Friend();
222
 
 
223
 
                foreach (string arg in args) {
224
 
                        if (arg == "--list") {
225
 
                                friend.list ();
226
 
                                return 0;
227
 
                        } else if (arg == "--create") {
228
 
                                friend.create ();
229
 
                                return 0;
230
 
                        } else if (arg == "--delete") {
231
 
                                var id = get_entry ("Contact id: ");
232
 
 
233
 
                                if (id != null)
234
 
                                        friend.@delete (id);
235
 
                                return 0;
236
 
                        } else if (arg == "--modify") {
237
 
                                var id = get_entry ("Contact id: ");
238
 
 
239
 
                                if (id != null)
240
 
                                        friend.modify (id);
241
 
                                return 0;
242
 
                        } else if (arg == "--display") {
243
 
                                var id = get_entry ("Contact id: ");
244
 
 
245
 
                                if (id != null)
246
 
                                        friend.display (id);
247
 
                                return 0;
248
 
 
249
 
                        }
250
 
                }
251
 
 
252
 
                stdout.printf("Available options are:\n\n");
253
 
                stdout.printf("\t--list        lists the contacts\n");
254
 
                stdout.printf("\t--display     displays informations for a contact\n");
255
 
 
256
 
                stdout.printf("\v\t--create      creates a new contact\n");
257
 
                stdout.printf("\t--delete      deletes a contact\n");
258
 
                stdout.printf("\t--modify      modifies a contact (enter * to delete a field)\n");
259
 
 
260
 
                stdout.printf("\v\t--help        displays that help\n\n");
261
 
 
262
 
                return 0;
263
 
        }
264
 
 
265
 
}