libpurple/purpleperson.c

Thu, 22 Feb 2024 06:03:16 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 22 Feb 2024 06:03:16 -0600
changeset 42596
b64b96f3b781
parent 42594
eddde70cedd8
child 42615
2f3308794a8f
permissions
-rw-r--r--

Add a favorite property to PurpleContactInfo

This will be used in the future for toggling whether or not contacts are
favorited or starred.

Testing Done:
Ran the unit tests under valgrind.

Reviewed at https://reviews.imfreedom.org/r/2965/

41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
7 * source distribution.
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
12 * any later version.
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
17 * more details.
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
18 *
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "purpleperson.h"
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
25 #include "util.h"
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
26
42059
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
27 #include "util.h"
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
28
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 struct _PurplePerson {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 GObject parent;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
32 char *id;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
34 gchar *alias;
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
35 PurpleAvatar *avatar;
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
36 char *color;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
37
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 PurpleTags *tags;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 GPtrArray *contacts;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 };
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 enum {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 PROP_0,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 PROP_ID,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 PROP_ALIAS,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 PROP_AVATAR,
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
48 PROP_AVATAR_FOR_DISPLAY,
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
49 PROP_COLOR,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
50 PROP_COLOR_FOR_DISPLAY,
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 PROP_TAGS,
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
52 PROP_NAME_FOR_DISPLAY,
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
53 PROP_PRIORITY_CONTACT_INFO,
42584
687260353985 Make signal and property enums and initializers consistent
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42576
diff changeset
54 N_PROPERTIES,
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 };
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
58 static void
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
59 purple_person_priority_contact_info_notify_cb(GObject *obj,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
60 G_GNUC_UNUSED GParamSpec *pspec,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
61 gpointer data);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
62
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 /******************************************************************************
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 * Helpers
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 *****************************************************************************/
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 static void
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
67 purple_person_set_id(PurplePerson *person, const char *id) {
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 g_return_if_fail(PURPLE_IS_PERSON(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 g_free(person->id);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 if(id != NULL) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 person->id = g_strdup(id);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 } else {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 person->id = g_uuid_string_random();
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 g_object_notify_by_pspec(G_OBJECT(person), properties[PROP_ID]);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 static gint
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 purple_person_contact_compare(gconstpointer a, gconstpointer b) {
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
83 PurpleContactInfo *c1 = *(PurpleContactInfo **)a;
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
84 PurpleContactInfo *c2 = *(PurpleContactInfo **)b;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 PurplePresence *p1 = NULL;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 PurplePresence *p2 = NULL;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
88 p1 = purple_contact_info_get_presence(c1);
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
89 p2 = purple_contact_info_get_presence(c2);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 return purple_presence_compare(p1, p2);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 static void
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
95 purple_person_sort_contacts(PurplePerson *person,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
96 PurpleContactInfo *original_priority)
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
97 {
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
98 PurpleContactInfo *new_priority = NULL;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 guint n_items = person->contacts->len;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 g_ptr_array_sort(person->contacts, purple_person_contact_compare);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 /* Tell the list we update our stuff. */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 g_list_model_items_changed(G_LIST_MODEL(person), 0, n_items, n_items);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 /* See if the priority contact changed. */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 new_priority = g_ptr_array_index(person->contacts, 0);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 if(original_priority != new_priority) {
42314
37eca344465a Fix some issues with PurplePerson->avatar
Gary Kramlich <grim@reaperworld.com>
parents: 42312
diff changeset
109 PurpleAvatar *old_avatar = NULL;
37eca344465a Fix some issues with PurplePerson->avatar
Gary Kramlich <grim@reaperworld.com>
parents: 42312
diff changeset
110 PurpleAvatar *new_avatar = NULL;
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
111 GObject *obj = G_OBJECT(person);
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
112 const char *old_color = NULL;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
113 const char *new_color = NULL;
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
114
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
115 if(PURPLE_IS_CONTACT_INFO(original_priority)) {
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
116 old_avatar = purple_contact_info_get_avatar(original_priority);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
117 old_color = purple_contact_info_get_color(original_priority);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
118
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
119 g_signal_handlers_disconnect_by_func(original_priority,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
120 purple_person_priority_contact_info_notify_cb,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
121 person);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
122 }
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
123
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
124 if(PURPLE_IS_CONTACT_INFO(new_priority)) {
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
125 new_avatar = purple_contact_info_get_avatar(new_priority);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
126 new_color = purple_contact_info_get_color(new_priority);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
127
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
128 g_signal_connect_object(new_priority, "notify",
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
129 G_CALLBACK(purple_person_priority_contact_info_notify_cb),
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
130 person, 0);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
131 }
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
132
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
133 g_object_freeze_notify(obj);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
134 g_object_notify_by_pspec(obj, properties[PROP_NAME_FOR_DISPLAY]);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
135 g_object_notify_by_pspec(obj, properties[PROP_PRIORITY_CONTACT_INFO]);
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
136
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
137 /* If the color isn't overridden by the person, check if it has
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
138 * changed.
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
139 */
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
140 if(purple_strempty(person->color)) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
141 if(!purple_strequal(old_color, new_color)) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
142 g_object_notify_by_pspec(obj,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
143 properties[PROP_COLOR_FOR_DISPLAY]);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
144 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
145 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
146
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
147 /* If the person doesn't have an avatar set, check if the avatar
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
148 * changed and notify if it has.
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
149 */
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
150 if(!PURPLE_IS_AVATAR(person->avatar)) {
42314
37eca344465a Fix some issues with PurplePerson->avatar
Gary Kramlich <grim@reaperworld.com>
parents: 42312
diff changeset
151 if(old_avatar != new_avatar) {
37eca344465a Fix some issues with PurplePerson->avatar
Gary Kramlich <grim@reaperworld.com>
parents: 42312
diff changeset
152 g_object_notify_by_pspec(obj, properties[PROP_AVATAR_FOR_DISPLAY]);
37eca344465a Fix some issues with PurplePerson->avatar
Gary Kramlich <grim@reaperworld.com>
parents: 42312
diff changeset
153 }
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
154 }
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
155
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
156 g_object_thaw_notify(obj);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159
42059
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
160 /* This function is used by purple_person_matches to determine if a contact info
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
161 * matches the needle.
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
162 */
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
163 static gboolean
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
164 purple_person_matches_find_func(gconstpointer a, gconstpointer b) {
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
165 PurpleContactInfo *info = (gpointer)a;
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
166 const char *needle = b;
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
167
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
168 return purple_contact_info_matches(info, needle);
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
169 }
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
170
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 /******************************************************************************
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 * Callbacks
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 *****************************************************************************/
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 static void
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
175 purple_person_priority_contact_info_notify_cb(G_GNUC_UNUSED GObject *obj,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
176 GParamSpec *pspec,
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
177 gpointer data)
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
178 {
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
179 PurplePerson *person = data;
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
180 const char *property = NULL;
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
181
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
182 property = g_param_spec_get_name(pspec);
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
183
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
184 if(purple_strequal(property, "name-for-display")) {
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
185 g_object_notify_by_pspec(G_OBJECT(person),
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
186 properties[PROP_NAME_FOR_DISPLAY]);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
187 } else if(purple_strequal(property, "avatar")) {
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
188 g_object_notify_by_pspec(G_OBJECT(person),
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
189 properties[PROP_AVATAR_FOR_DISPLAY]);
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
190 } else if(purple_strequal(property, "color")) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
191 g_object_notify_by_pspec(G_OBJECT(person),
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
192 properties[PROP_COLOR_FOR_DISPLAY]);
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
193 }
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
194 }
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
195
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
196 static void
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 purple_person_presence_notify_cb(G_GNUC_UNUSED GObject *obj,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 G_GNUC_UNUSED GParamSpec *pspec,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 gpointer data)
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 {
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
201 PurplePerson *person = data;
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
202 PurpleContactInfo *current_priority = NULL;
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
203
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
204 current_priority = purple_person_get_priority_contact_info(person);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
205
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
206 purple_person_sort_contacts(person, current_priority);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 /******************************************************************************
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 * GListModel Implementation
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 *****************************************************************************/
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 static GType
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 purple_person_get_item_type(G_GNUC_UNUSED GListModel *list) {
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
214 return PURPLE_TYPE_CONTACT_INFO;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 static guint
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 purple_person_get_n_items(GListModel *list) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 PurplePerson *person = PURPLE_PERSON(list);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 return person->contacts->len;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 static gpointer
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 purple_person_get_item(GListModel *list, guint position) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 PurplePerson *person = PURPLE_PERSON(list);
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
227 PurpleContactInfo *info = NULL;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 if(position < person->contacts->len) {
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
230 info = g_ptr_array_index(person->contacts, position);
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
231 g_object_ref(info);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
234 return info;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 purple_person_list_model_init(GListModelInterface *iface) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 iface->get_item_type = purple_person_get_item_type;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 iface->get_n_items = purple_person_get_n_items;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 iface->get_item = purple_person_get_item;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 /******************************************************************************
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 * GObject Implementation
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 *****************************************************************************/
42576
ab1ca778ddb2 Make sure all of the final types in libpurple are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42314
diff changeset
247 G_DEFINE_FINAL_TYPE_WITH_CODE(PurplePerson, purple_person, G_TYPE_OBJECT,
ab1ca778ddb2 Make sure all of the final types in libpurple are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42314
diff changeset
248 G_IMPLEMENT_INTERFACE(G_TYPE_LIST_MODEL,
ab1ca778ddb2 Make sure all of the final types in libpurple are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42314
diff changeset
249 purple_person_list_model_init))
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 purple_person_get_property(GObject *obj, guint param_id, GValue *value,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 GParamSpec *pspec)
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 PurplePerson *person = PURPLE_PERSON(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 switch(param_id) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 case PROP_ID:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 g_value_set_string(value, purple_person_get_id(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 case PROP_ALIAS:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 g_value_set_string(value, purple_person_get_alias(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 case PROP_AVATAR:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 g_value_set_object(value, purple_person_get_avatar(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 break;
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
267 case PROP_AVATAR_FOR_DISPLAY:
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
268 g_value_set_object(value, purple_person_get_avatar_for_display(person));
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
269 break;
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
270 case PROP_COLOR:
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
271 g_value_set_string(value, purple_person_get_color(person));
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
272 break;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
273 case PROP_COLOR_FOR_DISPLAY:
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
274 g_value_set_string(value,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
275 purple_person_get_color_for_display(person));
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
276 break;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 case PROP_TAGS:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 g_value_set_object(value, purple_person_get_tags(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 break;
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
280 case PROP_NAME_FOR_DISPLAY:
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
281 g_value_set_string(value,
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
282 purple_person_get_name_for_display(person));
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
283 break;
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
284 case PROP_PRIORITY_CONTACT_INFO:
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 g_value_set_object(value,
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
286 purple_person_get_priority_contact_info(person));
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 default:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 purple_person_set_property(GObject *obj, guint param_id, const GValue *value,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 GParamSpec *pspec)
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 PurplePerson *person = PURPLE_PERSON(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 switch(param_id) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 case PROP_ID:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 purple_person_set_id(person, g_value_get_string(value));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 case PROP_ALIAS:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305 purple_person_set_alias(person, g_value_get_string(value));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 case PROP_AVATAR:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 purple_person_set_avatar(person, g_value_get_object(value));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 break;
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
310 case PROP_COLOR:
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
311 purple_person_set_color(person, g_value_get_string(value));
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
312 break;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 default:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 break;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 purple_person_dispose(GObject *obj) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321 PurplePerson *person = PURPLE_PERSON(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
322
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323 g_clear_object(&person->avatar);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 g_clear_object(&person->tags);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326 if(person->contacts != NULL) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327 g_ptr_array_free(person->contacts, TRUE);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328 person->contacts = NULL;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 G_OBJECT_CLASS(purple_person_parent_class)->dispose(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 purple_person_finalize(GObject *obj) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 PurplePerson *person = PURPLE_PERSON(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 g_clear_pointer(&person->id, g_free);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 g_clear_pointer(&person->alias, g_free);
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
340 g_clear_pointer(&person->color, g_free);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 G_OBJECT_CLASS(purple_person_parent_class)->finalize(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 purple_person_constructed(GObject *obj) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 PurplePerson *person = NULL;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 G_OBJECT_CLASS(purple_person_parent_class)->constructed(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 person = PURPLE_PERSON(obj);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 if(person->id == NULL) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 purple_person_set_id(person, NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 purple_person_init(PurplePerson *person) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 person->tags = purple_tags_new();
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360 person->contacts = g_ptr_array_new_full(0, (GDestroyNotify)g_object_unref);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 static void
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 purple_person_class_init(PurplePersonClass *klass) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 obj_class->get_property = purple_person_get_property;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 obj_class->set_property = purple_person_set_property;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369 obj_class->constructed = purple_person_constructed;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 obj_class->dispose = purple_person_dispose;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 obj_class->finalize = purple_person_finalize;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 /**
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 * PurplePerson:id:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 * The protocol specific id for the contact.
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 * Since: 3.0.0
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 properties[PROP_ID] = g_param_spec_string(
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 "id", "id",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 "The id of this contact",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 NULL,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 /**
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 * PurplePerson:alias:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 * The alias for this person. This is controlled by the libpurple user.
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 * Since: 3.0.0
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 properties[PROP_ALIAS] = g_param_spec_string(
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394 "alias", "alias",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 "The alias of this person.",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396 NULL,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399 /**
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 * PurplePerson:avatar:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 * The avatar for this person. This is controlled by the libpurple user,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 * which they can use to set a custom avatar.
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 * Since: 3.0.0
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 properties[PROP_AVATAR] = g_param_spec_object(
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408 "avatar", "avatar",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409 "The avatar of this person",
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
410 PURPLE_TYPE_AVATAR,
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413 /**
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
414 * PurplePerson:avatar-for-display
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
415 *
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
416 * The avatar to show for the person. If [property@Purple.Person:avatar] is
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
417 * set, it will be returned. Otherwise the value of
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
418 * [property@Purple.ContactInfo:avatar] for
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
419 * [property@Purple.Person:priority-contact-info] will be returned.
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
420 *
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
421 * Since: 3.0.0
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
422 */
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
423 properties[PROP_AVATAR_FOR_DISPLAY] = g_param_spec_object(
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
424 "avatar-for-display", "avatar-for-display",
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
425 "The avatar to display for this person",
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
426 PURPLE_TYPE_AVATAR,
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
427 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
428
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
429 /**
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
430 * PurplePerson:color:
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
431 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
432 * A custom color to use for this person which will override any colors for
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
433 * the contacts that belong to this person.
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
434 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
435 * This is an RGB hex code that user interfaces can use when rendering the
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
436 * person.
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
437 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
438 * Since: 3.0.0
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
439 */
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
440 properties[PROP_COLOR] = g_param_spec_string(
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
441 "color", "color",
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
442 "The custom color for this person.",
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
443 NULL,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
444 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
445
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
446 /**
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
447 * PurplePerson:color-for-display:
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
448 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
449 * The color to use for this person.
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
450 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
451 * This will return the value of [property@Person:color] if it is set,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
452 * otherwise it will return the value of [property@ContactInfo:color] of
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
453 * the priority contact info.
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
454 *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
455 * Since: 3.0.0
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
456 */
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
457 properties[PROP_COLOR_FOR_DISPLAY] = g_param_spec_string(
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
458 "color-for-display", "color-for-display",
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
459 "The color to use when displaying this person.",
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
460 NULL,
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
461 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
462
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
463 /**
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
464 * PurplePerson:tags:
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
465 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
466 * The [class@Purple.Tags] for this person.
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
467 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
468 * Since: 3.0.0
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
469 */
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
470 properties[PROP_TAGS] = g_param_spec_object(
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
471 "tags", "tags",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
472 "The tags for this person",
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
473 PURPLE_TYPE_TAGS,
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
474 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
475
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
476 /**
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
477 * PurplePerson:name-for-display:
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
478 *
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
479 * The name that should be displayed for this person.
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
480 *
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
481 * If [property@Purple.Person:alias] is set that will be returned. If not
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
482 * the value of [method@Purple.ContactInfo.get_name_for_display] for
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
483 * [property@Purple.Person:priority-contact-info] will be used. If
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
484 * [property@Purple.Person:priority-contact-info] is %NULL, then %NULL will
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
485 * be returned.
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
486 *
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
487 * Since: 3.0.0
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
488 */
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
489 properties[PROP_NAME_FOR_DISPLAY] = g_param_spec_string(
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
490 "name-for-display", "name-for-display",
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
491 "The name that should be displayed for the person",
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
492 NULL,
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
493 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
494
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
495 /**
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
496 * PurplePerson:priority-contact-info:
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
497 *
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
498 * The [class@Purple.ContactInfo] that currently has the highest priority.
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
499 *
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
500 * This is used by user interfaces to determine which
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
501 * [class@Purple.ContactInfo] to use when messaging and so on.
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
502 *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
503 * Since: 3.0.0
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
504 */
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
505 properties[PROP_PRIORITY_CONTACT_INFO] = g_param_spec_object(
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
506 "priority-contact-info", "priority-contact-info",
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
507 "The priority contact info for the person",
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
508 PURPLE_TYPE_CONTACT_INFO,
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
509 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
510
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
511 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
512 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
513
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
514 /******************************************************************************
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
515 * Public API
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
516 *****************************************************************************/
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
517 PurplePerson *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
518 purple_person_new(void) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
519 return g_object_new(PURPLE_TYPE_PERSON, NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
520 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
521
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
522 const char *
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
523 purple_person_get_id(PurplePerson *person) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
524 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
525
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
526 return person->id;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
527 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
528
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
529 const char *
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
530 purple_person_get_alias(PurplePerson *person) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
531 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
532
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
533 return person->alias;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
534 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
535
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
536 void
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
537 purple_person_set_alias(PurplePerson *person, const char *alias) {
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
538 g_return_if_fail(PURPLE_IS_PERSON(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
539
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
540 if(!purple_strequal(person->alias, alias)) {
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
541 GObject *obj = G_OBJECT(person);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
542
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
543 g_free(person->alias);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
544 person->alias = g_strdup(alias);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
545
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
546 g_object_freeze_notify(obj);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
547 g_object_notify_by_pspec(obj, properties[PROP_ALIAS]);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
548 g_object_notify_by_pspec(obj, properties[PROP_NAME_FOR_DISPLAY]);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
549 g_object_thaw_notify(obj);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
550 }
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
551 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
552
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
553 PurpleAvatar *
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
554 purple_person_get_avatar_for_display(PurplePerson *person) {
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
555 PurpleContactInfo *priority = NULL;
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
556
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
557 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
558
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
559 if(PURPLE_IS_AVATAR(person->avatar)) {
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
560 return person->avatar;
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
561 }
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
562
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
563 priority = purple_person_get_priority_contact_info(person);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
564 if(PURPLE_IS_CONTACT_INFO(priority)) {
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
565 return purple_contact_info_get_avatar(priority);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
566 }
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
567
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
568 return NULL;
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
569 }
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
570
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
571 PurpleAvatar *
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
572 purple_person_get_avatar(PurplePerson *person) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
573 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
574
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
575 return person->avatar;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
576 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
577
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
578 void
42312
7d6f0b8b6e77 Use PurpleAvatar for PurplePerson and PurpleContactInfo
Gary Kramlich <grim@reaperworld.com>
parents: 42309
diff changeset
579 purple_person_set_avatar(PurplePerson *person, PurpleAvatar *avatar) {
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
580 g_return_if_fail(PURPLE_IS_PERSON(person));
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
581
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
582 if(g_set_object(&person->avatar, avatar)) {
42054
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
583 GObject *obj = G_OBJECT(person);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
584
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
585 g_object_freeze_notify(obj);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
586 g_object_notify_by_pspec(obj, properties[PROP_AVATAR]);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
587 g_object_notify_by_pspec(obj, properties[PROP_AVATAR_FOR_DISPLAY]);
7aa77854392d Add a property and accessor for getting the avatar to display for a PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42053
diff changeset
588 g_object_thaw_notify(obj);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
589 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
590 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
591
42309
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
592 const char *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
593 purple_person_get_color(PurplePerson *person) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
594 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
595
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
596 return person->color;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
597 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
598
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
599 void
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
600 purple_person_set_color(PurplePerson *person, const char *color) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
601 g_return_if_fail(PURPLE_IS_PERSON(person));
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
602
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
603 if(!purple_strequal(person->color, color)) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
604 GObject *obj = G_OBJECT(person);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
605
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
606 g_free(person->color);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
607 person->color = g_strdup(color);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
608
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
609 g_object_freeze_notify(obj);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
610 g_object_notify_by_pspec(obj, properties[PROP_COLOR]);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
611 g_object_notify_by_pspec(obj, properties[PROP_COLOR_FOR_DISPLAY]);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
612 g_object_thaw_notify(obj);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
613 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
614 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
615
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
616 const char *
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
617 purple_person_get_color_for_display(PurplePerson *person) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
618 PurpleContactInfo *priority = NULL;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
619
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
620 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
621
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
622 if(!purple_strempty(person->color)) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
623 return person->color;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
624 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
625
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
626 priority = purple_person_get_priority_contact_info(person);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
627 if(PURPLE_IS_CONTACT_INFO(priority)) {
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
628 return purple_contact_info_get_color(priority);
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
629 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
630
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
631 return NULL;
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
632 }
52571584c0ae Add color and color-for-display properties to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 42270
diff changeset
633
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
634 PurpleTags *
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
635 purple_person_get_tags(PurplePerson *person) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
636 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
637
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
638 return person->tags;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
639 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
640
42053
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
641 const char *
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
642 purple_person_get_name_for_display(PurplePerson *person) {
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
643 PurpleContactInfo *priority = NULL;
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
644
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
645 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
646
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
647 if(!purple_strempty(person->alias)) {
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
648 return person->alias;
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
649 }
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
650
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
651 priority = purple_person_get_priority_contact_info(person);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
652 if(PURPLE_IS_CONTACT_INFO(priority)) {
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
653 return purple_contact_info_get_name_for_display(priority);
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
654 }
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
655
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
656 return NULL;
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
657 }
742efe62e610 Add a name-for-display property to PurplePerson
Gary Kramlich <grim@reaperworld.com>
parents: 41975
diff changeset
658
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
659 void
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
660 purple_person_add_contact_info(PurplePerson *person,
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
661 PurpleContactInfo *info)
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
662 {
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
663 PurplePresence *presence = NULL;
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
664 PurpleContactInfo *current_priority = NULL;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
665
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
666 g_return_if_fail(PURPLE_IS_PERSON(person));
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
667 g_return_if_fail(PURPLE_IS_CONTACT_INFO(info));
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
668
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
669 current_priority = purple_person_get_priority_contact_info(person);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
670
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
671 g_ptr_array_add(person->contacts, g_object_ref(info));
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
672
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
673 presence = purple_contact_info_get_presence(info);
41771
c5877e2c93f2 Create and add PurpleContacts to the manager when purple_buddy_new is called
Gary Kramlich <grim@reaperworld.com>
parents: 41761
diff changeset
674 g_signal_connect_object(presence, "notify",
c5877e2c93f2 Create and add PurpleContacts to the manager when purple_buddy_new is called
Gary Kramlich <grim@reaperworld.com>
parents: 41761
diff changeset
675 G_CALLBACK(purple_person_presence_notify_cb),
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
676 person, 0);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
677
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
678 purple_contact_info_set_person(info, person);
41761
9dc5d28fca99 When a Contact is added to a Person set the Contact's Person to that Person.
Gary Kramlich <grim@reaperworld.com>
parents: 41749
diff changeset
679
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
680 purple_person_sort_contacts(person, current_priority);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
681 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
682
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
683 gboolean
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
684 purple_person_remove_contact_info(PurplePerson *person,
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
685 PurpleContactInfo *info)
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
686 {
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
687 PurpleContactInfo *current_priority = NULL;
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
688 gboolean removed = FALSE;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
689
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
690 g_return_val_if_fail(PURPLE_IS_PERSON(person), FALSE);
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
691 g_return_val_if_fail(PURPLE_IS_CONTACT_INFO(info), FALSE);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
692
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
693 /* Ref the contact info to avoid a use-after free. */
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
694 g_object_ref(info);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
695
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
696 current_priority = purple_person_get_priority_contact_info(person);
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
697
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
698 /* g_ptr_array_remove calls g_object_unref because we passed it in as a
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
699 * GDestroyNotify.
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
700 */
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
701 removed = g_ptr_array_remove(person->contacts, info);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
702
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
703 if(removed) {
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
704 PurplePresence *presence = purple_contact_info_get_presence(info);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
705
41771
c5877e2c93f2 Create and add PurpleContacts to the manager when purple_buddy_new is called
Gary Kramlich <grim@reaperworld.com>
parents: 41761
diff changeset
706 g_signal_handlers_disconnect_by_func(presence,
c5877e2c93f2 Create and add PurpleContacts to the manager when purple_buddy_new is called
Gary Kramlich <grim@reaperworld.com>
parents: 41761
diff changeset
707 purple_person_presence_notify_cb,
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
708 person);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
709
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
710 purple_contact_info_set_person(info, NULL);
41761
9dc5d28fca99 When a Contact is added to a Person set the Contact's Person to that Person.
Gary Kramlich <grim@reaperworld.com>
parents: 41749
diff changeset
711
42270
1bdd57a0c0d1 Propagate notify signals from the priority contact of a person
Gary Kramlich <grim@reaperworld.com>
parents: 42060
diff changeset
712 purple_person_sort_contacts(person, current_priority);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
713 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
714
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
715 /* Remove our reference. */
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
716 g_object_unref(info);
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
717
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
718 return removed;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
719 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
720
41948
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
721 PurpleContactInfo *
6d844d2faff1 Split PurpleContactInfo out of PurpleContact
Gary Kramlich <grim@reaperworld.com>
parents: 41771
diff changeset
722 purple_person_get_priority_contact_info(PurplePerson *person) {
41749
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
723 g_return_val_if_fail(PURPLE_IS_PERSON(person), NULL);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
724
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
725 if(person->contacts->len == 0) {
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
726 return NULL;
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
727 }
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
728
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
729 return g_ptr_array_index(person->contacts, 0);
c22448f50d5d Create PurplePerson.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
730 }
41975
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
731
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
732 gboolean
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
733 purple_person_has_contacts(PurplePerson *person) {
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
734 g_return_val_if_fail(PURPLE_IS_PERSON(person), FALSE);
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
735
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
736 return person->contacts->len > 0;
3ef645de21e7 Add tracking of PurplePerson's to PurpleContactManager
Gary Kramlich <grim@reaperworld.com>
parents: 41948
diff changeset
737 }
42059
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
738
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
739 gboolean
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
740 purple_person_matches(PurplePerson *person, const char *needle) {
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
741 g_return_val_if_fail(PURPLE_IS_PERSON(person), FALSE);
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
742
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
743 if(purple_strempty(needle)) {
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
744 return TRUE;
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
745 }
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
746
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
747 /* Check if the person's alias matches. */
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
748 if(!purple_strempty(person->alias)) {
42060
d55b605fdafb Add purple_strmatches and move purple_person_matches and purple_contact_info_matches to it
Gary Kramlich <grim@reaperworld.com>
parents: 42059
diff changeset
749 if(purple_strmatches(needle, person->alias)) {
42059
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
750 return TRUE;
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
751 }
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
752 }
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
753
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
754 /* See if any of the contact infos match. */
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
755 return g_ptr_array_find_with_equal_func(person->contacts, needle,
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
756 purple_person_matches_find_func,
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
757 NULL);
e6dcbf0db616 Add search support to the contact list
Gary Kramlich <grim@reaperworld.com>
parents: 42054
diff changeset
758 }

mercurial