Wed, 20 Jun 2018 02:13:44 -0400
prefs: Add binding versions of pref widget functions.
These just bind settings to existing widgets and copy the saved value to
the widget, except for combos which are produced from runtime lists.
Those are populated in a similar way as before.
There are some extra _bind_ words that will probably be dropped once the
other functions are unused.
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1 | /* purple |
| 10418 | 2 | * |
| 15884 | 3 | * Purple is the legal property of its developers, whose names are too numerous |
| 10418 | 4 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 5 | * source distribution. | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18977
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 10418 | 20 | */ |
| 21 | #include "internal.h" | |
| 22 | ||
| 23 | #include "debug.h" | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
24 | #include "idle.h" |
| 10418 | 25 | #include "notify.h" |
| 26 | #include "savedstatuses.h" | |
|
13763
dc4815a8f4aa
[gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13683
diff
changeset
|
27 | #include "dbus-maybe.h" |
|
18261
8d68cb9b4d40
Close all delete-confirmation dialogs for it when a status is deleted.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
18239
diff
changeset
|
28 | #include "request.h" |
| 10418 | 29 | #include "status.h" |
| 30 | #include "util.h" | |
| 31 | #include "xmlnode.h" | |
| 32 | ||
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
33 | /* |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
34 | * The maximum number of transient statuses to save. This |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
35 | * is used during the shutdown process to clean out old |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
36 | * transient statuses. |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
37 | */ |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
38 | #define MAX_TRANSIENTS 5 |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
39 | |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
40 | /* |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
41 | * The default message to use when the user becomes auto-away. |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
42 | */ |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
43 | #define DEFAULT_AUTOAWAY_MESSAGE _("I'm not here right now") |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
44 | |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
45 | /* |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
46 | * The information stores a snap-shot of the statuses of all |
| 10418 | 47 | * your accounts. Basically these are your saved away messages. |
| 48 | * There is an overall status and message that applies to | |
| 49 | * all your accounts, and then each individual account can | |
| 50 | * optionally have a different custom status and message. | |
| 51 | * | |
| 52 | * The changes to status.xml caused by the new status API | |
| 53 | * are fully backward compatible. The new status API just | |
| 54 | * adds the optional sub-statuses to the XML file. | |
| 55 | */ | |
| 15884 | 56 | struct _PurpleSavedStatus |
| 10418 | 57 | { |
| 58 | char *title; | |
| 15884 | 59 | PurpleStatusPrimitive type; |
| 10418 | 60 | char *message; |
| 61 | ||
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
62 | /* The timestamp when this saved status was created. This must be unique. */ |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
63 | time_t creation_time; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
64 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
65 | time_t lastused; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
66 | |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
67 | unsigned int usage_count; |
|
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
68 | |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
69 | GList *substatuses; /* A list of PurpleSavedStatusSub's. */ |
| 10418 | 70 | }; |
| 71 | ||
| 72 | /* | |
| 15884 | 73 | * TODO: If a PurpleStatusType is deleted, need to also delete any |
| 74 | * associated PurpleSavedStatusSub's? | |
| 10418 | 75 | */ |
| 15884 | 76 | struct _PurpleSavedStatusSub |
| 10418 | 77 | { |
| 15884 | 78 | PurpleAccount *account; |
| 79 | const PurpleStatusType *type; | |
| 10418 | 80 | char *message; |
| 81 | }; | |
| 82 | ||
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
83 | static GList *saved_statuses = NULL; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
84 | static guint save_timer = 0; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
85 | static gboolean statuses_loaded = FALSE; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
86 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
87 | /* |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
88 | * This hash table keeps track of which timestamps we've |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
89 | * used so that we don't have two saved statuses with the |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
90 | * same 'creation_time' timestamp. The 'created' timestamp |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
91 | * is used as a unique identifier. |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
92 | * |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
93 | * So the key in this hash table is the creation_time and |
| 15884 | 94 | * the value is a pointer to the PurpleSavedStatus. |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
95 | */ |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
96 | static GHashTable *creation_times; |
| 10418 | 97 | |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
98 | static void schedule_save(void); |
|
10427
2ea1412bc75f
[gaim-migrate @ 11679]
Mark Doliner <markdoliner@pidgin.im>
parents:
10426
diff
changeset
|
99 | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
100 | /********************************************************************* |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
101 | * Private utility functions * |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
102 | *********************************************************************/ |
| 10418 | 103 | |
| 104 | static void | |
| 15884 | 105 | free_saved_status_sub(PurpleSavedStatusSub *substatus) |
| 10418 | 106 | { |
| 107 | g_return_if_fail(substatus != NULL); | |
| 108 | ||
| 109 | g_free(substatus->message); | |
|
18261
8d68cb9b4d40
Close all delete-confirmation dialogs for it when a status is deleted.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
18239
diff
changeset
|
110 | purple_request_close_with_handle(substatus); |
| 15884 | 111 | PURPLE_DBUS_UNREGISTER_POINTER(substatus); |
| 10418 | 112 | g_free(substatus); |
| 113 | } | |
| 114 | ||
| 115 | static void | |
| 15884 | 116 | free_saved_status(PurpleSavedStatus *status) |
| 10418 | 117 | { |
| 118 | g_return_if_fail(status != NULL); | |
| 119 | ||
| 120 | g_free(status->title); | |
| 121 | g_free(status->message); | |
| 122 | ||
| 123 | while (status->substatuses != NULL) | |
| 124 | { | |
| 15884 | 125 | PurpleSavedStatusSub *substatus = status->substatuses->data; |
| 10418 | 126 | status->substatuses = g_list_remove(status->substatuses, substatus); |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
127 | free_saved_status_sub(substatus); |
| 10418 | 128 | } |
|
18261
8d68cb9b4d40
Close all delete-confirmation dialogs for it when a status is deleted.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
18239
diff
changeset
|
129 | purple_request_close_with_handle(status); |
| 15884 | 130 | PURPLE_DBUS_UNREGISTER_POINTER(status); |
| 10418 | 131 | g_free(status); |
| 132 | } | |
| 133 | ||
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
134 | /* |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
135 | * Set the timestamp for when this saved status was created, and |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
136 | * make sure it is unique. |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
137 | */ |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
138 | static void |
| 15884 | 139 | set_creation_time(PurpleSavedStatus *status, time_t creation_time) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
140 | { |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
141 | g_return_if_fail(status != NULL); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
142 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
143 | /* Avoid using 0 because it's an invalid hash key */ |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
144 | status->creation_time = creation_time != 0 ? creation_time : 1; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
145 | |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
146 | while (g_hash_table_lookup(creation_times, (gconstpointer)status->creation_time) != NULL) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
147 | status->creation_time++; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
148 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
149 | g_hash_table_insert(creation_times, |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
150 | (gpointer)status->creation_time, |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
151 | status); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
152 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
153 | |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
154 | /* |
|
16702
408400e77eca
Fix a typo in the documentation of a function
Mark Doliner <markdoliner@pidgin.im>
parents:
16478
diff
changeset
|
155 | * A magic number is calculated for each status, and then the |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
156 | * statuses are ordered by the magic number. The magic number |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
157 | * is the date the status was last used offset by one day for |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
158 | * each time the status has been used (but only by 10 days at |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
159 | * the most). |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
160 | * |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
161 | * The goal is to have recently used statuses at the top of |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
162 | * the list, but to also keep frequently used statuses near |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
163 | * the top. |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
164 | */ |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
165 | static gint |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
166 | saved_statuses_sort_func(gconstpointer a, gconstpointer b) |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
167 | { |
| 15884 | 168 | const PurpleSavedStatus *saved_status_a = a; |
| 169 | const PurpleSavedStatus *saved_status_b = b; | |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
170 | time_t time_a = saved_status_a->lastused + |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
171 | (MIN(saved_status_a->usage_count, 10) * 86400); |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
172 | time_t time_b = saved_status_b->lastused + |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
173 | (MIN(saved_status_b->usage_count, 10) * 86400); |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
174 | if (time_a > time_b) |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
175 | return -1; |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
176 | if (time_a < time_b) |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
177 | return 1; |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
178 | return 0; |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
179 | } |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
180 | |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
181 | /* |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
182 | * Transient statuses are added and removed automatically by |
| 15884 | 183 | * Purple. If they're not used for a certain length of time then |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
184 | * they'll expire and be automatically removed. This function |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
185 | * does the expiration. |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
186 | */ |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
187 | static void |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21908
diff
changeset
|
188 | remove_old_transient_statuses(void) |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
189 | { |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
190 | GList *l, *next; |
|
37484
78d036e70f8e
Fix #16762 where transient startup statuses could be deleted on exit
Jakub Adam <jakub.adam@ktknet.cz>
parents:
37075
diff
changeset
|
191 | PurpleSavedStatus *saved_status, *startup_status, *current_status; |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
192 | int count; |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
193 | time_t creation_time; |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
194 | |
|
37484
78d036e70f8e
Fix #16762 where transient startup statuses could be deleted on exit
Jakub Adam <jakub.adam@ktknet.cz>
parents:
37075
diff
changeset
|
195 | startup_status = purple_savedstatus_get_startup(); |
| 15884 | 196 | current_status = purple_savedstatus_get_current(); |
|
13198
208f0e50ff0f
[gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents:
13012
diff
changeset
|
197 | |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
198 | /* |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
199 | * Iterate through the list of saved statuses. Delete all |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
200 | * transient statuses except for the first MAX_TRANSIENTS |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
201 | * (remember, the saved statuses are already sorted by popularity). |
|
37484
78d036e70f8e
Fix #16762 where transient startup statuses could be deleted on exit
Jakub Adam <jakub.adam@ktknet.cz>
parents:
37075
diff
changeset
|
202 | * We should also keep the startup status, if any is set. |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
203 | */ |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
204 | count = 0; |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
205 | for (l = saved_statuses; l != NULL; l = next) |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
206 | { |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
207 | next = l->next; |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
208 | saved_status = l->data; |
| 15884 | 209 | if (purple_savedstatus_is_transient(saved_status)) |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
210 | { |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
211 | if (count == MAX_TRANSIENTS) |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
212 | { |
|
37484
78d036e70f8e
Fix #16762 where transient startup statuses could be deleted on exit
Jakub Adam <jakub.adam@ktknet.cz>
parents:
37075
diff
changeset
|
213 | if (saved_status != current_status && saved_status != startup_status) |
|
13198
208f0e50ff0f
[gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents:
13012
diff
changeset
|
214 | { |
|
208f0e50ff0f
[gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents:
13012
diff
changeset
|
215 | saved_statuses = g_list_remove(saved_statuses, saved_status); |
| 15884 | 216 | creation_time = purple_savedstatus_get_creation_time(saved_status); |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
217 | g_hash_table_remove(creation_times, (gconstpointer)creation_time); |
|
13198
208f0e50ff0f
[gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents:
13012
diff
changeset
|
218 | free_saved_status(saved_status); |
|
208f0e50ff0f
[gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents:
13012
diff
changeset
|
219 | } |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
220 | } |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
221 | else |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
222 | count++; |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
223 | } |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
224 | } |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
225 | |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
226 | if (count == MAX_TRANSIENTS) |
|
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
227 | schedule_save(); |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
228 | } |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
229 | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
230 | /********************************************************************* |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
231 | * Writing to disk * |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
232 | *********************************************************************/ |
| 10418 | 233 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
234 | static PurpleXmlNode * |
| 15884 | 235 | substatus_to_xmlnode(PurpleSavedStatusSub *substatus) |
| 10418 | 236 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
237 | PurpleXmlNode *node, *child; |
| 10418 | 238 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
239 | node = purple_xmlnode_new("substatus"); |
| 10418 | 240 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
241 | child = purple_xmlnode_new_child(node, "account"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
242 | purple_xmlnode_set_attrib(child, "protocol", purple_account_get_protocol_id(substatus->account)); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
243 | purple_xmlnode_insert_data(child, |
|
21908
0e933a80c8fd
Save the normalized account name for pounces and custom statuses. References #2049.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21039
diff
changeset
|
244 | purple_normalize(substatus->account, |
|
0e933a80c8fd
Save the normalized account name for pounces and custom statuses. References #2049.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21039
diff
changeset
|
245 | purple_account_get_username(substatus->account)), -1); |
| 10418 | 246 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
247 | child = purple_xmlnode_new_child(node, "state"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
248 | purple_xmlnode_insert_data(child, purple_status_type_get_id(substatus->type), -1); |
| 10418 | 249 | |
| 250 | if (substatus->message != NULL) | |
| 251 | { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
252 | child = purple_xmlnode_new_child(node, "message"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
253 | purple_xmlnode_insert_data(child, substatus->message, -1); |
| 10418 | 254 | } |
| 255 | ||
| 256 | return node; | |
| 257 | } | |
| 258 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
259 | static PurpleXmlNode * |
| 15884 | 260 | status_to_xmlnode(PurpleSavedStatus *status) |
| 10418 | 261 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
262 | PurpleXmlNode *node, *child; |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
263 | char buf[21]; |
| 10418 | 264 | GList *cur; |
| 265 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
266 | node = purple_xmlnode_new("status"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
267 | if (status->title != NULL) |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
268 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
269 | purple_xmlnode_set_attrib(node, "name", status->title); |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
270 | } |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
271 | else |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
272 | { |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
273 | /* |
| 15884 | 274 | * Purple 1.5.0 and earlier require a name to be set, so we |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
275 | * do this little hack to maintain backward compatability |
|
12309
e42cff3223a3
[gaim-migrate @ 14613]
Mark Doliner <markdoliner@pidgin.im>
parents:
12283
diff
changeset
|
276 | * in the status.xml file. Eventually this should be removed |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
277 | * and we should determine if a status is transient by |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
278 | * whether the "name" attribute is set to something or if |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
279 | * it does not exist at all. |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
280 | */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
281 | purple_xmlnode_set_attrib(node, "name", "Auto-Cached"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
282 | purple_xmlnode_set_attrib(node, "transient", "true"); |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
283 | } |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
284 | |
|
27116
19dff7b3ed0f
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents:
26891
diff
changeset
|
285 | g_snprintf(buf, sizeof(buf), "%lu", status->creation_time); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
286 | purple_xmlnode_set_attrib(node, "created", buf); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
287 | |
|
27116
19dff7b3ed0f
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents:
26891
diff
changeset
|
288 | g_snprintf(buf, sizeof(buf), "%lu", status->lastused); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
289 | purple_xmlnode_set_attrib(node, "lastused", buf); |
| 10418 | 290 | |
|
27116
19dff7b3ed0f
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents:
26891
diff
changeset
|
291 | g_snprintf(buf, sizeof(buf), "%u", status->usage_count); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
292 | purple_xmlnode_set_attrib(node, "usage_count", buf); |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
293 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
294 | child = purple_xmlnode_new_child(node, "state"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
295 | purple_xmlnode_insert_data(child, purple_primitive_get_id_from_type(status->type), -1); |
| 10418 | 296 | |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
297 | if (status->message != NULL) |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
298 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
299 | child = purple_xmlnode_new_child(node, "message"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
300 | purple_xmlnode_insert_data(child, status->message, -1); |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
301 | } |
| 10418 | 302 | |
| 303 | for (cur = status->substatuses; cur != NULL; cur = cur->next) | |
| 304 | { | |
| 305 | child = substatus_to_xmlnode(cur->data); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
306 | purple_xmlnode_insert_child(node, child); |
| 10418 | 307 | } |
| 308 | ||
| 309 | return node; | |
| 310 | } | |
| 311 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
312 | static PurpleXmlNode * |
| 10418 | 313 | statuses_to_xmlnode(void) |
| 314 | { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
315 | PurpleXmlNode *node, *child; |
| 10418 | 316 | GList *cur; |
| 317 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
318 | node = purple_xmlnode_new("statuses"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
319 | purple_xmlnode_set_attrib(node, "version", "1.0"); |
| 10418 | 320 | |
| 321 | for (cur = saved_statuses; cur != NULL; cur = cur->next) | |
| 322 | { | |
| 323 | child = status_to_xmlnode(cur->data); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
324 | purple_xmlnode_insert_child(node, child); |
| 10418 | 325 | } |
| 326 | ||
| 327 | return node; | |
| 328 | } | |
| 329 | ||
| 330 | static void | |
| 331 | sync_statuses(void) | |
| 332 | { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
333 | PurpleXmlNode *node; |
| 10418 | 334 | char *data; |
| 335 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
336 | if (!statuses_loaded) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
337 | { |
| 15884 | 338 | purple_debug_error("status", "Attempted to save statuses before they " |
| 10418 | 339 | "were read!\n"); |
| 340 | return; | |
| 341 | } | |
| 342 | ||
|
10423
4663a8238def
[gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents:
10420
diff
changeset
|
343 | node = statuses_to_xmlnode(); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
344 | data = purple_xmlnode_to_formatted_str(node, NULL); |
| 15884 | 345 | purple_util_write_data_to_file("status.xml", data, -1); |
| 10418 | 346 | g_free(data); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
347 | purple_xmlnode_free(node); |
| 10418 | 348 | } |
| 349 | ||
| 350 | static gboolean | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
351 | save_cb(gpointer data) |
| 10418 | 352 | { |
| 353 | sync_statuses(); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
354 | save_timer = 0; |
| 10418 | 355 | return FALSE; |
| 356 | } | |
| 357 | ||
| 358 | static void | |
| 359 | schedule_save(void) | |
| 360 | { | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
361 | if (save_timer == 0) |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
37484
diff
changeset
|
362 | save_timer = g_timeout_add_seconds(5, save_cb, NULL); |
| 10418 | 363 | } |
| 364 | ||
| 365 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
366 | /********************************************************************* |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
367 | * Reading from disk * |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
368 | *********************************************************************/ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
369 | |
| 15884 | 370 | static PurpleSavedStatusSub * |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
371 | parse_substatus(PurpleXmlNode *substatus) |
| 10418 | 372 | { |
| 15884 | 373 | PurpleSavedStatusSub *ret; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
374 | PurpleXmlNode *node; |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
375 | char *data; |
| 10418 | 376 | |
| 15884 | 377 | ret = g_new0(PurpleSavedStatusSub, 1); |
| 10418 | 378 | |
| 379 | /* Read the account */ | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
380 | node = purple_xmlnode_get_child(substatus, "account"); |
| 10418 | 381 | if (node != NULL) |
| 382 | { | |
| 383 | char *acct_name; | |
| 384 | const char *protocol; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
385 | acct_name = purple_xmlnode_get_data(node); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
386 | protocol = purple_xmlnode_get_attrib(node, "protocol"); |
| 10418 | 387 | if ((acct_name != NULL) && (protocol != NULL)) |
| 15884 | 388 | ret->account = purple_accounts_find(acct_name, protocol); |
| 10418 | 389 | g_free(acct_name); |
| 390 | } | |
| 391 | ||
| 392 | if (ret->account == NULL) | |
| 393 | { | |
| 394 | g_free(ret); | |
| 395 | return NULL; | |
| 396 | } | |
| 397 | ||
| 398 | /* Read the state */ | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
399 | node = purple_xmlnode_get_child(substatus, "state"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
400 | if ((node != NULL) && ((data = purple_xmlnode_get_data(node)) != NULL)) |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
401 | { |
| 15884 | 402 | ret->type = purple_status_type_find_with_id( |
|
32438
dc8991868906
A boring and large patch so I can merge heads.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31576
diff
changeset
|
403 | purple_account_get_status_types(ret->account), data); |
| 10418 | 404 | g_free(data); |
| 405 | } | |
| 406 | ||
|
16301
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
407 | if (ret->type == NULL) |
|
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
408 | { |
|
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
409 | g_free(ret); |
|
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
410 | return NULL; |
|
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
411 | } |
|
45ac8cee1b51
When reading in substatuses from status.xml, ignore substatuses for
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
412 | |
| 10418 | 413 | /* Read the message */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
414 | node = purple_xmlnode_get_child(substatus, "message"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
415 | if ((node != NULL) && ((data = purple_xmlnode_get_data(node)) != NULL)) |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
416 | { |
| 10418 | 417 | ret->message = data; |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
418 | } |
| 10418 | 419 | |
| 15884 | 420 | PURPLE_DBUS_REGISTER_POINTER(ret, PurpleSavedStatusSub); |
| 10418 | 421 | return ret; |
| 422 | } | |
| 423 | ||
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
424 | /* |
| 10418 | 425 | * Parse a saved status and add it to the saved_statuses linked list. |
| 426 | * | |
| 427 | * Here's an example of the XML for a saved status: | |
| 428 | * <status name="Girls"> | |
| 429 | * <state>away</state> | |
| 430 | * <message>I like the way that they walk | |
| 431 | * And it's chill to hear them talk | |
| 432 | * And I can always make them smile | |
| 433 | * From White Castle to the Nile</message> | |
| 434 | * <substatus> | |
|
36637
9b0109ae118d
Renamed some prpl stuff to protocol stuff.
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
435 | * <account protocol='aim'>markdoliner</account> |
| 10418 | 436 | * <state>available</state> |
| 437 | * <message>The ladies man is here to answer your queries.</message> | |
| 438 | * </substatus> | |
| 439 | * <substatus> | |
|
36637
9b0109ae118d
Renamed some prpl stuff to protocol stuff.
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
440 | * <account protocol='aim'>giantgraypanda</account> |
| 10418 | 441 | * <state>away</state> |
| 442 | * <message>A.C. ain't in charge no more.</message> | |
| 443 | * </substatus> | |
| 444 | * </status> | |
| 445 | * | |
| 446 | * I know. Moving, huh? | |
| 447 | */ | |
| 15884 | 448 | static PurpleSavedStatus * |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
449 | parse_status(PurpleXmlNode *status) |
| 10418 | 450 | { |
| 15884 | 451 | PurpleSavedStatus *ret; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
452 | PurpleXmlNode *node; |
| 10418 | 453 | const char *attrib; |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
454 | char *data; |
| 10418 | 455 | int i; |
| 456 | ||
| 15884 | 457 | ret = g_new0(PurpleSavedStatus, 1); |
| 10418 | 458 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
459 | attrib = purple_xmlnode_get_attrib(status, "transient"); |
|
25859
b42be7bb9dac
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents:
22868
diff
changeset
|
460 | if (!purple_strequal(attrib, "true")) |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
461 | { |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
462 | /* Read the title */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
463 | attrib = purple_xmlnode_get_attrib(status, "name"); |
|
12283
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
464 | ret->title = g_strdup(attrib); |
|
1882e6c066e9
[gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents:
12197
diff
changeset
|
465 | } |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
466 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
467 | if (ret->title != NULL) |
| 10418 | 468 | { |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
469 | /* Ensure the title is unique */ |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
470 | i = 2; |
| 15884 | 471 | while (purple_savedstatus_find(ret->title) != NULL) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
472 | { |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
473 | g_free(ret->title); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
474 | ret->title = g_strdup_printf("%s %d", attrib, i); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
475 | i++; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
476 | } |
| 10418 | 477 | } |
| 478 | ||
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
479 | /* Read the creation time */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
480 | attrib = purple_xmlnode_get_attrib(status, "created"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
481 | set_creation_time(ret, (attrib != NULL ? atol(attrib) : 0)); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
482 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
483 | /* Read the last used time */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
484 | attrib = purple_xmlnode_get_attrib(status, "lastused"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
485 | ret->lastused = (attrib != NULL ? atol(attrib) : 0); |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
486 | |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
487 | /* Read the usage count */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
488 | attrib = purple_xmlnode_get_attrib(status, "usage_count"); |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
489 | ret->usage_count = (attrib != NULL ? atol(attrib) : 0); |
|
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
490 | |
| 10418 | 491 | /* Read the primitive status type */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
492 | node = purple_xmlnode_get_child(status, "state"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
493 | if ((node != NULL) && ((data = purple_xmlnode_get_data(node)) != NULL)) |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
494 | { |
| 15884 | 495 | ret->type = purple_primitive_get_type_from_id(data); |
| 10418 | 496 | g_free(data); |
| 497 | } | |
| 498 | ||
| 499 | /* Read the message */ | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
500 | node = purple_xmlnode_get_child(status, "message"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
501 | if ((node != NULL) && ((data = purple_xmlnode_get_data(node)) != NULL)) |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
502 | { |
| 10418 | 503 | ret->message = data; |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
504 | } |
| 10418 | 505 | |
| 506 | /* Read substatuses */ | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
507 | for (node = purple_xmlnode_get_child(status, "substatus"); node != NULL; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
508 | node = purple_xmlnode_get_next_twin(node)) |
| 10418 | 509 | { |
| 15884 | 510 | PurpleSavedStatusSub *new; |
| 10418 | 511 | new = parse_substatus(node); |
| 512 | if (new != NULL) | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
513 | ret->substatuses = g_list_prepend(ret->substatuses, new); |
| 10418 | 514 | } |
| 515 | ||
| 15884 | 516 | PURPLE_DBUS_REGISTER_POINTER(ret, PurpleSavedStatus); |
| 10418 | 517 | return ret; |
| 518 | } | |
| 519 | ||
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
520 | /* |
|
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
521 | * load_statuses: |
|
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
522 | * |
| 15884 | 523 | * Read the saved statuses from a file in the Purple user dir. |
| 10418 | 524 | * |
|
35466
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
525 | * Returns: TRUE on success, FALSE on failure (if the file can not |
|
e259e75f1c6f
Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents:
35454
diff
changeset
|
526 | * be opened, or if it contains invalid XML). |
| 10418 | 527 | */ |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
528 | static void |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
529 | load_statuses(void) |
| 10418 | 530 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
531 | PurpleXmlNode *statuses, *status; |
| 10418 | 532 | |
|
10426
f026e2a8f909
[gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents:
10425
diff
changeset
|
533 | statuses_loaded = TRUE; |
|
f026e2a8f909
[gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents:
10425
diff
changeset
|
534 | |
| 15884 | 535 | statuses = purple_util_read_xml_from_file("status.xml", _("saved statuses")); |
| 10418 | 536 | |
| 537 | if (statuses == NULL) | |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10424
diff
changeset
|
538 | return; |
| 10418 | 539 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
540 | for (status = purple_xmlnode_get_child(statuses, "status"); status != NULL; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
541 | status = purple_xmlnode_get_next_twin(status)) |
| 10418 | 542 | { |
| 15884 | 543 | PurpleSavedStatus *new; |
| 10418 | 544 | new = parse_status(status); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
545 | saved_statuses = g_list_prepend(saved_statuses, new); |
| 10418 | 546 | } |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
547 | saved_statuses = g_list_sort(saved_statuses, saved_statuses_sort_func); |
| 10418 | 548 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34821
diff
changeset
|
549 | purple_xmlnode_free(statuses); |
| 10418 | 550 | } |
| 551 | ||
| 552 | ||
| 553 | /************************************************************************** | |
| 554 | * Saved status API | |
| 555 | **************************************************************************/ | |
| 15884 | 556 | PurpleSavedStatus * |
| 557 | purple_savedstatus_new(const char *title, PurpleStatusPrimitive type) | |
| 10418 | 558 | { |
| 15884 | 559 | PurpleSavedStatus *status; |
| 10418 | 560 | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
561 | /* Make sure we don't already have a saved status with this title. */ |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
562 | if (title != NULL) |
| 15884 | 563 | g_return_val_if_fail(purple_savedstatus_find(title) == NULL, NULL); |
|
10420
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
564 | |
| 15884 | 565 | status = g_new0(PurpleSavedStatus, 1); |
| 566 | PURPLE_DBUS_REGISTER_POINTER(status, PurpleSavedStatus); | |
| 10418 | 567 | status->title = g_strdup(title); |
| 568 | status->type = type; | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
569 | set_creation_time(status, time(NULL)); |
| 10418 | 570 | |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
571 | saved_statuses = g_list_insert_sorted(saved_statuses, status, saved_statuses_sort_func); |
| 10418 | 572 | |
| 573 | schedule_save(); | |
| 574 | ||
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
575 | purple_signal_emit(purple_savedstatuses_get_handle(), "savedstatus-added", |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
576 | status); |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
577 | |
| 10418 | 578 | return status; |
| 579 | } | |
| 580 | ||
|
10420
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
581 | void |
| 15884 | 582 | purple_savedstatus_set_title(PurpleSavedStatus *status, const char *title) |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
583 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
584 | g_return_if_fail(status != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
585 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
586 | /* Make sure we don't already have a saved status with this title. */ |
| 15884 | 587 | g_return_if_fail(purple_savedstatus_find(title) == NULL); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
588 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
589 | g_free(status->title); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
590 | status->title = g_strdup(title); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
591 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
592 | schedule_save(); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
593 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
594 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
595 | "savedstatus-modified", status); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
596 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
597 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
598 | void |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
599 | purple_savedstatus_set_primitive_type(PurpleSavedStatus *status, PurpleStatusPrimitive type) |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
600 | { |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
601 | g_return_if_fail(status != NULL); |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
602 | |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
603 | status->type = type; |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
604 | |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
605 | schedule_save(); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
606 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
607 | "savedstatus-modified", status); |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
608 | } |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
609 | |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
610 | void |
| 15884 | 611 | purple_savedstatus_set_message(PurpleSavedStatus *status, const char *message) |
|
10420
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
612 | { |
|
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
613 | g_return_if_fail(status != NULL); |
|
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
614 | |
|
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
615 | g_free(status->message); |
|
13247
2162ed1a6f41
[gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents:
13245
diff
changeset
|
616 | if ((message != NULL) && (*message == '\0')) |
|
2162ed1a6f41
[gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents:
13245
diff
changeset
|
617 | status->message = NULL; |
|
2162ed1a6f41
[gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents:
13245
diff
changeset
|
618 | else |
|
2162ed1a6f41
[gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents:
13245
diff
changeset
|
619 | status->message = g_strdup(message); |
|
10420
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
620 | |
|
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
621 | schedule_save(); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
622 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
623 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
624 | "savedstatus-modified", status); |
|
10420
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
625 | } |
|
7277ae4229e9
[gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents:
10419
diff
changeset
|
626 | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
627 | void |
| 15884 | 628 | purple_savedstatus_set_substatus(PurpleSavedStatus *saved_status, |
| 629 | const PurpleAccount *account, | |
| 630 | const PurpleStatusType *type, | |
|
12080
2aaca2265a51
[gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12056
diff
changeset
|
631 | const char *message) |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
632 | { |
| 15884 | 633 | PurpleSavedStatusSub *substatus; |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
634 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
635 | g_return_if_fail(saved_status != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
636 | g_return_if_fail(account != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
637 | g_return_if_fail(type != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
638 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
639 | /* Find an existing substatus or create a new one */ |
| 15884 | 640 | substatus = purple_savedstatus_get_substatus(saved_status, account); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
641 | if (substatus == NULL) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
642 | { |
| 15884 | 643 | substatus = g_new0(PurpleSavedStatusSub, 1); |
| 644 | PURPLE_DBUS_REGISTER_POINTER(substatus, PurpleSavedStatusSub); | |
| 645 | substatus->account = (PurpleAccount *)account; | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
646 | saved_status->substatuses = g_list_prepend(saved_status->substatuses, substatus); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
647 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
648 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
649 | substatus->type = type; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
650 | g_free(substatus->message); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
651 | substatus->message = g_strdup(message); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
652 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
653 | schedule_save(); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
654 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
655 | "savedstatus-modified", saved_status); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
656 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
657 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
658 | void |
| 15884 | 659 | purple_savedstatus_unset_substatus(PurpleSavedStatus *saved_status, |
| 660 | const PurpleAccount *account) | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
661 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
662 | GList *iter; |
| 15884 | 663 | PurpleSavedStatusSub *substatus; |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
664 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
665 | g_return_if_fail(saved_status != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
666 | g_return_if_fail(account != NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
667 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
668 | for (iter = saved_status->substatuses; iter != NULL; iter = iter->next) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
669 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
670 | substatus = iter->data; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
671 | if (substatus->account == account) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
672 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
673 | saved_status->substatuses = g_list_delete_link(saved_status->substatuses, iter); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
674 | g_free(substatus->message); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
675 | g_free(substatus); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
676 | return; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
677 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
678 | } |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
679 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
680 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
681 | "savedstatus-modified", saved_status); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
682 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
683 | |
| 14971 | 684 | /* |
| 685 | * This gets called when an account is deleted. We iterate through | |
| 686 | * all of our saved statuses and delete any substatuses that may | |
| 687 | * exist for this account. | |
| 688 | */ | |
| 689 | static void | |
| 15884 | 690 | purple_savedstatus_unset_all_substatuses(const PurpleAccount *account, |
| 14971 | 691 | gpointer user_data) |
| 692 | { | |
| 693 | GList *iter; | |
| 15884 | 694 | PurpleSavedStatus *status; |
| 14971 | 695 | |
| 696 | g_return_if_fail(account != NULL); | |
| 697 | ||
| 698 | for (iter = saved_statuses; iter != NULL; iter = iter->next) | |
| 699 | { | |
| 15884 | 700 | status = (PurpleSavedStatus *)iter->data; |
| 701 | purple_savedstatus_unset_substatus(status, account); | |
| 14971 | 702 | } |
| 703 | } | |
| 704 | ||
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
705 | void |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
706 | purple_savedstatus_delete_by_status(PurpleSavedStatus *status) |
| 10418 | 707 | { |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
708 | time_t creation_time, current, idleaway; |
| 10418 | 709 | |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
710 | g_return_if_fail(status != NULL); |
| 10418 | 711 | |
| 712 | saved_statuses = g_list_remove(saved_statuses, status); | |
| 15884 | 713 | creation_time = purple_savedstatus_get_creation_time(status); |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
714 | g_hash_table_remove(creation_times, (gconstpointer)creation_time); |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
715 | free_saved_status(status); |
| 10418 | 716 | |
| 717 | schedule_save(); | |
| 718 | ||
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
719 | /* |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
720 | * If we just deleted our current status or our idleaway status, |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
721 | * then set the appropriate pref back to 0. |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
722 | */ |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
723 | current = purple_prefs_get_int("/purple/savedstatus/default"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
724 | if (current == creation_time) |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
725 | purple_prefs_set_int("/purple/savedstatus/default", 0); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
726 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
727 | idleaway = purple_prefs_get_int("/purple/savedstatus/idleaway"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
728 | if (idleaway == creation_time) |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
729 | purple_prefs_set_int("/purple/savedstatus/idleaway", 0); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
730 | |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
731 | purple_signal_emit(purple_savedstatuses_get_handle(), |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
732 | "savedstatus-deleted", status); |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
733 | } |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
734 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
735 | gboolean |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
736 | purple_savedstatus_delete(const char *title) |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
737 | { |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
738 | PurpleSavedStatus *status; |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
739 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
740 | status = purple_savedstatus_find(title); |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
741 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
742 | if (status == NULL) |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
743 | return FALSE; |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
744 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
745 | if (purple_savedstatus_get_current() == status) |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
746 | return FALSE; |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
747 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
748 | purple_savedstatus_delete_by_status(status); |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
749 | |
| 10418 | 750 | return TRUE; |
| 751 | } | |
| 752 | ||
|
18190
bcf28ef7e8ff
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
753 | GList * |
| 15884 | 754 | purple_savedstatuses_get_all(void) |
| 10418 | 755 | { |
| 756 | return saved_statuses; | |
| 757 | } | |
| 758 | ||
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
759 | GList * |
| 15884 | 760 | purple_savedstatuses_get_popular(unsigned int how_many) |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
761 | { |
|
13675
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
762 | GList *popular = NULL; |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
763 | GList *cur; |
|
21039
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
764 | unsigned int i; |
| 15884 | 765 | PurpleSavedStatus *next; |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
766 | |
|
21039
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
767 | /* Copy 'how_many' elements to a new list. If 'how_many' is 0, then copy all of 'em. */ |
|
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
768 | if (how_many == 0) |
|
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
769 | how_many = (unsigned int) -1; |
|
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
770 | |
|
13675
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
771 | i = 0; |
|
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
772 | cur = saved_statuses; |
|
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
773 | while ((i < how_many) && (cur != NULL)) |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
774 | { |
|
13677
cf8c46ba7b91
[gaim-migrate @ 16077]
Mark Doliner <markdoliner@pidgin.im>
parents:
13675
diff
changeset
|
775 | next = cur->data; |
| 15884 | 776 | if ((!purple_savedstatus_is_transient(next) |
| 777 | || purple_savedstatus_get_message(next) != NULL)) | |
|
13675
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
778 | { |
|
21039
ea939e518c47
deryni noticed that the documentation and code do not match for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20147
diff
changeset
|
779 | popular = g_list_prepend(popular, next); |
|
13675
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
780 | i++; |
|
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
781 | } |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
782 | cur = cur->next; |
|
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
783 | } |
|
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
784 | |
|
13675
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
785 | popular = g_list_reverse(popular); |
|
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
786 | |
|
edc4a39fd463
[gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents:
13388
diff
changeset
|
787 | return popular; |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
788 | } |
|
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
789 | |
| 15884 | 790 | PurpleSavedStatus * |
| 791 | purple_savedstatus_get_current(void) | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
792 | { |
| 15884 | 793 | if (purple_savedstatus_is_idleaway()) |
| 794 | return purple_savedstatus_get_idleaway(); | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
795 | else |
| 15884 | 796 | return purple_savedstatus_get_default(); |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
797 | } |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
798 | |
| 15884 | 799 | PurpleSavedStatus * |
| 800 | purple_savedstatus_get_default() | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
801 | { |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
802 | time_t creation_time; |
| 15884 | 803 | PurpleSavedStatus *saved_status = NULL; |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
804 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
805 | creation_time = purple_prefs_get_int("/purple/savedstatus/default"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
806 | |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
807 | if (creation_time != 0) |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
808 | saved_status = g_hash_table_lookup(creation_times, (gconstpointer)creation_time); |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
809 | |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
810 | if (saved_status == NULL) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
811 | { |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
812 | /* |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
813 | * We don't have a current saved status! This is either a new |
| 15884 | 814 | * Purple user or someone upgrading from Purple 1.5.0 or older, or |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
815 | * possibly someone who deleted the status they were currently |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
816 | * using? In any case, add a default status. |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
817 | */ |
| 15884 | 818 | saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
819 | purple_prefs_set_int("/purple/savedstatus/default", |
| 15884 | 820 | purple_savedstatus_get_creation_time(saved_status)); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
821 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
822 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
823 | return saved_status; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
824 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
825 | |
| 15884 | 826 | PurpleSavedStatus * |
| 827 | purple_savedstatus_get_idleaway() | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
828 | { |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
829 | time_t creation_time; |
| 15884 | 830 | PurpleSavedStatus *saved_status = NULL; |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
831 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
832 | creation_time = purple_prefs_get_int("/purple/savedstatus/idleaway"); |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
833 | |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
834 | if (creation_time != 0) |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
835 | saved_status = g_hash_table_lookup(creation_times, (gconstpointer)creation_time); |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
836 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
837 | if (saved_status == NULL) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
838 | { |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
839 | /* We don't have a specified "idle" status! Weird. */ |
| 15884 | 840 | saved_status = purple_savedstatus_find_transient_by_type_and_message( |
| 841 | PURPLE_STATUS_AWAY, DEFAULT_AUTOAWAY_MESSAGE); | |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
842 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
843 | if (saved_status == NULL) |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
844 | { |
| 15884 | 845 | saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AWAY); |
| 846 | purple_savedstatus_set_message(saved_status, DEFAULT_AUTOAWAY_MESSAGE); | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
847 | purple_prefs_set_int("/purple/savedstatus/idleaway", |
| 15884 | 848 | purple_savedstatus_get_creation_time(saved_status)); |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
849 | } |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
850 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
851 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
852 | return saved_status; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
853 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
854 | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
855 | gboolean |
| 15884 | 856 | purple_savedstatus_is_idleaway() |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
857 | { |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
858 | return purple_prefs_get_bool("/purple/savedstatus/isidleaway"); |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
859 | } |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
860 | |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
861 | void |
| 15884 | 862 | purple_savedstatus_set_idleaway(gboolean idleaway) |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
863 | { |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
864 | GList *accounts, *node; |
| 15884 | 865 | PurpleSavedStatus *old, *saved_status; |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
866 | |
| 15884 | 867 | if (purple_savedstatus_is_idleaway() == idleaway) |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
868 | /* Don't need to do anything */ |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
869 | return; |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
870 | |
| 15884 | 871 | old = purple_savedstatus_get_current(); |
| 872 | saved_status = idleaway ? purple_savedstatus_get_idleaway() | |
| 873 | : purple_savedstatus_get_default(); | |
|
18977
d30048f913cf
Fixes #1905 'Better solution to 'Idleness Infinite Recursion''
Sean Egan <seanegan@pidgin.im>
parents:
18261
diff
changeset
|
874 | purple_prefs_set_bool("/purple/savedstatus/isidleaway", idleaway); |
|
14423
bf504ef2e5e2
[gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
875 | |
|
26891
0570b1cdf470
Adjust some idle handling code to fix "wedging" idle reporting into never
Paul Aurich <darkrain42@pidgin.im>
parents:
25911
diff
changeset
|
876 | /* Changing our status makes us un-idle */ |
|
0570b1cdf470
Adjust some idle handling code to fix "wedging" idle reporting into never
Paul Aurich <darkrain42@pidgin.im>
parents:
25911
diff
changeset
|
877 | if (!idleaway) |
|
0570b1cdf470
Adjust some idle handling code to fix "wedging" idle reporting into never
Paul Aurich <darkrain42@pidgin.im>
parents:
25911
diff
changeset
|
878 | purple_idle_touch(); |
|
0570b1cdf470
Adjust some idle handling code to fix "wedging" idle reporting into never
Paul Aurich <darkrain42@pidgin.im>
parents:
25911
diff
changeset
|
879 | |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
880 | if (idleaway && (purple_savedstatus_get_primitive_type(old) != PURPLE_STATUS_AVAILABLE)) |
|
14423
bf504ef2e5e2
[gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
881 | /* Our global status is already "away," so don't change anything */ |
|
bf504ef2e5e2
[gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
882 | return; |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
883 | |
| 15884 | 884 | accounts = purple_accounts_get_all_active(); |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
885 | for (node = accounts; node != NULL; node = node->next) |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
886 | { |
| 15884 | 887 | PurpleAccount *account; |
| 888 | PurplePresence *presence; | |
| 889 | PurpleStatus *status; | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
890 | |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
891 | account = node->data; |
| 15884 | 892 | presence = purple_account_get_presence(account); |
| 893 | status = purple_presence_get_active_status(presence); | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
894 | |
| 15884 | 895 | if (!idleaway || purple_status_is_available(status)) |
| 896 | purple_savedstatus_activate_for_account(saved_status, account); | |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
897 | } |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
898 | |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
899 | g_list_free(accounts); |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
900 | |
| 15884 | 901 | purple_signal_emit(purple_savedstatuses_get_handle(), "savedstatus-changed", |
|
14190
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
902 | saved_status, old); |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
903 | } |
|
4d3fc3f58cc6
[gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents:
13763
diff
changeset
|
904 | |
| 15884 | 905 | PurpleSavedStatus * |
| 906 | purple_savedstatus_get_startup() | |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
907 | { |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
908 | time_t creation_time; |
| 15884 | 909 | PurpleSavedStatus *saved_status = NULL; |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
910 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
911 | creation_time = purple_prefs_get_int("/purple/savedstatus/startup"); |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
912 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
913 | if (creation_time != 0) |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
914 | saved_status = g_hash_table_lookup(creation_times, (gconstpointer)creation_time); |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
915 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
916 | if (saved_status == NULL) |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
917 | { |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
918 | /* |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
919 | * We don't have a status to apply. |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
920 | * This may be the first login, or the user wants to |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
921 | * restore the "current" status. |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
922 | */ |
| 15884 | 923 | saved_status = purple_savedstatus_get_current(); |
|
13683
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
924 | } |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
925 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
926 | return saved_status; |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
927 | } |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
928 | |
|
d523c24ed269
[gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents:
13677
diff
changeset
|
929 | |
| 15884 | 930 | PurpleSavedStatus * |
| 931 | purple_savedstatus_find(const char *title) | |
| 10418 | 932 | { |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
933 | GList *iter; |
| 15884 | 934 | PurpleSavedStatus *status; |
| 10418 | 935 | |
|
11977
51548c459a94
[gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents:
11975
diff
changeset
|
936 | g_return_val_if_fail(title != NULL, NULL); |
|
51548c459a94
[gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents:
11975
diff
changeset
|
937 | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
938 | for (iter = saved_statuses; iter != NULL; iter = iter->next) |
| 10418 | 939 | { |
| 15884 | 940 | status = (PurpleSavedStatus *)iter->data; |
|
25859
b42be7bb9dac
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents:
22868
diff
changeset
|
941 | if (purple_strequal(status->title, title)) |
| 10418 | 942 | return status; |
| 943 | } | |
| 944 | ||
| 945 | return NULL; | |
| 946 | } | |
| 947 | ||
| 15884 | 948 | PurpleSavedStatus * |
| 949 | purple_savedstatus_find_by_creation_time(time_t creation_time) | |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
950 | { |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
951 | GList *iter; |
| 15884 | 952 | PurpleSavedStatus *status; |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
953 | |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
954 | for (iter = saved_statuses; iter != NULL; iter = iter->next) |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
955 | { |
| 15884 | 956 | status = (PurpleSavedStatus *)iter->data; |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
957 | if (status->creation_time == creation_time) |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
958 | return status; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
959 | } |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
960 | |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
961 | return NULL; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
962 | } |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
963 | |
| 15884 | 964 | PurpleSavedStatus * |
| 965 | purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, | |
|
13245
3c026039efc5
[gaim-migrate @ 15610]
Mark Doliner <markdoliner@pidgin.im>
parents:
13198
diff
changeset
|
966 | const char *message) |
|
13012
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
967 | { |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
968 | GList *iter; |
| 15884 | 969 | PurpleSavedStatus *status; |
|
13012
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
970 | |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
971 | for (iter = saved_statuses; iter != NULL; iter = iter->next) |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
972 | { |
| 15884 | 973 | status = (PurpleSavedStatus *)iter->data; |
| 974 | if ((status->type == type) && purple_savedstatus_is_transient(status) && | |
| 975 | !purple_savedstatus_has_substatuses(status) && | |
|
25859
b42be7bb9dac
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents:
22868
diff
changeset
|
976 | purple_strequal(status->message, message)) |
|
13012
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
977 | { |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
978 | return status; |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
979 | } |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
980 | } |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
981 | |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
982 | return NULL; |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
983 | } |
|
402bd07464a7
[gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
984 | |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
985 | gboolean |
| 15884 | 986 | purple_savedstatus_is_transient(const PurpleSavedStatus *saved_status) |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
987 | { |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
988 | g_return_val_if_fail(saved_status != NULL, TRUE); |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
989 | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
990 | return (saved_status->title == NULL); |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
991 | } |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
992 | |
| 10418 | 993 | const char * |
| 15884 | 994 | purple_savedstatus_get_title(const PurpleSavedStatus *saved_status) |
| 10418 | 995 | { |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
996 | const char *message; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
997 | |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
998 | g_return_val_if_fail(saved_status != NULL, NULL); |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
999 | |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1000 | /* If we have a title then return it */ |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1001 | if (saved_status->title != NULL) |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1002 | return saved_status->title; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1003 | |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1004 | /* Otherwise, this is a transient status and we make up a title on the fly */ |
| 15884 | 1005 | message = purple_savedstatus_get_message(saved_status); |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
1006 | |
|
12781
2fda73c527c8
[gaim-migrate @ 15128]
Mark Doliner <markdoliner@pidgin.im>
parents:
12729
diff
changeset
|
1007 | if ((message == NULL) || (*message == '\0')) |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1008 | { |
| 15884 | 1009 | PurpleStatusPrimitive primitive; |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
1010 | primitive = purple_savedstatus_get_primitive_type(saved_status); |
| 15884 | 1011 | return purple_primitive_get_name_from_type(primitive); |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1012 | } |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1013 | else |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1014 | { |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1015 | char *stripped; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1016 | static char buf[64]; |
| 15884 | 1017 | stripped = purple_markup_strip_html(message); |
| 1018 | purple_util_chrreplace(stripped, '\n', ' '); | |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1019 | strncpy(buf, stripped, sizeof(buf)); |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1020 | buf[sizeof(buf) - 1] = '\0'; |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1021 | if ((strlen(stripped) + 1) > sizeof(buf)) |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
1022 | { |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1023 | /* Truncate and ellipsize */ |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1024 | char *tmp = g_utf8_find_prev_char(buf, &buf[sizeof(buf) - 4]); |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1025 | strcpy(tmp, "..."); |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
1026 | } |
|
12690
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1027 | g_free(stripped); |
|
4a93889c7593
[gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents:
12688
diff
changeset
|
1028 | return buf; |
|
12688
d2beaf15f294
[gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents:
12552
diff
changeset
|
1029 | } |
| 10418 | 1030 | } |
| 1031 | ||
| 15884 | 1032 | PurpleStatusPrimitive |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
1033 | purple_savedstatus_get_primitive_type(const PurpleSavedStatus *saved_status) |
| 10418 | 1034 | { |
| 15884 | 1035 | g_return_val_if_fail(saved_status != NULL, PURPLE_STATUS_OFFLINE); |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1036 | |
| 10418 | 1037 | return saved_status->type; |
| 1038 | } | |
| 1039 | ||
| 1040 | const char * | |
| 15884 | 1041 | purple_savedstatus_get_message(const PurpleSavedStatus *saved_status) |
| 10418 | 1042 | { |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1043 | g_return_val_if_fail(saved_status != NULL, NULL); |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1044 | |
| 10418 | 1045 | return saved_status->message; |
| 1046 | } | |
| 1047 | ||
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1048 | time_t |
| 15884 | 1049 | purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status) |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1050 | { |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1051 | g_return_val_if_fail(saved_status != NULL, 0); |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1052 | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1053 | return saved_status->creation_time; |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1054 | } |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1055 | |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
1056 | gboolean |
| 15884 | 1057 | purple_savedstatus_has_substatuses(const PurpleSavedStatus *saved_status) |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
1058 | { |
|
12197
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1059 | g_return_val_if_fail(saved_status != NULL, FALSE); |
|
706655f09bbc
[gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents:
12125
diff
changeset
|
1060 | |
|
11651
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
1061 | return (saved_status->substatuses != NULL); |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
1062 | } |
|
02f366130354
[gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents:
11318
diff
changeset
|
1063 | |
| 15884 | 1064 | PurpleSavedStatusSub * |
| 1065 | purple_savedstatus_get_substatus(const PurpleSavedStatus *saved_status, | |
| 1066 | const PurpleAccount *account) | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1067 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1068 | GList *iter; |
| 15884 | 1069 | PurpleSavedStatusSub *substatus; |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1070 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1071 | g_return_val_if_fail(saved_status != NULL, NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1072 | g_return_val_if_fail(account != NULL, NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1073 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1074 | for (iter = saved_status->substatuses; iter != NULL; iter = iter->next) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1075 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1076 | substatus = iter->data; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1077 | if (substatus->account == account) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1078 | return substatus; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1079 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1080 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1081 | return NULL; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1082 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1083 | |
| 15884 | 1084 | const PurpleStatusType * |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
1085 | purple_savedstatus_substatus_get_status_type(const PurpleSavedStatusSub *substatus) |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1086 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1087 | g_return_val_if_fail(substatus != NULL, NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1088 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1089 | return substatus->type; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1090 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1091 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1092 | const char * |
| 15884 | 1093 | purple_savedstatus_substatus_get_message(const PurpleSavedStatusSub *substatus) |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1094 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1095 | g_return_val_if_fail(substatus != NULL, NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1096 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1097 | return substatus->message; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1098 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1099 | |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1100 | void |
| 15884 | 1101 | purple_savedstatus_activate(PurpleSavedStatus *saved_status) |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1102 | { |
|
11733
61f0e3ce2b9b
[gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents:
11727
diff
changeset
|
1103 | GList *accounts, *node; |
| 15884 | 1104 | PurpleSavedStatus *old = purple_savedstatus_get_current(); |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1105 | |
|
11727
ef78f9d0efec
[gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents:
11724
diff
changeset
|
1106 | g_return_if_fail(saved_status != NULL); |
|
ef78f9d0efec
[gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents:
11724
diff
changeset
|
1107 | |
|
12729
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1108 | /* Make sure our list of saved statuses remains sorted */ |
|
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1109 | saved_status->lastused = time(NULL); |
|
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1110 | saved_status->usage_count++; |
|
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1111 | saved_statuses = g_list_remove(saved_statuses, saved_status); |
|
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1112 | saved_statuses = g_list_insert_sorted(saved_statuses, saved_status, saved_statuses_sort_func); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1113 | purple_prefs_set_int("/purple/savedstatus/default", |
| 15884 | 1114 | purple_savedstatus_get_creation_time(saved_status)); |
|
12729
1dbd1ec5c8b2
[gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents:
12724
diff
changeset
|
1115 | |
| 15884 | 1116 | accounts = purple_accounts_get_all_active(); |
|
11733
61f0e3ce2b9b
[gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents:
11727
diff
changeset
|
1117 | for (node = accounts; node != NULL; node = node->next) |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1118 | { |
| 15884 | 1119 | PurpleAccount *account; |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1120 | |
|
11733
61f0e3ce2b9b
[gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents:
11727
diff
changeset
|
1121 | account = node->data; |
|
12857
2e99b4a360fc
[gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents:
12814
diff
changeset
|
1122 | |
| 15884 | 1123 | purple_savedstatus_activate_for_account(saved_status, account); |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1124 | } |
|
11733
61f0e3ce2b9b
[gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents:
11727
diff
changeset
|
1125 | |
|
61f0e3ce2b9b
[gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents:
11727
diff
changeset
|
1126 | g_list_free(accounts); |
|
11954
7da15f32e1ca
[gaim-migrate @ 14245]
Mark Doliner <markdoliner@pidgin.im>
parents:
11806
diff
changeset
|
1127 | |
|
22868
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1128 | if (purple_savedstatus_is_idleaway()) { |
|
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1129 | purple_savedstatus_set_idleaway(FALSE); |
|
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1130 | } else { |
|
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1131 | purple_signal_emit(purple_savedstatuses_get_handle(), "savedstatus-changed", |
|
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1132 | saved_status, old); |
|
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1133 | } |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1134 | } |
|
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1135 | |
|
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1136 | void |
| 15884 | 1137 | purple_savedstatus_activate_for_account(const PurpleSavedStatus *saved_status, |
| 1138 | PurpleAccount *account) | |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1139 | { |
| 15884 | 1140 | const PurpleStatusType *status_type; |
| 1141 | const PurpleSavedStatusSub *substatus; | |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1142 | const char *message = NULL; |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1143 | |
|
11727
ef78f9d0efec
[gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents:
11724
diff
changeset
|
1144 | g_return_if_fail(saved_status != NULL); |
|
ef78f9d0efec
[gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents:
11724
diff
changeset
|
1145 | g_return_if_fail(account != NULL); |
|
ef78f9d0efec
[gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents:
11724
diff
changeset
|
1146 | |
| 15884 | 1147 | substatus = purple_savedstatus_get_substatus(saved_status, account); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1148 | if (substatus != NULL) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1149 | { |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1150 | status_type = substatus->type; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1151 | message = substatus->message; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1152 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1153 | else |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1154 | { |
| 15884 | 1155 | status_type = purple_account_get_status_type_with_primitive(account, saved_status->type); |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1156 | if (status_type == NULL) |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1157 | return; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1158 | message = saved_status->message; |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1159 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1160 | |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1161 | if ((message != NULL) && |
| 15884 | 1162 | (purple_status_type_get_attr(status_type, "message"))) |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1163 | { |
| 15884 | 1164 | purple_account_set_status(account, purple_status_type_get_id(status_type), |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1165 | TRUE, "message", message, NULL); |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1166 | } |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1167 | else |
|
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1168 | { |
| 15884 | 1169 | purple_account_set_status(account, purple_status_type_get_id(status_type), |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1170 | TRUE, NULL); |
|
11724
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1171 | } |
|
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1172 | } |
|
d3f71bc34b4f
[gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents:
11651
diff
changeset
|
1173 | |
|
34785
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1174 | static PurpleSavedStatus * |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1175 | purple_savedstatus_copy(PurpleSavedStatus *savedstatus) |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1176 | { |
|
34788
38d1b844ddb6
Updated GBoxed functions. Boxing is intended to be temporary for buddy list, saved status, plugins, status.
Ankit Vani <a@nevitus.org>
parents:
34785
diff
changeset
|
1177 | PurpleSavedStatus *savedstatus_copy; |
|
38d1b844ddb6
Updated GBoxed functions. Boxing is intended to be temporary for buddy list, saved status, plugins, status.
Ankit Vani <a@nevitus.org>
parents:
34785
diff
changeset
|
1178 | |
|
38d1b844ddb6
Updated GBoxed functions. Boxing is intended to be temporary for buddy list, saved status, plugins, status.
Ankit Vani <a@nevitus.org>
parents:
34785
diff
changeset
|
1179 | g_return_val_if_fail(savedstatus != NULL, NULL); |
|
38d1b844ddb6
Updated GBoxed functions. Boxing is intended to be temporary for buddy list, saved status, plugins, status.
Ankit Vani <a@nevitus.org>
parents:
34785
diff
changeset
|
1180 | |
|
38d1b844ddb6
Updated GBoxed functions. Boxing is intended to be temporary for buddy list, saved status, plugins, status.
Ankit Vani <a@nevitus.org>
parents:
34785
diff
changeset
|
1181 | savedstatus_copy = g_new(PurpleSavedStatus, 1); |
|
34785
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1182 | *savedstatus_copy = *savedstatus; |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1183 | |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1184 | return savedstatus_copy; |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1185 | } |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1186 | |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1187 | GType |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
1188 | purple_savedstatus_get_type(void) |
|
34785
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1189 | { |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1190 | static GType type = 0; |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1191 | |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1192 | if (type == 0) { |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1193 | type = g_boxed_type_register_static("PurpleSavedStatus", |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1194 | (GBoxedCopyFunc)purple_savedstatus_copy, |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1195 | (GBoxedFreeFunc)g_free); |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1196 | } |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1197 | |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1198 | return type; |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1199 | } |
|
99bcdb44c75f
Added boxed types for PurpleStatus and PurpleSavedStatus
Ankit Vani <a@nevitus.org>
parents:
32438
diff
changeset
|
1200 | |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1201 | void * |
| 15884 | 1202 | purple_savedstatuses_get_handle(void) |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1203 | { |
|
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1204 | static int handle; |
|
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1205 | |
|
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1206 | return &handle; |
|
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1207 | } |
|
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10738
diff
changeset
|
1208 | |
| 10418 | 1209 | void |
| 15884 | 1210 | purple_savedstatuses_init(void) |
| 10418 | 1211 | { |
| 15884 | 1212 | void *handle = purple_savedstatuses_get_handle(); |
| 13388 | 1213 | |
|
25597
ab94ee8c5910
Use g_direct_hash/equal instead of g_int_hash/equal for the hash table that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22868
diff
changeset
|
1214 | creation_times = g_hash_table_new(g_direct_hash, g_direct_equal); |
|
11975
0abdd0c63f0f
[gaim-migrate @ 14268]
Mark Doliner <markdoliner@pidgin.im>
parents:
11954
diff
changeset
|
1215 | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1216 | /* |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1217 | * Using 0 as the creation_time is a special case. |
| 15884 | 1218 | * If someone calls purple_savedstatus_get_current() or |
| 1219 | * purple_savedstatus_get_idleaway() and either of those functions | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1220 | * sees a creation_time of 0, then it will create a default |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1221 | * saved status and return that to the user. |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1222 | */ |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1223 | purple_prefs_add_none("/purple/savedstatus"); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1224 | purple_prefs_add_int("/purple/savedstatus/default", 0); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1225 | purple_prefs_add_int("/purple/savedstatus/startup", 0); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1226 | purple_prefs_add_bool("/purple/savedstatus/startup_current_status", TRUE); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1227 | purple_prefs_add_int("/purple/savedstatus/idleaway", 0); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16301
diff
changeset
|
1228 | purple_prefs_add_bool("/purple/savedstatus/isidleaway", FALSE); |
|
11975
0abdd0c63f0f
[gaim-migrate @ 14268]
Mark Doliner <markdoliner@pidgin.im>
parents:
11954
diff
changeset
|
1229 | |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1230 | load_statuses(); |
| 13388 | 1231 | |
| 15884 | 1232 | purple_signal_register(handle, "savedstatus-changed", |
|
34821
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1233 | purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, |
|
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1234 | PURPLE_TYPE_SAVEDSTATUS, PURPLE_TYPE_SAVEDSTATUS); |
| 14971 | 1235 | |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1236 | purple_signal_register(handle, "savedstatus-added", |
|
34821
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1237 | purple_marshal_VOID__POINTER, G_TYPE_NONE, 1, |
|
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1238 | PURPLE_TYPE_SAVEDSTATUS); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1239 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1240 | purple_signal_register(handle, "savedstatus-deleted", |
|
34821
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1241 | purple_marshal_VOID__POINTER, G_TYPE_NONE, 1, |
|
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1242 | PURPLE_TYPE_SAVEDSTATUS); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1243 | |
|
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1244 | purple_signal_register(handle, "savedstatus-modified", |
|
34821
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1245 | purple_marshal_VOID__POINTER, G_TYPE_NONE, 1, |
|
0e27ec95be63
Refactored plugin, savedstatuses and server to use GType and GValue instead of PurpleValue
Ankit Vani <a@nevitus.org>
parents:
34798
diff
changeset
|
1246 | PURPLE_TYPE_SAVEDSTATUS); |
|
18183
31e06ec80111
fixes #590 by allowing one to use the delete key to delete transient status,
Ka-Hing Cheung <khc@pidgin.im>
parents:
18068
diff
changeset
|
1247 | |
| 15884 | 1248 | purple_signal_connect(purple_accounts_get_handle(), "account-removed", |
| 14971 | 1249 | handle, |
| 15884 | 1250 | PURPLE_CALLBACK(purple_savedstatus_unset_all_substatuses), |
| 14971 | 1251 | NULL); |
| 10418 | 1252 | } |
| 1253 | ||
| 1254 | void | |
| 15884 | 1255 | purple_savedstatuses_uninit(void) |
| 10418 | 1256 | { |
|
28177
e62fe687ca6c
Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents:
27116
diff
changeset
|
1257 | gpointer handle = purple_savedstatuses_get_handle(); |
|
e62fe687ca6c
Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents:
27116
diff
changeset
|
1258 | |
|
12327
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
1259 | remove_old_transient_statuses(); |
|
95f220804a31
[gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents:
12309
diff
changeset
|
1260 | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1261 | if (save_timer != 0) |
| 10418 | 1262 | { |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
37484
diff
changeset
|
1263 | g_source_remove(save_timer); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1264 | save_timer = 0; |
| 10418 | 1265 | sync_statuses(); |
| 1266 | } | |
| 1267 | ||
| 1268 | while (saved_statuses != NULL) { | |
| 15884 | 1269 | PurpleSavedStatus *saved_status = saved_statuses->data; |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1270 | saved_statuses = g_list_remove(saved_statuses, saved_status); |
|
12724
58ed377f17db
[gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents:
12690
diff
changeset
|
1271 | free_saved_status(saved_status); |
| 10418 | 1272 | } |
|
12125
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1273 | |
|
c1e55f812ded
[gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents:
12123
diff
changeset
|
1274 | g_hash_table_destroy(creation_times); |
|
22868
7ef8674b5d1d
Avoiding emitting the "savedstatus-changed" signal twice when the savedstatus
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1275 | creation_times = NULL; |
| 13388 | 1276 | |
|
28177
e62fe687ca6c
Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents:
27116
diff
changeset
|
1277 | purple_signals_unregister_by_instance(handle); |
|
e62fe687ca6c
Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents:
27116
diff
changeset
|
1278 | purple_signals_disconnect_by_handle(handle); |
| 10418 | 1279 | } |
|
12056
ddfcb4df0965
[gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11977
diff
changeset
|
1280 |