libpurple/protocols/novell/nmcontact.c

Fri, 24 Mar 2017 02:23:46 +0300

author
qarkai <qarkai@gmail.com>
date
Fri, 24 Mar 2017 02:23:46 +0300
branch
string-comparison-r2
changeset 38259
c593fc9f5438
parent 19859
71d37b57eff2
child 38358
30ba44276e74
permissions
-rw-r--r--

Replace strcmp() with purple_strequal()
Didn't touch finch/libgnt files

8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1 /*
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
2 * nmcontact.c
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 *
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
4 * Copyright (c) 2004 Novell, Inc. All Rights Reserved.
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
5 *
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
6 * This program is free software; you can redistribute it and/or modify
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
7 * it under the terms of the GNU General Public License as published by
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
8 * the Free Software Foundation; version 2 of the License.
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 *
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
10 * This program is distributed in the hope that it will be useful,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
13 * GNU General Public License for more details.
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
14 *
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
15 * You should have received a copy of the GNU General Public License
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
16 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 15884
diff changeset
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
20
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21 #include <glib.h>
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
22 #include <string.h>
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
23 #include "nmcontact.h"
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 #include "nmfield.h"
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
25 #include "nmuser.h"
38259
c593fc9f5438 Replace strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 19859
diff changeset
26 #include "util.h"
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
27
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
28 struct _NMContact
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
29 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
30 int id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
31 int parent_id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
32 int seq;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
33 char *dn;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
34 char *display_name;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
35 NMUserRecord *user_record;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36 gpointer data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
37 int ref_count;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
38 };
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
39
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
40 struct _NMFolder
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
41 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
42 int id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
43 int seq;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
44 char *name;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
45 GSList *folders;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
46 GSList *contacts;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
47 int ref_count;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
48 };
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
49
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
50 static int count = 0;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
52 static void _release_folder_contacts(NMFolder * folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
53 static void _release_folder_folders(NMFolder * folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
54 static void _add_contacts(NMUser * user, NMFolder * folder, NMField * fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55 static void _add_folders(NMFolder * root, NMField * fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
56
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
57 /*********************************************************************
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
58 * Contact API
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
59 *********************************************************************/
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
60
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
61 NMContact *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
62 nm_create_contact()
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
63 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64 NMContact *contact = g_new0(NMContact, 1);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
65
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
66 contact->ref_count = 1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
67
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
68 purple_debug(PURPLE_DEBUG_INFO, "novell", "Creating contact, total=%d\n",
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
69 count++);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
70
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 return contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
72 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
73
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
74 /*
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
75 * This creates a contact for the contact list. The
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
76 * field array that is passed in should be a
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
77 * NM_A_FA_CONTACT array.
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
78 *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
79 */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
80 NMContact *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
81 nm_create_contact_from_fields(NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
82 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83 NMContact *contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
84 NMField *field;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
85
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
86 if ( fields == NULL || fields->tag == NULL || fields->ptr_value == 0 ||
38259
c593fc9f5438 Replace strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 19859
diff changeset
87 !purple_strequal(fields->tag, NM_A_FA_CONTACT) )
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
88 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
89 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
90 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
91
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
92 contact = nm_create_contact();
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
93
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
94 if ((field = nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
95
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
96 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
97 contact->id = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
98
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
99 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
100
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
101 if ((field = nm_locate_field(NM_A_SZ_PARENT_ID, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
102
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
103 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
104 contact->parent_id = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
105
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
106 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
107
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
108 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
109 nm_locate_field(NM_A_SZ_SEQUENCE_NUMBER, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
110
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
111 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
112 contact->seq = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
113
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
114 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
115
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
116 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
117 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
118
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
119 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
120 contact->display_name = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
123
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
124 if ((field = nm_locate_field(NM_A_SZ_DN, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
125
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
126 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
127 contact->dn = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
128
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
129 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131 return contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
132 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
133
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
135 nm_contact_update_list_properties(NMContact * contact, NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
136 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 NMField *field;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
139 if (contact == NULL || fields == NULL || fields->ptr_value == 0)
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
141
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
142 if ((field = nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
143
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
144 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
145 contact->id = atoi((char *)field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
146
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
147 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
148
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
149 if ((field = nm_locate_field(NM_A_SZ_PARENT_ID, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
150
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
151 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
152 contact->parent_id = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
153
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
154 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
155
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
156 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
157 nm_locate_field(NM_A_SZ_SEQUENCE_NUMBER, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
158
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
159 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
160 contact->seq = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
161
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
162 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
163
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
164 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
165 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
166
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
167 if (field->ptr_value) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
168 if (contact->display_name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
169 g_free(contact->display_name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
170
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
171 contact->display_name = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
172 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
173
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
174 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
175
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
176 if ((field = nm_locate_field(NM_A_SZ_DN, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
177
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
178 if (field->ptr_value) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
179 if (contact->dn)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
180 g_free(contact->dn);
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
181
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
182 contact->dn = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
183 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
184
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
185 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
186 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
187
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
188 NMField *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
189 nm_contact_to_fields(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
190 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
191 NMField *fields = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
192
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
193 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
194 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
195
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
196 fields = nm_field_add_pointer(fields, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
197 g_strdup_printf("%d", contact->id), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
198
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
199 fields = nm_field_add_pointer(fields, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
200 g_strdup_printf("%d", contact->parent_id), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
201
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
202 fields = nm_field_add_pointer(fields, NM_A_SZ_SEQUENCE_NUMBER, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
203 g_strdup_printf("%d", contact->seq), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
204
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
205 if (contact->display_name != NULL) {
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
206 fields = nm_field_add_pointer(fields, NM_A_SZ_DISPLAY_NAME, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
207 g_strdup(contact->display_name), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
208 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
209
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
210 if (contact->dn != NULL) {
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
211 fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
212 g_strdup(contact->dn), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
213 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215 return fields;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
217
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
218 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
219 nm_contact_add_ref(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
220 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
221 if (contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
222 contact->ref_count++;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
223 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
224
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
225 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
226 nm_release_contact(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
227 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
228 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
229 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
230
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
231 if (--(contact->ref_count) == 0) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
232
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
233 purple_debug(PURPLE_DEBUG_INFO, "novell",
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
234 "Releasing contact, total=%d\n", --count);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
235
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
236 if (contact->display_name) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
237 g_free(contact->display_name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
238 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
239
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
240 if (contact->dn) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
241 g_free(contact->dn);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
242 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
243
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
244 if (contact->user_record) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
245 nm_release_user_record(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
246 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
247
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
248 g_free(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
249 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
250
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
251 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
252
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
253 const char *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
254 nm_contact_get_display_name(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
255 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
256 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
257 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
258
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
259 if (contact->user_record != NULL && contact->display_name == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
260 const char *full_name, *lname, *fname, *cn, *display_id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
261
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
262 full_name = nm_user_record_get_full_name(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
263 fname = nm_user_record_get_first_name(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
264 lname = nm_user_record_get_last_name(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
265 cn = nm_user_record_get_userid(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
266 display_id = nm_user_record_get_display_id(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
267
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
268 /* Try to build a display name. */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
269 if (full_name) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
270
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
271 contact->display_name = g_strdup(full_name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
272
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
273 } else if (fname && lname) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
274
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
275 contact->display_name = g_strdup_printf("%s %s", fname, lname);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
276
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
277 } else {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
278
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
279 /* If auth attribute is set use it */
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
280 if (nm_user_record_get_auth_attr(contact->user_record) &&
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
281 display_id != NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
282
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
283 contact->display_name = g_strdup(display_id);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
284
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
285 } else {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
286
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
287 /* Use CN or display id */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
288 if (cn) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
289
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
290 contact->display_name = g_strdup(cn);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
291
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
292 } else if (display_id) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
293
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
294 contact->display_name = g_strdup(display_id);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
295
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
296 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
297
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
298 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
299
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
300 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
301 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
302
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
303 return contact->display_name;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
304 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
305
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
306 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
307 nm_contact_set_display_name(NMContact * contact, const char *display_name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
308 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
309 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
310 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
311
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
312 if (contact->display_name) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
313 g_free(contact->display_name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
314 contact->display_name = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
315 }
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
316
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
317 if (display_name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
318 contact->display_name = g_strdup(display_name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
319 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
320
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
321 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
322 nm_contact_set_dn(NMContact * contact, const char *dn)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
323 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
324 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
325 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
326
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
327 if (contact->dn) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
328 g_free(contact->dn);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
329 contact->dn = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
330 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
331
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
332 if (dn)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
333 contact->dn = g_strdup(dn);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
334 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
335
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
336 const char *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
337 nm_contact_get_dn(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
338 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
339 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
340 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
341
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
342 return contact->dn;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
343 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
344
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
345 gpointer
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
346 nm_contact_get_data(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
347 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
348 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
349 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
350
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
351 return contact->data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
352 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
353
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
354 int
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
355 nm_contact_get_id(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
356 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
357 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
358 return -1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
359
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
360 return contact->id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
361 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
362
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
363 int
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
364 nm_contact_get_parent_id(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
365 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
366 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
367 return -1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
368
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
369 return contact->parent_id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
370 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
371
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
372 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
373 nm_contact_set_data(NMContact * contact, gpointer data)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
374 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
375 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
376 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
377
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
378 contact->data = data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
379 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
380
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
381 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
382 nm_contact_set_user_record(NMContact * contact, NMUserRecord * user_record)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
383 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
384 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
385 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
386
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
387 if (contact->user_record) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
388 nm_release_user_record(contact->user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
389 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
390
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
391 nm_user_record_add_ref(user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
392 contact->user_record = user_record;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
393 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
394
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
395 NMUserRecord *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
396 nm_contact_get_user_record(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
397 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
398 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
399 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
400
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
401 return contact->user_record;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
402 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
403
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
404 const char *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
405 nm_contact_get_userid(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
406 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
407 NMUserRecord *user_record;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
408 const char *userid = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
409
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
410 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
411 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
412
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
413 user_record = nm_contact_get_user_record(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
414 if (user_record) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
415 userid = nm_user_record_get_userid(user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
416 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
417
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
418 return userid;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
419 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
420
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
421 const char *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
422 nm_contact_get_display_id(NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
423 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
424 NMUserRecord *user_record;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
425 const char *id = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
426
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
427 if (contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
428 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
429
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
430 user_record = nm_contact_get_user_record(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
431 if (user_record) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
432 id = nm_user_record_get_display_id(user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
433 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
434
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
435 return id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
436 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
437
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
438
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
439 /*********************************************************************
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
440 * Folder API
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
441 *********************************************************************/
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
442
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
443 NMFolder *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
444 nm_create_folder(const char *name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
445 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
446 NMFolder *folder = g_new0(NMFolder, 1);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
447
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
448 if (name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
449 folder->name = g_strdup(name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
450
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
451 folder->ref_count = 1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
452
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
453 return folder;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
454 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
455
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
456 NMFolder *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
457 nm_create_folder_from_fields(NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
458 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
459 NMField *field;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
460 NMFolder *folder;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
461
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
462 if (fields == NULL || fields->ptr_value == 0)
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
463 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
464
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
465 folder = g_new0(NMFolder, 1);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
466
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
467 if ((field = nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
468
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
469 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
470 folder->id = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
471 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
472
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
473 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
474 nm_locate_field(NM_A_SZ_SEQUENCE_NUMBER, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
475
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
476 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
477 folder->seq = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
478 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
479
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
480 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
481 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
482
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
483 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
484 folder->name = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
485 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
486
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
487 folder->ref_count = 1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
488 return folder;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
489 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
490
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
491 NMField *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
492 nm_folder_to_fields(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
493 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
494 NMField *fields = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
495
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
496 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
497 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
498
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
499 fields = nm_field_add_pointer(fields, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
500 g_strdup_printf("%d", folder->id), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
501
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
502 fields = nm_field_add_pointer(fields, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
503 g_strdup("0"), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
504
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
505 fields = nm_field_add_pointer(fields, NM_A_SZ_TYPE, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
506 g_strdup("1"), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
507
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
508 fields = nm_field_add_pointer(fields, NM_A_SZ_SEQUENCE_NUMBER, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
509 g_strdup_printf("%d", folder->seq), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
510
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
511 if (folder->name != NULL) {
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
512 fields = nm_field_add_pointer(fields, NM_A_SZ_DISPLAY_NAME, 0, NMFIELD_METHOD_VALID, 0,
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
513 g_strdup(folder->name), NMFIELD_TYPE_UTF8);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
514 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
515
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
516
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
517 return fields;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
518 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
519
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
520 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
521 nm_folder_update_list_properties(NMFolder * folder, NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
522 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
523 NMField *field;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
524
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
525 if (folder == NULL || fields == NULL || fields->ptr_value == 0)
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
526 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
527
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
528 if ((field = nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
529
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
530 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
531 folder->id = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
532
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
533 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
534
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
535 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
536 nm_locate_field(NM_A_SZ_SEQUENCE_NUMBER, (NMField *) fields->ptr_value))) {
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
537
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
538 if (field->ptr_value)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
539 folder->seq = atoi((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
540
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
541 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
542
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
543 if ((field =
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
544 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
545
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
546 if (field->ptr_value) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
547 if (folder->name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
548 g_free(folder->name);
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
549
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
550 folder->name = g_strdup((char *) field->ptr_value);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
551 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
552
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
553 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
554
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
555 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
556
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
557 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
558 nm_release_folder(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
559 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
560 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
561 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
562
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
563 if (--(folder->ref_count) == 0) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
564 if (folder->name) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
565 g_free(folder->name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
566 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
567
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
568 if (folder->folders) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
569 _release_folder_folders(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
570 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
571
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
572 if (folder->contacts) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
573 _release_folder_contacts(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
574 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
575
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
576 g_free(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
577 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
578 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
579
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
580
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
581 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
582 nm_folder_add_ref(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
583 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
584 if (folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
585 folder->ref_count++;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
586 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
587
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
588 int
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
589 nm_folder_get_subfolder_count(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
590 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
591 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
592 return 0;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
593
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
594 if (folder->folders)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
595 return g_slist_length(folder->folders);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
596 else
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
597 return 0;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
598 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
599
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
600 NMFolder *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
601 nm_folder_get_subfolder(NMFolder * folder, int index)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
602 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
603 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
604 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
605
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
606 if (folder->folders)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
607 return (NMFolder *) g_slist_nth_data(folder->folders, index);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
608 else
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
609 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
610 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
611
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
612 int
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
613 nm_folder_get_contact_count(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
614 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
615 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
616 return 0;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
617
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
618 if (folder->contacts != NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
619 return g_slist_length(folder->contacts);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
620 else
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
621 return 0;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
622 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
623
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
624 NMContact *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
625 nm_folder_get_contact(NMFolder * folder, int index)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
626 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
627 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
628 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
629
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
630 if (folder->contacts)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
631 return (NMContact *) g_slist_nth_data(folder->contacts, index);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
632 else
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
633 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
634 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
635
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
636 const char *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
637 nm_folder_get_name(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
638 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
639 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
640 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
641
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
642 return folder->name;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
643 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
644
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
645 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
646 nm_folder_set_name(NMFolder * folder, const char *name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
647 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
648 if (folder == NULL || name == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
649 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
650
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
651 if (folder->name)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
652 g_free(folder->name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
653
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
654 folder->name = g_strdup(name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
655 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
656
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
657 int
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
658 nm_folder_get_id(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
659 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
660 if (folder == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
661 return -1;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
662 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
663
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
664 return folder->id;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
665 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
666
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
667 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
668 nm_folder_add_folder_to_list(NMFolder * root, NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
669 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
670 GSList *node;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
671
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
672 if (root == NULL || folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
673 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
674
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
675 node = root->folders;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
676 while (node) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
677 if (folder->seq <= ((NMFolder *) node->data)->seq) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
678 nm_folder_add_ref(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
679 root->folders = g_slist_insert_before(root->folders, node, folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
680 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
681 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
682 node = g_slist_next(node);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
683 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
684 if (node == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
685 nm_folder_add_ref(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
686 root->folders = g_slist_append(root->folders, folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
687 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
688 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
689
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
690 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
691 nm_folder_remove_contact(NMFolder * folder, NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
692 {
8770
4d4d463c174f [gaim-migrate @ 9531]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8769
diff changeset
693 GSList *node;
8769
139510c8cafb [gaim-migrate @ 9530]
Christian Hammond <chipx86@chipx86.com>
parents: 8684
diff changeset
694
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
695 if (folder == NULL || contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
696 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
697
8770
4d4d463c174f [gaim-migrate @ 9531]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8769
diff changeset
698 node = folder->contacts;
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
699 while (node) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
700 if (contact->id == ((NMContact *) (node->data))->id) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
701 folder->contacts = g_slist_remove(folder->contacts, node->data);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
702 nm_release_contact(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
703 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
704 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
705 node = g_slist_next(node);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
706 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
707 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
708
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
709 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
710 nm_folder_add_contact_to_list(NMFolder * root_folder, NMContact * contact)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
711 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
712 GSList *node = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
713 NMFolder *folder = root_folder;
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
714
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
715 if (folder == NULL || contact == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
716 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
717
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
718 /* Find folder to add contact to */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
719 if (contact->parent_id != 0) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
720 node = folder->folders;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
721 while (node) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
722 folder = (NMFolder *) node->data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
723 if (contact->parent_id == folder->id) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
724 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
725 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
726 folder = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
727 node = g_slist_next(node);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
728 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
729 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
730
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
731 /* Add contact to list */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
732 if (folder) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
733 node = folder->contacts;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
734 while (node) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
735 if (contact->seq <= ((NMContact *) (node->data))->seq) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
736 nm_contact_add_ref(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
737 folder->contacts =
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
738 g_slist_insert_before(folder->contacts, node, contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
739 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
740 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
741 node = g_slist_next(node);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
742 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
743
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
744 if (node == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
745 nm_contact_add_ref(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
746 folder->contacts = g_slist_append(folder->contacts, contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
747 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
748 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
749 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
750
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
751 void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
752 nm_folder_add_contacts_and_folders(NMUser * user, NMFolder * root,
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
753 NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
754 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
755 /* Add the contacts and folders from the field array */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
756 if (user && root && fields) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
757 _add_folders(root, fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
758 _add_contacts(user, root, fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
759 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
760 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
761
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
762 gpointer
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
763 nm_folder_find_item_by_object_id(NMFolder * root_folder, int object_id)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
764 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
765 int cnt, cnt2, i, j;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
766 gpointer item = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
767 NMFolder *folder;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
768 NMContact *contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
769
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
770 if (root_folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
771 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
772
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
773 /* Check all contacts for the top level folder */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
774 cnt = nm_folder_get_contact_count(root_folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
775 for (i = 0; i < cnt; i++) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
776 contact = nm_folder_get_contact(root_folder, i);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
777 if (contact && (contact->id == object_id)) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
778 item = contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
779 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
780 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
781 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
782
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
783 /* If we haven't found the item yet, check the subfolders */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
784 if (item == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
785 cnt = nm_folder_get_subfolder_count(root_folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
786 for (i = 0; (i < cnt) && (item == NULL); i++) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
787 folder = nm_folder_get_subfolder(root_folder, i);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
788
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
789 /* Check the id of this folder */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
790 if (folder && (folder->id == object_id)) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
791 item = folder;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
792 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
793 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
794
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
795 /* Check all contacts for this folder */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
796 cnt2 = nm_folder_get_contact_count(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
797 for (j = 0; j < cnt2; j++) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
798 contact = nm_folder_get_contact(folder, j);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
799 if (contact && (contact->id == object_id)) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
800 item = contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
801 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
802 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
803 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
804 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
805 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
806
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
807 return item;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
808 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
809
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
810 NMContact *
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
811 nm_folder_find_contact_by_userid(NMFolder * folder, const char *userid)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
812 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
813 int cnt, i;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
814 NMContact *tmp, *contact = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
815
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
816 if (folder == NULL || userid == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
817 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
818
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
819 cnt = nm_folder_get_contact_count(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
820 for (i = 0; i < cnt; i++) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
821 tmp = nm_folder_get_contact(folder, i);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
822 if (tmp && nm_utf8_str_equal(nm_contact_get_userid(tmp), userid)) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
823 contact = tmp;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
824 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
825 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
826 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
827
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
828 return contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
829 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
830
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
831 NMContact *
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
832 nm_folder_find_contact_by_display_id(NMFolder * folder, const char *display_id)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
833 {
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
834 int cnt, i;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
835 NMContact *tmp, *contact = NULL;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
836
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
837 if (folder == NULL || display_id == NULL)
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
838 return NULL;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
839
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
840 cnt = nm_folder_get_contact_count(folder);
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
841 for (i = 0; i < cnt; i++) {
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
842 tmp = nm_folder_get_contact(folder, i);
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
843 if (tmp && nm_utf8_str_equal(nm_contact_get_display_id(tmp), display_id)) {
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
844 contact = tmp;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
845 break;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
846 }
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
847 }
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
848
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
849 return contact;
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
850 }
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
851
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
852 NMContact *
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
853 nm_folder_find_contact(NMFolder * folder, const char *dn)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
854 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
855 int cnt, i;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
856 NMContact *tmp, *contact = NULL;
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
857
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
858 if (folder == NULL || dn == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
859 return NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
860
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
861 cnt = nm_folder_get_contact_count(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
862 for (i = 0; i < cnt; i++) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
863 tmp = nm_folder_get_contact(folder, i);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
864 if (tmp && nm_utf8_str_equal(nm_contact_get_dn(tmp), dn)) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
865 contact = tmp;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
866 break;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
867 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
868 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
869
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
870 return contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
871 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
872
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
873
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
874 /*********************************************************************
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
875 * Utility functions
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
876 *********************************************************************/
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
877
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
878 static void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
879 _release_folder_contacts(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
880 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
881 GSList *cnode;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
882 NMContact *contact;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
883
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
884 for (cnode = folder->contacts; cnode; cnode = cnode->next) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
885 contact = cnode->data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
886 cnode->data = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
887 nm_release_contact(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
888 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
889
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
890 g_slist_free(folder->contacts);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
891 folder->contacts = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
892 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
893
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
894 static void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
895 _release_folder_folders(NMFolder * folder)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
896 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
897 GSList *fnode;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
898 NMFolder *subfolder;
8684
7ec649752daa [gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
899
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
900 if (folder == NULL)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
901 return;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
902
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
903 for (fnode = folder->folders; fnode; fnode = fnode->next) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
904 subfolder = fnode->data;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
905 fnode->data = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
906 nm_release_folder(subfolder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
907 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
908
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
909 g_slist_free(folder->folders);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
910 folder->folders = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
911 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
912
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
913 static void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
914 _add_folders(NMFolder * root, NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
915 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
916 NMFolder *folder = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
917 NMField *locate = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
918
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
919 locate = nm_locate_field(NM_A_FA_FOLDER, fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
920 while (locate != NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
921
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
922 /* Create a new folder */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
923 folder = nm_create_folder_from_fields(locate);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
924
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
925 /* Add subfolder to roots folder list */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
926 nm_folder_add_folder_to_list(root, folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
927
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
928 /* Decrement the ref count */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
929 nm_release_folder(folder);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
930
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
931 /* Find the next folder */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
932 locate = nm_locate_field(NM_A_FA_FOLDER, locate+1);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
933
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
934 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
935 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
936
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
937 static void
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
938 _add_contacts(NMUser * user, NMFolder * folder, NMField * fields)
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
939 {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
940 NMContact *contact = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
941 NMField *locate = NULL, *details;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
942 NMUserRecord *user_record = NULL;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
943
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
944 locate = nm_locate_field(NM_A_FA_CONTACT, fields);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
945 while (locate != NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
946
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
947 /* Create a new contact from the fields */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
948 contact = nm_create_contact_from_fields(locate);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
949
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
950 /* Add it to our contact list */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
951 nm_folder_add_contact_to_list(folder, contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
952
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
953 /* Update the contact cache */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
954 nm_user_add_contact(user, contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
955
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
956 /* Update the user record cache */
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
957 if ((details = nm_locate_field(NM_A_FA_USER_DETAILS,
8933
0f1e8160581d [gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents: 8770
diff changeset
958 (NMField *) locate->ptr_value))) {
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
959 user_record = nm_find_user_record(user, nm_contact_get_dn(contact));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
960 if (user_record == NULL) {
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
961 user_record = nm_create_user_record_from_fields(details);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
962 nm_user_record_set_dn(user_record, nm_contact_get_dn(contact));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
963 nm_user_add_user_record(user, user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
964 nm_release_user_record(user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
965 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
966 nm_contact_set_user_record(contact, user_record);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
967 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
968
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
969 nm_release_contact(contact);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
970
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
971 locate = nm_locate_field(NM_A_FA_CONTACT, locate+1);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
972 }
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
973 }

mercurial