src/savedstatuses.c

Fri, 06 Jan 2006 04:46:00 +0000

author
Casey Harkins <charkins@pidgin.im>
date
Fri, 06 Jan 2006 04:46:00 +0000
changeset 12744
45d72d69f399
parent 12729
1dbd1ec5c8b2
child 12781
2fda73c527c8
permissions
-rw-r--r--

[gaim-migrate @ 15091]
" Adds an emblem to a buddy if they have a queued message
(hidden conversation). In the large buddy list it is
added in the northwest corner, sliding the existing
northwest emblem (if specified) to the northeast
position and discarding the northeast emblem. In the
small buddy list, the emblem is added to the southeast.

Attached is a patch and an emblem image to be dropped
in pixmaps/status/default/. The emblem image is a
scaled down version of the send-im.png image." -- Casey Harkins

as I asked for this patch, and since there don't seem to be objections to
it (yet), I'm going ahead and applying it.

committer: Luke Schierer <lschiere@pidgin.im>

10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /**
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
2 * @file savedstatus.c Saved Status API
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 * @ingroup core
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
4 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
5 * gaim
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
6 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 * source distribution.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
14 * (at your option) any later version.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
19 * GNU General Public License for more details.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
20 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24 */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25 #include "internal.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
27 #include "debug.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28 #include "notify.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 #include "savedstatuses.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 #include "status.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
31 #include "util.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 #include "xmlnode.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 /**
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
35 * The maximum number of transient statuses to save. This
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
36 * is used during the shutdown process to clean out old
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
37 * transient statuses.
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
38 */
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
39 #define MAX_TRANSIENTS 5
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
40
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
41 /**
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
42 * The information stores a snap-shot of the statuses of all
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43 * your accounts. Basically these are your saved away messages.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44 * There is an overall status and message that applies to
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
45 * all your accounts, and then each individual account can
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
46 * optionally have a different custom status and message.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
48 * The changes to status.xml caused by the new status API
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
49 * are fully backward compatible. The new status API just
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
50 * adds the optional sub-statuses to the XML file.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
52 struct _GaimSavedStatus
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 char *title;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55 GaimStatusPrimitive type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56 char *message;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
58 /** The timestamp when this saved status was created. This must be unique. */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
59 time_t creation_time;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
60
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
61 time_t lastused;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
62
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
63 unsigned int usage_count;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
64
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
65 GList *substatuses; /**< A list of GaimSavedStatusSub's. */
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
66 };
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
67
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
68 /*
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
69 * TODO: If a GaimStatusType is deleted, need to also delete any
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
70 * associated GaimSavedStatusSub's?
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
71 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
72 struct _GaimSavedStatusSub
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
73 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
74 GaimAccount *account;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 const GaimStatusType *type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
76 char *message;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
77 };
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
78
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
79 static GList *saved_statuses = NULL;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
80 static guint save_timer = 0;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
81 static gboolean statuses_loaded = FALSE;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
82
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
83 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
84 * This hash table keeps track of which timestamps we've
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
85 * 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
86 * same 'creation_time' timestamp. The 'created' timestamp
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
87 * is used as a unique identifier.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
88 *
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
89 * So the key in this hash table is the creation_time and
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
90 * the value is a pointer to the GaimSavedStatus.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
91 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
92 static GHashTable *creation_times;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
93
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
94 static void schedule_save(void);
10427
2ea1412bc75f [gaim-migrate @ 11679]
Mark Doliner <markdoliner@pidgin.im>
parents: 10426
diff changeset
95
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
96 /*********************************************************************
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
97 * Private utility functions *
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
98 *********************************************************************/
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
99
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
100 static void
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
101 free_saved_status_sub(GaimSavedStatusSub *substatus)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
102 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
103 g_return_if_fail(substatus != NULL);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
104
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
105 g_free(substatus->message);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106 g_free(substatus);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
109 static void
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
110 free_saved_status(GaimSavedStatus *status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
111 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
112 g_return_if_fail(status != NULL);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
113
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
114 g_free(status->title);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
115 g_free(status->message);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
116
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
117 while (status->substatuses != NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
118 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
119 GaimSavedStatusSub *substatus = status->substatuses->data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
120 status->substatuses = g_list_remove(status->substatuses, substatus);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
121 free_saved_status_sub(substatus);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
122 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
123
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
124 g_free(status);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
125 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
126
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
127 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
128 * Set the timestamp for when this saved status was created, and
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
129 * make sure it is unique.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
130 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
131 static void
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
132 set_creation_time(GaimSavedStatus *status, time_t creation_time)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
133 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
134 g_return_if_fail(status != NULL);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
135
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
136 /* Avoid using 0 because it's an invalid hash key */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
137 status->creation_time = creation_time != 0 ? creation_time : 1;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
138
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
139 while (g_hash_table_lookup(creation_times, &status->creation_time) != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
140 status->creation_time++;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
141
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
142 g_hash_table_insert(creation_times,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
143 &status->creation_time,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
144 status);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
145 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
146
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
147 /**
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
148 * A magic number is calcuated for each status, and then the
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
149 * statuses are ordered by the magic number. The magic number
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
150 * 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
151 * 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
152 * the most).
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
153 *
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
154 * 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
155 * the list, but to also keep frequently used statuses near
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
156 * the top.
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
157 */
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
158 static gint
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
159 saved_statuses_sort_func(gconstpointer a, gconstpointer b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
160 {
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
161 const GaimSavedStatus *saved_status_a = a;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
162 const GaimSavedStatus *saved_status_b = b;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
163 time_t time_a = saved_status_a->lastused +
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
164 (MIN(saved_status_a->usage_count, 10) * 86400);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
165 time_t time_b = saved_status_b->lastused +
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
166 (MIN(saved_status_b->usage_count, 10) * 86400);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
167 if (time_a > time_b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
168 return -1;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
169 if (time_a < time_b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
170 return 1;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
171 return 0;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
172 }
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
173
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
174 /**
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
175 * Transient statuses are added and removed automatically by
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
176 * Gaim. If they're not used for a certain length of time then
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
177 * they'll expire and be automatically removed. This function
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
178 * does the expiration.
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 static void
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
181 remove_old_transient_statuses()
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
182 {
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
183 GList *l, *next;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
184 GaimSavedStatus *saved_status;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
185 int count;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
186 time_t creation_time;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
187
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
188 /*
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
189 * Iterate through the list of saved statuses. Delete all
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
190 * transient statuses except for the first MAX_TRANSIENTS
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
191 * (remember, the saved statuses are already sorted by popularity).
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
192 */
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
193 count = 0;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
194 for (l = saved_statuses; l != NULL; l = next)
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
195 {
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
196 next = l->next;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
197 saved_status = l->data;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
198 if (gaim_savedstatus_is_transient(saved_status))
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
199 {
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
200 if (count == MAX_TRANSIENTS)
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
201 {
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
202 saved_statuses = g_list_remove(saved_statuses, saved_status);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
203 creation_time = gaim_savedstatus_get_creation_time(saved_status);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
204 g_hash_table_remove(creation_times, &creation_time);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
205 free_saved_status(saved_status);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
206 }
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
207 else
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
208 count++;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
209 }
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
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
212 if (count == MAX_TRANSIENTS)
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
213 schedule_save();
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
214 }
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
215
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
216 /*********************************************************************
10429
cc2f5ab7ed77 [gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents: 10428
diff changeset
217 * Writing to disk *
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
218 *********************************************************************/
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
219
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
220 static xmlnode *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
221 substatus_to_xmlnode(GaimSavedStatusSub *substatus)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
222 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
223 xmlnode *node, *child;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
224
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
225 node = xmlnode_new("substatus");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
226
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
227 child = xmlnode_new_child(node, "account");
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
228 xmlnode_set_attrib(child, "protocol", gaim_account_get_protocol_id(substatus->account));
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
229 xmlnode_insert_data(child, gaim_account_get_username(substatus->account), -1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
230
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
231 child = xmlnode_new_child(node, "state");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
232 xmlnode_insert_data(child, gaim_status_type_get_id(substatus->type), -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
233
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
234 if (substatus->message != NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
235 {
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
236 child = xmlnode_new_child(node, "message");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
237 xmlnode_insert_data(child, substatus->message, -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
238 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
239
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
240 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
241 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
242
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
243 static xmlnode *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
244 status_to_xmlnode(GaimSavedStatus *status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
245 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
246 xmlnode *node, *child;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
247 char buf[21];
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
248 GList *cur;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
249
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
250 node = xmlnode_new("status");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
251 if (status->title != NULL)
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
252 {
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
253 xmlnode_set_attrib(node, "name", status->title);
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
254 }
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
255 else
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
256 {
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
257 /*
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
258 * Gaim 1.5.0 and earlier require a name to be set, so we
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
259 * do this little hack to maintain backward compatability
12309
e42cff3223a3 [gaim-migrate @ 14613]
Mark Doliner <markdoliner@pidgin.im>
parents: 12283
diff changeset
260 * in the status.xml file. Eventually this should be removed
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
261 * and we should determine if a status is transient by
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
262 * whether the "name" attribute is set to something or if
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
263 * it does not exist at all.
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
264 */
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
265 xmlnode_set_attrib(node, "name", "Auto-Cached");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
266 xmlnode_set_attrib(node, "transient", "true");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
267 }
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
268
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
269 snprintf(buf, sizeof(buf), "%lu", status->creation_time);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
270 xmlnode_set_attrib(node, "created", buf);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
271
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
272 snprintf(buf, sizeof(buf), "%lu", status->lastused);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
273 xmlnode_set_attrib(node, "lastused", buf);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
274
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
275 snprintf(buf, sizeof(buf), "%u", status->usage_count);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
276 xmlnode_set_attrib(node, "usage_count", buf);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
277
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
278 child = xmlnode_new_child(node, "state");
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
279 xmlnode_insert_data(child, gaim_primitive_get_id_from_type(status->type), -1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
280
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
281 if (status->message != NULL)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
282 {
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
283 child = xmlnode_new_child(node, "message");
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
284 xmlnode_insert_data(child, status->message, -1);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
285 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
286
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
287 for (cur = status->substatuses; cur != NULL; cur = cur->next)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
288 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
289 child = substatus_to_xmlnode(cur->data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
290 xmlnode_insert_child(node, child);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
291 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
292
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
293 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
294 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
295
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
296 static xmlnode *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
297 statuses_to_xmlnode(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
298 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
299 xmlnode *node, *child;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300 GList *cur;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302 node = xmlnode_new("statuses");
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
303 xmlnode_set_attrib(node, "version", "1.0");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
304
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
305 for (cur = saved_statuses; cur != NULL; cur = cur->next)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
306 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
307 child = status_to_xmlnode(cur->data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
308 xmlnode_insert_child(node, child);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
309 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
310
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
311 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
312 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
313
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
314 static void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
315 sync_statuses(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
316 {
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
317 xmlnode *node;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
318 char *data;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
319
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
320 if (!statuses_loaded)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
321 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
322 gaim_debug_error("status", "Attempted to save statuses before they "
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
323 "were read!\n");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
324 return;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
325 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
326
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
327 node = statuses_to_xmlnode();
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
328 data = xmlnode_to_formatted_str(node, NULL);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
329 gaim_util_write_data_to_file("status.xml", data, -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
330 g_free(data);
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
331 xmlnode_free(node);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
332 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
333
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
334 static gboolean
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
335 save_cb(gpointer data)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
336 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
337 sync_statuses();
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
338 save_timer = 0;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
339 return FALSE;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
340 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
341
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
342 static void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
343 schedule_save(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
344 {
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
345 if (save_timer == 0)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
346 save_timer = gaim_timeout_add(5000, save_cb, NULL);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
347 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
348
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
349
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
350 /*********************************************************************
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
351 * Reading from disk *
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
352 *********************************************************************/
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
353
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
354 static GaimSavedStatusSub *
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
355 parse_substatus(xmlnode *substatus)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
356 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
357 GaimSavedStatusSub *ret;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
358 xmlnode *node;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
359 char *data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
360
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
361 ret = g_new0(GaimSavedStatusSub, 1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
362
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
363 /* Read the account */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
364 node = xmlnode_get_child(substatus, "account");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
365 if (node != NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
366 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
367 char *acct_name;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
368 const char *protocol;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
369 acct_name = xmlnode_get_data(node);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
370 protocol = xmlnode_get_attrib(node, "protocol");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
371 if ((acct_name != NULL) && (protocol != NULL))
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
372 ret->account = gaim_accounts_find(acct_name, protocol);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
373 g_free(acct_name);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
374 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
375
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
376 if (ret->account == NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
377 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
378 g_free(ret);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
379 return NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
380 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
381
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
382 /* Read the state */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
383 node = xmlnode_get_child(substatus, "state");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
384 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
385 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
386 ret->type = gaim_status_type_find_with_id(
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
387 ret->account->status_types, data);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
388 g_free(data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
389 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
390
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
391 /* Read the message */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
392 node = xmlnode_get_child(substatus, "message");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
393 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
394 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
395 ret->message = data;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
396 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
397
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
398 return ret;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
399 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
400
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
401 /**
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
402 * Parse a saved status and add it to the saved_statuses linked list.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
403 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
404 * Here's an example of the XML for a saved status:
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
405 * <status name="Girls">
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
406 * <state>away</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
407 * <message>I like the way that they walk
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
408 * And it's chill to hear them talk
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
409 * And I can always make them smile
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
410 * From White Castle to the Nile</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
411 * <substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
412 * <account protocol='prpl-oscar'>markdoliner</account>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
413 * <state>available</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
414 * <message>The ladies man is here to answer your queries.</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
415 * </substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
416 * <substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
417 * <account protocol='prpl-oscar'>giantgraypanda</account>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
418 * <state>away</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
419 * <message>A.C. ain't in charge no more.</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
420 * </substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
421 * </status>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
422 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
423 * I know. Moving, huh?
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
424 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
425 static GaimSavedStatus *
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
426 parse_status(xmlnode *status)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
427 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
428 GaimSavedStatus *ret;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
429 xmlnode *node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
430 const char *attrib;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
431 char *data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
432 int i;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
433
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
434 ret = g_new0(GaimSavedStatus, 1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
435
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
436 attrib = xmlnode_get_attrib(status, "transient");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
437 if ((attrib == NULL) || (strcmp(attrib, "true")))
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
438 {
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
439 /* Read the title */
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
440 attrib = xmlnode_get_attrib(status, "name");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
441 ret->title = g_strdup(attrib);
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
442 }
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
443
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
444 if (ret->title != NULL)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
445 {
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
446 /* Ensure the title is unique */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
447 i = 2;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
448 while (gaim_savedstatus_find(ret->title) != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
449 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
450 g_free(ret->title);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
451 ret->title = g_strdup_printf("%s %d", attrib, i);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
452 i++;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
453 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
454 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
455
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
456 /* Read the creation time */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
457 attrib = xmlnode_get_attrib(status, "created");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
458 set_creation_time(ret, (attrib != NULL ? atol(attrib) : 0));
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
459
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
460 /* Read the last used time */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
461 attrib = xmlnode_get_attrib(status, "lastused");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
462 ret->lastused = (attrib != NULL ? atol(attrib) : 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
463
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
464 /* Read the usage count */
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
465 attrib = xmlnode_get_attrib(status, "usage_count");
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
466 ret->usage_count = (attrib != NULL ? atol(attrib) : 0);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
467
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
468 /* Read the primitive status type */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
469 node = xmlnode_get_child(status, "state");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
470 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
471 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
472 ret->type = gaim_primitive_get_type_from_id(data);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
473 g_free(data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
474 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
475
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
476 /* Read the message */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
477 node = xmlnode_get_child(status, "message");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
478 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
479 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
480 ret->message = data;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
481 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
482
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
483 /* Read substatuses */
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
484 for (node = xmlnode_get_child(status, "substatus"); node != NULL;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
485 node = xmlnode_get_next_twin(node))
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
486 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
487 GaimSavedStatusSub *new;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
488 new = parse_substatus(node);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
489 if (new != NULL)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
490 ret->substatuses = g_list_prepend(ret->substatuses, new);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
491 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
492
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
493 return ret;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
494 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
495
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
496 /**
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
497 * Read the saved statuses from a file in the Gaim user dir.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
498 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
499 * @return TRUE on success, FALSE on failure (if the file can not
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
500 * be opened, or if it contains invalid XML).
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
501 */
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
502 static void
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
503 load_statuses(void)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
504 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
505 xmlnode *statuses, *status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
506
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
507 statuses_loaded = TRUE;
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
508
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
509 statuses = gaim_util_read_xml_from_file("status.xml", _("saved statuses"));
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
510
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
511 if (statuses == NULL)
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
512 return;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
513
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
514 for (status = xmlnode_get_child(statuses, "status"); status != NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
515 status = xmlnode_get_next_twin(status))
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
516 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
517 GaimSavedStatus *new;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
518 new = parse_status(status);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
519 saved_statuses = g_list_prepend(saved_statuses, new);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
520 }
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
521 saved_statuses = g_list_sort(saved_statuses, saved_statuses_sort_func);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
522
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
523 xmlnode_free(statuses);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
524 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
525
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
526
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
527 /**************************************************************************
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
528 * Saved status API
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
529 **************************************************************************/
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
530 GaimSavedStatus *
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
531 gaim_savedstatus_new(const char *title, GaimStatusPrimitive type)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
532 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
533 GaimSavedStatus *status;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
534
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
535 /* 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
536 if (title != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
537 g_return_val_if_fail(gaim_savedstatus_find(title) == NULL, NULL);
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
538
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
539 status = g_new0(GaimSavedStatus, 1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
540 status->title = g_strdup(title);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
541 status->type = type;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
542 set_creation_time(status, time(NULL));
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
543
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
544 saved_statuses = g_list_insert_sorted(saved_statuses, status, saved_statuses_sort_func);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
545
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
546 schedule_save();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
547
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
548 return status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
549 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
550
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
551 void
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
552 gaim_savedstatus_set_title(GaimSavedStatus *status, const char *title)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
553 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
554 g_return_if_fail(status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
555
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
556 /* Make sure we don't already have a saved status with this title. */
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
557 g_return_if_fail(gaim_savedstatus_find(title) == NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
558
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
559 g_free(status->title);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
560 status->title = g_strdup(title);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
561
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
562 schedule_save();
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
563 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
564
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
565 void
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
566 gaim_savedstatus_set_type(GaimSavedStatus *status, GaimStatusPrimitive type)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
567 {
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
568 g_return_if_fail(status != NULL);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
569
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
570 status->type = type;
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
571
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
572 schedule_save();
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
573 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
574
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
575 void
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
576 gaim_savedstatus_set_message(GaimSavedStatus *status, const char *message)
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
577 {
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
578 g_return_if_fail(status != NULL);
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
579
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
580 g_free(status->message);
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
581 status->message = g_strdup(message);
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
582
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
583 schedule_save();
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
584 }
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
585
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
586 void
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
587 gaim_savedstatus_set_substatus(GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
588 const GaimAccount *account,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
589 const GaimStatusType *type,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
590 const char *message)
12056
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 GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
593
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
594 g_return_if_fail(saved_status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
595 g_return_if_fail(account != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
596 g_return_if_fail(type != NULL);
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 /* Find an existing substatus or create a new one */
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
599 substatus = gaim_savedstatus_get_substatus(saved_status, account);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
600 if (substatus == NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
601 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
602 substatus = g_new0(GaimSavedStatusSub, 1);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
603 substatus->account = (GaimAccount *)account;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
604 saved_status->substatuses = g_list_prepend(saved_status->substatuses, substatus);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
605 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
606
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
607 substatus->type = type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
608 g_free(substatus->message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
609 substatus->message = g_strdup(message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
610
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
611 schedule_save();
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
612 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
613
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
614 void
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
615 gaim_savedstatus_unset_substatus(GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
616 const GaimAccount *account)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
617 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
618 GList *iter;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
619 GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
620
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
621 g_return_if_fail(saved_status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
622 g_return_if_fail(account != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
623
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
624 for (iter = saved_status->substatuses; iter != NULL; iter = iter->next)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
625 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
626 substatus = iter->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
627 if (substatus->account == account)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
628 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
629 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
630 g_free(substatus->message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
631 g_free(substatus);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
632 return;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
633 }
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 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
636
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
637 gboolean
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
638 gaim_savedstatus_delete(const char *title)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
639 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
640 GaimSavedStatus *status;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
641 time_t creation_time, current, idleaway;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
642
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
643 status = gaim_savedstatus_find(title);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
644
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
645 if (status == NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
646 return FALSE;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
647
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
648 saved_statuses = g_list_remove(saved_statuses, status);
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
649 creation_time = gaim_savedstatus_get_creation_time(status);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
650 g_hash_table_remove(creation_times, &creation_time);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
651 free_saved_status(status);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
652
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
653 schedule_save();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
654
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
655 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
656 * If we just deleted our current status or our idleaway status,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
657 * then set the appropriate pref back to 0.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
658 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
659 current = gaim_prefs_get_int("/core/savedstatus/current");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
660 if (current == creation_time)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
661 gaim_prefs_set_int("/core/savedstatus/current", 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
662
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
663 idleaway = gaim_prefs_get_int("/core/savedstatus/idleaway");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
664 if (idleaway == creation_time)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
665 gaim_prefs_set_int("/core/savedstatus/idleaway", 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
666
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
667 return TRUE;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
668 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
669
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
670 const GList *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
671 gaim_savedstatuses_get_all(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
672 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
673 return saved_statuses;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
674 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
675
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
676 GList *
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
677 gaim_savedstatuses_get_popular(unsigned int how_many)
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
678 {
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
679 GList *truncated = NULL;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
680 GList *cur;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
681 int i;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
682
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
683 /* Copy 'how_many' elements to a new list */
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
684 for (i = 0, cur = saved_statuses; (i < how_many) && (cur != NULL); i++)
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
685 {
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
686 truncated = g_list_append(truncated, cur->data);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
687 cur = cur->next;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
688 }
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
689
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
690 return truncated;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
691 }
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
692
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
693 GaimSavedStatus *
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
694 gaim_savedstatus_get_current()
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
695 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
696 int creation_time;
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
697 GaimSavedStatus *saved_status = NULL;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
698
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
699 creation_time = gaim_prefs_get_int("/core/savedstatus/current");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
700
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
701 if (creation_time != 0)
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
702 saved_status = g_hash_table_lookup(creation_times, &creation_time);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
703
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
704 if (saved_status == NULL)
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
705 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
706 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
707 * We don't have a current saved statuses! This is either a new
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
708 * Gaim user or someone upgrading from Gaim 1.5.0 or older, or
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
709 * possibly someone who deleted the status they were currently
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
710 * using? In any case, add a default status.
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
711 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
712 saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_AVAILABLE);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
713 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
714
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
715 return saved_status;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
716 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
717
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
718 GaimSavedStatus *
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
719 gaim_savedstatus_get_idleaway()
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
720 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
721 int creation_time;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
722 GaimSavedStatus *saved_status;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
723
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
724 creation_time = gaim_prefs_get_int("/core/savedstatus/idleaway");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
725
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
726 if (creation_time == 0)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
727 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
728 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
729 * We don't have a current saved statuses! This is either a new
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
730 * Gaim user or someone upgrading from Gaim 1.5.0 or older. Add
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
731 * a default status.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
732 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
733 saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_AWAY);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
734 gaim_savedstatus_set_message(saved_status, _("I'm not here right now"));
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
735 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
736 else
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
737 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
738 saved_status = g_hash_table_lookup(creation_times, &creation_time);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
739 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
740
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
741 return saved_status;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
742 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
743
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
744 GaimSavedStatus *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
745 gaim_savedstatus_find(const char *title)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
746 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
747 GList *iter;
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
748 GaimSavedStatus *status;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
749
11977
51548c459a94 [gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents: 11975
diff changeset
750 g_return_val_if_fail(title != NULL, NULL);
51548c459a94 [gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents: 11975
diff changeset
751
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
752 for (iter = saved_statuses; iter != NULL; iter = iter->next)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
753 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
754 status = (GaimSavedStatus *)iter->data;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
755 if ((status->title != NULL) && !strcmp(status->title, title))
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
756 return status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
757 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
758
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
759 return NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
760 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
761
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
762 GaimSavedStatus *
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
763 gaim_savedstatus_find_by_creation_time(time_t creation_time)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
764 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
765 GList *iter;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
766 GaimSavedStatus *status;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
767
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
768 for (iter = saved_statuses; iter != NULL; iter = iter->next)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
769 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
770 status = (GaimSavedStatus *)iter->data;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
771 if (status->creation_time == creation_time)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
772 return status;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
773 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
774
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
775 return NULL;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
776 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
777
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
778 gboolean
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
779 gaim_savedstatus_is_transient(const GaimSavedStatus *saved_status)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
780 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
781 g_return_val_if_fail(saved_status != NULL, TRUE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
782
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
783 return (saved_status->title == NULL);
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
784 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
785
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
786 const char *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
787 gaim_savedstatus_get_title(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
788 {
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
789 const char *message;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
790
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
791 g_return_val_if_fail(saved_status != NULL, NULL);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
792
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
793 /* If we have a title then return it */
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
794 if (saved_status->title != NULL)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
795 return saved_status->title;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
796
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
797 /* Otherwise, this is a transient status and we make up a title on the fly */
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
798 message = gaim_savedstatus_get_message(saved_status);
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
799
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
800 if (message == NULL)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
801 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
802 GaimStatusPrimitive primitive;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
803 primitive = gaim_savedstatus_get_type(saved_status);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
804 return gaim_primitive_get_id_from_type(primitive);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
805 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
806 else
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
807 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
808 char *stripped;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
809 static char buf[64];
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
810 stripped = gaim_markup_strip_html(message);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
811 gaim_util_chrreplace(stripped, '\n', ' ');
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
812 strncpy(buf, stripped, sizeof(buf));
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
813 buf[sizeof(buf) - 1] = '\0';
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
814 if ((strlen(stripped) + 1) > sizeof(buf))
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
815 {
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
816 /* Truncate and ellipsize */
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
817 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
818 strcpy(tmp, "...");
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
819 }
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
820 g_free(stripped);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
821 return buf;
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
822 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
823 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
824
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
825 GaimStatusPrimitive
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
826 gaim_savedstatus_get_type(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
827 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
828 g_return_val_if_fail(saved_status != NULL, GAIM_STATUS_OFFLINE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
829
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
830 return saved_status->type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
831 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
832
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
833 const char *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
834 gaim_savedstatus_get_message(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
835 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
836 g_return_val_if_fail(saved_status != NULL, NULL);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
837
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
838 return saved_status->message;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
839 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
840
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
841 time_t
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
842 gaim_savedstatus_get_creation_time(const GaimSavedStatus *saved_status)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
843 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
844 g_return_val_if_fail(saved_status != NULL, 0);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
845
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
846 return saved_status->creation_time;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
847 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
848
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
849 gboolean
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
850 gaim_savedstatus_has_substatuses(const GaimSavedStatus *saved_status)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
851 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
852 g_return_val_if_fail(saved_status != NULL, FALSE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
853
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
854 return (saved_status->substatuses != NULL);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
855 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
856
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
857 GaimSavedStatusSub *
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
858 gaim_savedstatus_get_substatus(const GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
859 const GaimAccount *account)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
860 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
861 GList *iter;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
862 GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
863
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
864 g_return_val_if_fail(saved_status != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
865 g_return_val_if_fail(account != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
866
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
867 for (iter = saved_status->substatuses; iter != NULL; iter = iter->next)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
868 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
869 substatus = iter->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
870 if (substatus->account == account)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
871 return substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
872 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
873
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
874 return NULL;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
875 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
876
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
877 const GaimStatusType *
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
878 gaim_savedstatus_substatus_get_type(const GaimSavedStatusSub *substatus)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
879 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
880 g_return_val_if_fail(substatus != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
881
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
882 return substatus->type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
883 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
884
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
885 const char *
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
886 gaim_savedstatus_substatus_get_message(const GaimSavedStatusSub *substatus)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
887 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
888 g_return_val_if_fail(substatus != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
889
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
890 return substatus->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
891 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
892
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
893 void
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
894 gaim_savedstatus_activate(GaimSavedStatus *saved_status)
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
895 {
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
896 GList *accounts, *node;
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
897
11727
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
898 g_return_if_fail(saved_status != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
899
12729
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
900 /* Make sure our list of saved statuses remains sorted */
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
901 saved_status->lastused = time(NULL);
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
902 saved_status->usage_count++;
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
903 saved_statuses = g_list_remove(saved_statuses, saved_status);
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
904 saved_statuses = g_list_insert_sorted(saved_statuses, saved_status, saved_statuses_sort_func);
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
905
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
906 accounts = gaim_accounts_get_all_active();
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
907 for (node = accounts; node != NULL; node = node->next)
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
908 {
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
909 GaimAccount *account;
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
910
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
911 account = node->data;
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
912 gaim_savedstatus_activate_for_account(saved_status, account);
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
913 }
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
914
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
915 g_list_free(accounts);
11954
7da15f32e1ca [gaim-migrate @ 14245]
Mark Doliner <markdoliner@pidgin.im>
parents: 11806
diff changeset
916
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
917 gaim_prefs_set_int("/core/savedstatus/current",
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
918 gaim_savedstatus_get_creation_time(saved_status));
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
919 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
920
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
921 void
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
922 gaim_savedstatus_activate_for_account(const GaimSavedStatus *saved_status,
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
923 GaimAccount *account)
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
924 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
925 const GaimStatusType *status_type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
926 const GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
927 const char *message = NULL;
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
928
11727
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
929 g_return_if_fail(saved_status != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
930 g_return_if_fail(account != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
931
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
932 substatus = gaim_savedstatus_get_substatus(saved_status, account);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
933 if (substatus != NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
934 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
935 status_type = substatus->type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
936 message = substatus->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
937 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
938 else
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
939 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
940 status_type = gaim_account_get_status_type_with_primitive(account, saved_status->type);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
941 if (status_type == NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
942 return;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
943 message = saved_status->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
944 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
945
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
946 if ((message != NULL) &&
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
947 (gaim_status_type_get_attr(status_type, "message")))
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
948 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
949 gaim_account_set_status(account, gaim_status_type_get_id(status_type),
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
950 TRUE, "message", message, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
951 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
952 else
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
953 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
954 gaim_account_set_status(account, gaim_status_type_get_id(status_type),
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
955 TRUE, NULL);
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
956 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
957 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
958
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
959 void *
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
960 gaim_savedstatuses_get_handle(void)
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
961 {
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
962 static int handle;
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
963
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
964 return &handle;
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
965 }
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
966
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
967 void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
968 gaim_savedstatuses_init(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
969 {
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
970 creation_times = g_hash_table_new(g_int_hash, g_int_equal);
11975
0abdd0c63f0f [gaim-migrate @ 14268]
Mark Doliner <markdoliner@pidgin.im>
parents: 11954
diff changeset
971
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
972 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
973 * Using 0 as the creation_time is a special case.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
974 * If someone calls gaim_savedstatus_get_current() or
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
975 * gaim_savedstatus_get_idleaway() and either of those functions
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
976 * 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
977 * saved status and return that to the user.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
978 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
979 gaim_prefs_add_none("/core/savedstatus");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
980 gaim_prefs_add_int("/core/savedstatus/current", 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
981 gaim_prefs_add_int("/core/savedstatus/idleaway", 0);
11975
0abdd0c63f0f [gaim-migrate @ 14268]
Mark Doliner <markdoliner@pidgin.im>
parents: 11954
diff changeset
982
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
983 load_statuses();
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
984 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
985
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
986 void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
987 gaim_savedstatuses_uninit(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
988 {
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
989 remove_old_transient_statuses();
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
990
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
991 if (save_timer != 0)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
992 {
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
993 gaim_timeout_remove(save_timer);
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
994 save_timer = 0;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
995 sync_statuses();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
996 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
997
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
998 while (saved_statuses != NULL) {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
999 GaimSavedStatus *saved_status = saved_statuses->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1000 saved_statuses = g_list_remove(saved_statuses, saved_status);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
1001 free_saved_status(saved_status);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1002 }
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1003
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1004 g_hash_table_destroy(creation_times);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1005 }
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1006

mercurial