libgaim/savedstatuses.c

Tue, 29 Aug 2006 02:22:08 +0000

author
Hil <allhilbert@users.sourceforge.net>
date
Tue, 29 Aug 2006 02:22:08 +0000
changeset 14432
3710852cdab5
parent 14423
bf504ef2e5e2
child 14725
39980ddc0b9a
permissions
-rw-r--r--

[gaim-migrate @ 17076]
SF Patch #1547720 from Hilbert
Fixes SF Bug #1541097

If you search, leave the Find dialog open, switch tabs, and search again, the search happens in the original tab. This patch fixes that bug. Now when you search, it searches in the active conversation window.

committer: Richard Laager <rlaager@pidgin.im>

10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /**
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
2 * @file savedstatuses.c Saved Status API
10418
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"
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
28 #include "idle.h"
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 #include "notify.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 #include "savedstatuses.h"
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
31 #include "dbus-maybe.h"
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 #include "status.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33 #include "util.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 #include "xmlnode.h"
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36 /**
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
37 * The maximum number of transient statuses to save. This
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
38 * is used during the shutdown process to clean out old
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
39 * transient statuses.
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 #define MAX_TRANSIENTS 5
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
42
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
43 /**
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
44 * The default message to use when the user becomes auto-away.
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
45 */
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
46 #define DEFAULT_AUTOAWAY_MESSAGE _("I'm not here right now")
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
47
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
48 /**
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
49 * The information stores a snap-shot of the statuses of all
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
50 * your accounts. Basically these are your saved away messages.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 * There is an overall status and message that applies to
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
52 * all your accounts, and then each individual account can
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53 * optionally have a different custom status and message.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55 * The changes to status.xml caused by the new status API
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56 * are fully backward compatible. The new status API just
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57 * adds the optional sub-statuses to the XML file.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
58 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
59 struct _GaimSavedStatus
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
61 char *title;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
62 GaimStatusPrimitive type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
63 char *message;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
64
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
65 /** 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
66 time_t creation_time;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
67
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
68 time_t lastused;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
69
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
70 unsigned int usage_count;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
71
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
72 GList *substatuses; /**< A list of GaimSavedStatusSub's. */
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
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 /*
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
76 * 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
77 * associated GaimSavedStatusSub's?
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
78 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
79 struct _GaimSavedStatusSub
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
80 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81 GaimAccount *account;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
82 const GaimStatusType *type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
83 char *message;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
84 };
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
85
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
86 static GList *saved_statuses = NULL;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
87 static guint save_timer = 0;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
88 static gboolean statuses_loaded = FALSE;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
89
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
90 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
91 * This hash table keeps track of which timestamps we've
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
92 * 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
93 * same 'creation_time' timestamp. The 'created' timestamp
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
94 * is used as a unique identifier.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
95 *
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
96 * 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
97 * the value is a pointer to the GaimSavedStatus.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
98 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
99 static GHashTable *creation_times;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
100
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
101 static void schedule_save(void);
10427
2ea1412bc75f [gaim-migrate @ 11679]
Mark Doliner <markdoliner@pidgin.im>
parents: 10426
diff changeset
102
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
103 /*********************************************************************
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
104 * Private utility functions *
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
105 *********************************************************************/
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 static void
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
108 free_saved_status_sub(GaimSavedStatusSub *substatus)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
109 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
110 g_return_if_fail(substatus != NULL);
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_free(substatus->message);
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
113 GAIM_DBUS_UNREGISTER_POINTER(substatus);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
114 g_free(substatus);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
115 }
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 static void
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
118 free_saved_status(GaimSavedStatus *status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
119 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
120 g_return_if_fail(status != NULL);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
121
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
122 g_free(status->title);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
123 g_free(status->message);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
124
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
125 while (status->substatuses != NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
126 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
127 GaimSavedStatusSub *substatus = status->substatuses->data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
128 status->substatuses = g_list_remove(status->substatuses, substatus);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
129 free_saved_status_sub(substatus);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
130 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
131
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
132 GAIM_DBUS_UNREGISTER_POINTER(status);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
133 g_free(status);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
134 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
135
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
136 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
137 * Set the timestamp for when this saved status was created, and
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
138 * make sure it is unique.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
139 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
140 static void
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
141 set_creation_time(GaimSavedStatus *status, time_t creation_time)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
142 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
143 g_return_if_fail(status != NULL);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
144
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
145 /* Avoid using 0 because it's an invalid hash key */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
146 status->creation_time = creation_time != 0 ? creation_time : 1;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
147
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
148 while (g_hash_table_lookup(creation_times, &status->creation_time) != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
149 status->creation_time++;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
150
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
151 g_hash_table_insert(creation_times,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
152 &status->creation_time,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
153 status);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
154 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
155
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
156 /**
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
157 * A magic number is calcuated for each status, and then the
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
158 * statuses are ordered by the magic number. The magic number
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
159 * 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
160 * 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
161 * the most).
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
162 *
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
163 * 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
164 * the list, but to also keep frequently used statuses near
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
165 * the top.
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
166 */
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
167 static gint
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
168 saved_statuses_sort_func(gconstpointer a, gconstpointer b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
169 {
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
170 const GaimSavedStatus *saved_status_a = a;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
171 const GaimSavedStatus *saved_status_b = b;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
172 time_t time_a = saved_status_a->lastused +
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
173 (MIN(saved_status_a->usage_count, 10) * 86400);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
174 time_t time_b = saved_status_b->lastused +
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
175 (MIN(saved_status_b->usage_count, 10) * 86400);
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
176 if (time_a > time_b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
177 return -1;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
178 if (time_a < time_b)
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
179 return 1;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
180 return 0;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
181 }
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 /**
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
184 * Transient statuses are added and removed automatically by
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
185 * 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
186 * they'll expire and be automatically removed. This function
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
187 * does the expiration.
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
188 */
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
189 static void
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
190 remove_old_transient_statuses()
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
191 {
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
192 GList *l, *next;
13198
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
193 GaimSavedStatus *saved_status, *current_status;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
194 int count;
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
195 time_t creation_time;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
196
13198
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
197 current_status = gaim_savedstatus_get_current();
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
198
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
199 /*
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
200 * Iterate through the list of saved statuses. Delete all
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
201 * transient statuses except for the first MAX_TRANSIENTS
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
202 * (remember, the saved statuses are already sorted by popularity).
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
203 */
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
204 count = 0;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
205 for (l = saved_statuses; l != NULL; l = next)
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
206 {
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
207 next = l->next;
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
208 saved_status = l->data;
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
209 if (gaim_savedstatus_is_transient(saved_status))
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
210 {
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
211 if (count == MAX_TRANSIENTS)
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
212 {
13198
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
213 if (saved_status != current_status)
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
214 {
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
215 saved_statuses = g_list_remove(saved_statuses, saved_status);
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
216 creation_time = gaim_savedstatus_get_creation_time(saved_status);
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
217 g_hash_table_remove(creation_times, &creation_time);
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
218 free_saved_status(saved_status);
208f0e50ff0f [gaim-migrate @ 15560]
Mark Doliner <markdoliner@pidgin.im>
parents: 13012
diff changeset
219 }
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
220 }
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
221 else
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
222 count++;
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
223 }
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
224 }
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
225
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
226 if (count == MAX_TRANSIENTS)
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
227 schedule_save();
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
228 }
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
229
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
230 /*********************************************************************
10429
cc2f5ab7ed77 [gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents: 10428
diff changeset
231 * Writing to disk *
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
232 *********************************************************************/
10418
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 static xmlnode *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
235 substatus_to_xmlnode(GaimSavedStatusSub *substatus)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
236 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
237 xmlnode *node, *child;
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 node = xmlnode_new("substatus");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
240
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
241 child = xmlnode_new_child(node, "account");
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
242 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
243 xmlnode_insert_data(child, gaim_account_get_username(substatus->account), -1);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
244
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
245 child = xmlnode_new_child(node, "state");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
246 xmlnode_insert_data(child, gaim_status_type_get_id(substatus->type), -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
247
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
248 if (substatus->message != NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
249 {
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
250 child = xmlnode_new_child(node, "message");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
251 xmlnode_insert_data(child, substatus->message, -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
252 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
253
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
254 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
255 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
256
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
257 static xmlnode *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
258 status_to_xmlnode(GaimSavedStatus *status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
259 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
260 xmlnode *node, *child;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
261 char buf[21];
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
262 GList *cur;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
263
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
264 node = xmlnode_new("status");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
265 if (status->title != NULL)
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
266 {
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
267 xmlnode_set_attrib(node, "name", status->title);
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
268 }
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
269 else
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
270 {
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
271 /*
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
272 * 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
273 * do this little hack to maintain backward compatability
12309
e42cff3223a3 [gaim-migrate @ 14613]
Mark Doliner <markdoliner@pidgin.im>
parents: 12283
diff changeset
274 * in the status.xml file. Eventually this should be removed
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
275 * and we should determine if a status is transient by
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
276 * whether the "name" attribute is set to something or if
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
277 * it does not exist at all.
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
278 */
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
279 xmlnode_set_attrib(node, "name", "Auto-Cached");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
280 xmlnode_set_attrib(node, "transient", "true");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
281 }
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
282
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
283 snprintf(buf, sizeof(buf), "%lu", status->creation_time);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
284 xmlnode_set_attrib(node, "created", buf);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
285
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
286 snprintf(buf, sizeof(buf), "%lu", status->lastused);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
287 xmlnode_set_attrib(node, "lastused", buf);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
288
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
289 snprintf(buf, sizeof(buf), "%u", status->usage_count);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
290 xmlnode_set_attrib(node, "usage_count", buf);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
291
10424
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
292 child = xmlnode_new_child(node, "state");
e607942e309a [gaim-migrate @ 11676]
Mark Doliner <markdoliner@pidgin.im>
parents: 10423
diff changeset
293 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
294
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
295 if (status->message != NULL)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
296 {
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
297 child = xmlnode_new_child(node, "message");
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
298 xmlnode_insert_data(child, status->message, -1);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
299 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301 for (cur = status->substatuses; cur != NULL; cur = cur->next)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
303 child = substatus_to_xmlnode(cur->data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
304 xmlnode_insert_child(node, child);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
305 }
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 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
308 }
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 static xmlnode *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
311 statuses_to_xmlnode(void)
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 xmlnode *node, *child;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
314 GList *cur;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
315
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
316 node = xmlnode_new("statuses");
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
317 xmlnode_set_attrib(node, "version", "1.0");
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
318
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
319 for (cur = saved_statuses; cur != NULL; cur = cur->next)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
320 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
321 child = status_to_xmlnode(cur->data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
322 xmlnode_insert_child(node, child);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
323 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
324
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
325 return node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
326 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
327
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
328 static void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
329 sync_statuses(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
330 {
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
331 xmlnode *node;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
332 char *data;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
333
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
334 if (!statuses_loaded)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
335 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
336 gaim_debug_error("status", "Attempted to save statuses before they "
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
337 "were read!\n");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
338 return;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
339 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
340
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
341 node = statuses_to_xmlnode();
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
342 data = xmlnode_to_formatted_str(node, NULL);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
343 gaim_util_write_data_to_file("status.xml", data, -1);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
344 g_free(data);
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10420
diff changeset
345 xmlnode_free(node);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
346 }
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 static gboolean
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
349 save_cb(gpointer data)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
350 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
351 sync_statuses();
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
352 save_timer = 0;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
353 return FALSE;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
354 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
355
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
356 static void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
357 schedule_save(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
358 {
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
359 if (save_timer == 0)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
360 save_timer = gaim_timeout_add(5000, save_cb, NULL);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
361 }
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
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
364 /*********************************************************************
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
365 * Reading from disk *
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
366 *********************************************************************/
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
367
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
368 static GaimSavedStatusSub *
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
369 parse_substatus(xmlnode *substatus)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
370 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
371 GaimSavedStatusSub *ret;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
372 xmlnode *node;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
373 char *data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
374
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
375 ret = g_new0(GaimSavedStatusSub, 1);
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
376 GAIM_DBUS_REGISTER_POINTER(ret, GaimSavedStatusSub);
10418
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 /* Read the account */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
379 node = xmlnode_get_child(substatus, "account");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
380 if (node != NULL)
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 char *acct_name;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
383 const char *protocol;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
384 acct_name = xmlnode_get_data(node);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
385 protocol = xmlnode_get_attrib(node, "protocol");
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
386 if ((acct_name != NULL) && (protocol != NULL))
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
387 ret->account = gaim_accounts_find(acct_name, protocol);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
388 g_free(acct_name);
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 if (ret->account == NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
392 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
393 g_free(ret);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
394 return NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
395 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
396
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
397 /* Read the state */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
398 node = xmlnode_get_child(substatus, "state");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
399 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
400 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
401 ret->type = gaim_status_type_find_with_id(
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
402 ret->account->status_types, data);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
403 g_free(data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
404 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
405
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
406 /* Read the message */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
407 node = xmlnode_get_child(substatus, "message");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
408 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
409 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
410 ret->message = data;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
411 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
412
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
413 return ret;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
414 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
415
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
416 /**
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
417 * 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
418 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
419 * Here's an example of the XML for a saved status:
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
420 * <status name="Girls">
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
421 * <state>away</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
422 * <message>I like the way that they walk
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
423 * And it's chill to hear them talk
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
424 * And I can always make them smile
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
425 * From White Castle to the Nile</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
426 * <substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
427 * <account protocol='prpl-oscar'>markdoliner</account>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
428 * <state>available</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
429 * <message>The ladies man is here to answer your queries.</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
430 * </substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
431 * <substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
432 * <account protocol='prpl-oscar'>giantgraypanda</account>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
433 * <state>away</state>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
434 * <message>A.C. ain't in charge no more.</message>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
435 * </substatus>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
436 * </status>
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
437 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
438 * I know. Moving, huh?
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
439 */
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
440 static GaimSavedStatus *
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
441 parse_status(xmlnode *status)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
442 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
443 GaimSavedStatus *ret;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
444 xmlnode *node;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
445 const char *attrib;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
446 char *data;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
447 int i;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
448
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
449 ret = g_new0(GaimSavedStatus, 1);
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
450 GAIM_DBUS_REGISTER_POINTER(ret, GaimSavedStatus);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
451
12283
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
452 attrib = xmlnode_get_attrib(status, "transient");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
453 if ((attrib == NULL) || (strcmp(attrib, "true")))
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
454 {
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
455 /* Read the title */
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
456 attrib = xmlnode_get_attrib(status, "name");
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
457 ret->title = g_strdup(attrib);
1882e6c066e9 [gaim-migrate @ 14587]
Mark Doliner <markdoliner@pidgin.im>
parents: 12197
diff changeset
458 }
12125
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 if (ret->title != NULL)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
461 {
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
462 /* Ensure the title is unique */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
463 i = 2;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
464 while (gaim_savedstatus_find(ret->title) != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
465 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
466 g_free(ret->title);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
467 ret->title = g_strdup_printf("%s %d", attrib, i);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
468 i++;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
469 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
470 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
471
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
472 /* Read the creation time */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
473 attrib = xmlnode_get_attrib(status, "created");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
474 set_creation_time(ret, (attrib != NULL ? atol(attrib) : 0));
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
475
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
476 /* Read the last used time */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
477 attrib = xmlnode_get_attrib(status, "lastused");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
478 ret->lastused = (attrib != NULL ? atol(attrib) : 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
479
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
480 /* Read the usage count */
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
481 attrib = xmlnode_get_attrib(status, "usage_count");
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
482 ret->usage_count = (attrib != NULL ? atol(attrib) : 0);
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
483
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
484 /* Read the primitive status type */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
485 node = xmlnode_get_child(status, "state");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
486 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
487 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
488 ret->type = gaim_primitive_get_type_from_id(data);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
489 g_free(data);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
490 }
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 /* Read the message */
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
493 node = xmlnode_get_child(status, "message");
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
494 if ((node != NULL) && ((data = xmlnode_get_data(node)) != NULL))
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
495 {
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
496 ret->message = data;
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
497 }
10418
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 /* Read substatuses */
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
500 for (node = xmlnode_get_child(status, "substatus"); node != NULL;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
501 node = xmlnode_get_next_twin(node))
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
502 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
503 GaimSavedStatusSub *new;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
504 new = parse_substatus(node);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
505 if (new != NULL)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
506 ret->substatuses = g_list_prepend(ret->substatuses, new);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
507 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
508
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
509 return ret;
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
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
512 /**
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
513 * Read the saved statuses from a file in the Gaim user dir.
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
514 *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
515 * @return TRUE on success, FALSE on failure (if the file can not
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
516 * be opened, or if it contains invalid XML).
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
517 */
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
518 static void
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
519 load_statuses(void)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
520 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
521 xmlnode *statuses, *status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
522
10426
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
523 statuses_loaded = TRUE;
f026e2a8f909 [gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
524
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
525 statuses = gaim_util_read_xml_from_file("status.xml", _("saved statuses"));
10418
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 if (statuses == NULL)
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
528 return;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
529
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
530 for (status = xmlnode_get_child(statuses, "status"); status != NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
531 status = xmlnode_get_next_twin(status))
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 *new;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
534 new = parse_status(status);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
535 saved_statuses = g_list_prepend(saved_statuses, new);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
536 }
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
537 saved_statuses = g_list_sort(saved_statuses, saved_statuses_sort_func);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
538
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
539 xmlnode_free(statuses);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
540 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
541
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
542
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
543 /**************************************************************************
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
544 * Saved status API
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
545 **************************************************************************/
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
546 GaimSavedStatus *
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
547 gaim_savedstatus_new(const char *title, GaimStatusPrimitive type)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
548 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
549 GaimSavedStatus *status;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
550
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
551 /* 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
552 if (title != NULL)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
553 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
554
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
555 status = g_new0(GaimSavedStatus, 1);
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
556 GAIM_DBUS_REGISTER_POINTER(status, GaimSavedStatus);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
557 status->title = g_strdup(title);
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
558 status->type = type;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
559 set_creation_time(status, time(NULL));
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
560
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
561 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
562
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
563 schedule_save();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
564
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
565 return status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
566 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
567
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
568 void
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
569 gaim_savedstatus_set_title(GaimSavedStatus *status, const char *title)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
570 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
571 g_return_if_fail(status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
572
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
573 /* 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
574 g_return_if_fail(gaim_savedstatus_find(title) == NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
575
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
576 g_free(status->title);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
577 status->title = g_strdup(title);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
578
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
579 schedule_save();
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
580 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
581
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
582 void
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
583 gaim_savedstatus_set_type(GaimSavedStatus *status, GaimStatusPrimitive type)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
584 {
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
585 g_return_if_fail(status != NULL);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
586
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
587 status->type = type;
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
588
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
589 schedule_save();
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
590 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
591
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
592 void
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
593 gaim_savedstatus_set_message(GaimSavedStatus *status, const char *message)
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
594 {
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
595 g_return_if_fail(status != NULL);
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
596
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
597 g_free(status->message);
13247
2162ed1a6f41 [gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents: 13245
diff changeset
598 if ((message != NULL) && (*message == '\0'))
2162ed1a6f41 [gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents: 13245
diff changeset
599 status->message = NULL;
2162ed1a6f41 [gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents: 13245
diff changeset
600 else
2162ed1a6f41 [gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents: 13245
diff changeset
601 status->message = g_strdup(message);
10420
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
602
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
603 schedule_save();
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
604 }
7277ae4229e9 [gaim-migrate @ 11671]
Mark Doliner <markdoliner@pidgin.im>
parents: 10419
diff changeset
605
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
606 void
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
607 gaim_savedstatus_set_substatus(GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
608 const GaimAccount *account,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
609 const GaimStatusType *type,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
610 const char *message)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
611 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
612 GaimSavedStatusSub *substatus;
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 g_return_if_fail(saved_status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
615 g_return_if_fail(account != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
616 g_return_if_fail(type != NULL);
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 /* Find an existing substatus or create a new one */
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
619 substatus = gaim_savedstatus_get_substatus(saved_status, account);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
620 if (substatus == NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
621 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
622 substatus = g_new0(GaimSavedStatusSub, 1);
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13683
diff changeset
623 GAIM_DBUS_REGISTER_POINTER(substatus, GaimSavedStatusSub);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
624 substatus->account = (GaimAccount *)account;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
625 saved_status->substatuses = g_list_prepend(saved_status->substatuses, substatus);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
626 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
627
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
628 substatus->type = type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
629 g_free(substatus->message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
630 substatus->message = g_strdup(message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
631
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
632 schedule_save();
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 void
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
636 gaim_savedstatus_unset_substatus(GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
637 const GaimAccount *account)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
638 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
639 GList *iter;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
640 GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
641
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
642 g_return_if_fail(saved_status != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
643 g_return_if_fail(account != NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
644
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
645 for (iter = saved_status->substatuses; iter != NULL; iter = iter->next)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
646 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
647 substatus = iter->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
648 if (substatus->account == account)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
649 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
650 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
651 g_free(substatus->message);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
652 g_free(substatus);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
653 return;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
654 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
655 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
656 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
657
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
658 gboolean
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
659 gaim_savedstatus_delete(const char *title)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
660 {
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
661 GaimSavedStatus *status;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
662 time_t creation_time, current, idleaway;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
663
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
664 status = gaim_savedstatus_find(title);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
665
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
666 if (status == NULL)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
667 return FALSE;
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 saved_statuses = g_list_remove(saved_statuses, status);
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
670 creation_time = gaim_savedstatus_get_creation_time(status);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
671 g_hash_table_remove(creation_times, &creation_time);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
672 free_saved_status(status);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
673
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
674 schedule_save();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
675
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
676 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
677 * If we just deleted our current status or our idleaway status,
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
678 * then set the appropriate pref back to 0.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
679 */
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
680 current = gaim_prefs_get_int("/core/savedstatus/default");
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
681 if (current == creation_time)
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
682 gaim_prefs_set_int("/core/savedstatus/default", 0);
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
683
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
684 idleaway = gaim_prefs_get_int("/core/savedstatus/idleaway");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
685 if (idleaway == creation_time)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
686 gaim_prefs_set_int("/core/savedstatus/idleaway", 0);
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
687
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
688 return TRUE;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
689 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
690
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
691 const GList *
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
692 gaim_savedstatuses_get_all(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
693 {
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
694 return saved_statuses;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
695 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
696
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
697 GList *
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
698 gaim_savedstatuses_get_popular(unsigned int how_many)
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
699 {
13675
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
700 GList *popular = NULL;
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
701 GList *cur;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
702 int i;
13677
cf8c46ba7b91 [gaim-migrate @ 16077]
Mark Doliner <markdoliner@pidgin.im>
parents: 13675
diff changeset
703 GaimSavedStatus *current, *next;
13675
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
704
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
705 /* We don't want the current status to be in the GList */
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
706 current = gaim_savedstatus_get_current();
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
707
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
708 /* Copy 'how_many' elements to a new list */
13675
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
709 i = 0;
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
710 cur = saved_statuses;
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
711 while ((i < how_many) && (cur != NULL))
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
712 {
13677
cf8c46ba7b91 [gaim-migrate @ 16077]
Mark Doliner <markdoliner@pidgin.im>
parents: 13675
diff changeset
713 next = cur->data;
cf8c46ba7b91 [gaim-migrate @ 16077]
Mark Doliner <markdoliner@pidgin.im>
parents: 13675
diff changeset
714 if ((next != current) && (!gaim_savedstatus_is_transient(next)
cf8c46ba7b91 [gaim-migrate @ 16077]
Mark Doliner <markdoliner@pidgin.im>
parents: 13675
diff changeset
715 || gaim_savedstatus_get_message(next) != NULL))
13675
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
716 {
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
717 popular = g_list_prepend(popular, cur->data);
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
718 i++;
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
719 }
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
720 cur = cur->next;
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
721 }
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
722
13675
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
723 popular = g_list_reverse(popular);
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
724
edc4a39fd463 [gaim-migrate @ 16075]
Mark Doliner <markdoliner@pidgin.im>
parents: 13388
diff changeset
725 return popular;
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
726 }
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
727
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
728 GaimSavedStatus *
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
729 gaim_savedstatus_get_current(void)
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
730 {
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
731 if (gaim_savedstatus_is_idleaway())
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
732 return gaim_savedstatus_get_idleaway();
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
733 else
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
734 return gaim_savedstatus_get_default();
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
735 }
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
736
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
737 GaimSavedStatus *
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
738 gaim_savedstatus_get_default()
12125
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 int creation_time;
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
741 GaimSavedStatus *saved_status = NULL;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
742
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
743 creation_time = gaim_prefs_get_int("/core/savedstatus/default");
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
744
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
745 if (creation_time != 0)
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
746 saved_status = g_hash_table_lookup(creation_times, &creation_time);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
747
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
748 if (saved_status == NULL)
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
749 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
750 /*
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
751 * We don't have a current saved status! This is either a new
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
752 * 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
753 * possibly someone who deleted the status they were currently
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
754 * using? In any case, add a default status.
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
755 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
756 saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_AVAILABLE);
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
757 gaim_prefs_set_int("/core/savedstatus/default",
13247
2162ed1a6f41 [gaim-migrate @ 15612]
Mark Doliner <markdoliner@pidgin.im>
parents: 13245
diff changeset
758 gaim_savedstatus_get_creation_time(saved_status));
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
759 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
760
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
761 return saved_status;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
762 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
763
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
764 GaimSavedStatus *
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
765 gaim_savedstatus_get_idleaway()
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
766 {
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
767 int creation_time;
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
768 GaimSavedStatus *saved_status = NULL;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
769
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
770 creation_time = gaim_prefs_get_int("/core/savedstatus/idleaway");
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
771
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
772 if (creation_time != 0)
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
773 saved_status = g_hash_table_lookup(creation_times, &creation_time);
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
774
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
775 if (saved_status == NULL)
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
776 {
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
777 /* We don't have a specified "idle" status! Weird. */
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
778 saved_status = gaim_savedstatus_find_transient_by_type_and_message(
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
779 GAIM_STATUS_AWAY, DEFAULT_AUTOAWAY_MESSAGE);
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
780
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
781 if (saved_status == NULL)
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
782 {
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
783 saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_AWAY);
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
784 gaim_savedstatus_set_message(saved_status, DEFAULT_AUTOAWAY_MESSAGE);
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
785 gaim_prefs_set_int("/core/savedstatus/idleaway",
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
786 gaim_savedstatus_get_creation_time(saved_status));
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
787 }
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
788 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
789
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
790 return saved_status;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
791 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
792
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
793 gboolean
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
794 gaim_savedstatus_is_idleaway()
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
795 {
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
796 return gaim_prefs_get_bool("/core/savedstatus/isidleaway");
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
797 }
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
798
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
799 void
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
800 gaim_savedstatus_set_idleaway(gboolean idleaway)
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
801 {
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
802 GList *accounts, *node;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
803 GaimSavedStatus *old, *saved_status;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
804
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
805 if (gaim_savedstatus_is_idleaway() == idleaway)
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
806 /* Don't need to do anything */
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
807 return;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
808
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
809 /* Changing our status makes us un-idle */
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
810 if (!idleaway)
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
811 gaim_idle_touch();
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
812
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
813 old = gaim_savedstatus_get_current();
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
814 gaim_prefs_set_bool("/core/savedstatus/isidleaway", idleaway);
14423
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
815 saved_status = idleaway ? gaim_savedstatus_get_idleaway()
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
816 : gaim_savedstatus_get_default();
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
817
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
818 if (idleaway && (gaim_savedstatus_get_type(old) != GAIM_STATUS_AVAILABLE))
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
819 /* Our global status is already "away," so don't change anything */
bf504ef2e5e2 [gaim-migrate @ 17067]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
820 return;
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
821
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
822 accounts = gaim_accounts_get_all_active();
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
823 for (node = accounts; node != NULL; node = node->next)
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
824 {
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
825 GaimAccount *account;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
826 GaimPresence *presence;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
827 GaimStatus *status;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
828
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
829 account = node->data;
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
830 presence = gaim_account_get_presence(account);
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
831 status = gaim_presence_get_active_status(presence);
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
832
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
833 if (!idleaway || gaim_status_is_available(status))
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
834 gaim_savedstatus_activate_for_account(saved_status, account);
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
835 }
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
836
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
837 g_list_free(accounts);
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
838
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
839 gaim_signal_emit(gaim_savedstatuses_get_handle(), "savedstatus-changed",
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
840 saved_status, old);
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
841 }
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
842
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
843 GaimSavedStatus *
13683
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
844 gaim_savedstatus_get_startup()
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
845 {
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
846 int creation_time;
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
847 GaimSavedStatus *saved_status = NULL;
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
848
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
849 creation_time = gaim_prefs_get_int("/core/savedstatus/startup");
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
850
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
851 if (creation_time != 0)
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
852 saved_status = g_hash_table_lookup(creation_times, &creation_time);
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
853
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
854 if (saved_status == NULL)
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
855 {
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
856 /*
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
857 * We don't have a status to apply.
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
858 * This may be the first login, or the user wants to
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
859 * restore the "current" status.
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
860 */
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
861 saved_status = gaim_savedstatus_get_current();
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
862 }
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
863
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
864 return saved_status;
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
865 }
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
866
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
867
d523c24ed269 [gaim-migrate @ 16084]
Mark Doliner <markdoliner@pidgin.im>
parents: 13677
diff changeset
868 GaimSavedStatus *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
869 gaim_savedstatus_find(const char *title)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
870 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
871 GList *iter;
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
872 GaimSavedStatus *status;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
873
11977
51548c459a94 [gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents: 11975
diff changeset
874 g_return_val_if_fail(title != NULL, NULL);
51548c459a94 [gaim-migrate @ 14270]
Mark Doliner <markdoliner@pidgin.im>
parents: 11975
diff changeset
875
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
876 for (iter = saved_statuses; iter != NULL; iter = iter->next)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
877 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
878 status = (GaimSavedStatus *)iter->data;
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
879 if ((status->title != NULL) && !strcmp(status->title, title))
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
880 return status;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
881 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
882
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
883 return NULL;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
884 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
885
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
886 GaimSavedStatus *
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
887 gaim_savedstatus_find_by_creation_time(time_t creation_time)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
888 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
889 GList *iter;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
890 GaimSavedStatus *status;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
891
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
892 for (iter = saved_statuses; iter != NULL; iter = iter->next)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
893 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
894 status = (GaimSavedStatus *)iter->data;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
895 if (status->creation_time == creation_time)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
896 return status;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
897 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
898
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
899 return NULL;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
900 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
901
13012
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
902 GaimSavedStatus *
13245
3c026039efc5 [gaim-migrate @ 15610]
Mark Doliner <markdoliner@pidgin.im>
parents: 13198
diff changeset
903 gaim_savedstatus_find_transient_by_type_and_message(GaimStatusPrimitive type,
3c026039efc5 [gaim-migrate @ 15610]
Mark Doliner <markdoliner@pidgin.im>
parents: 13198
diff changeset
904 const char *message)
13012
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
905 {
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
906 GList *iter;
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
907 GaimSavedStatus *status;
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
908
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
909 for (iter = saved_statuses; iter != NULL; iter = iter->next)
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
910 {
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
911 status = (GaimSavedStatus *)iter->data;
13245
3c026039efc5 [gaim-migrate @ 15610]
Mark Doliner <markdoliner@pidgin.im>
parents: 13198
diff changeset
912 if ((status->type == type) && gaim_savedstatus_is_transient(status) &&
13012
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
913 (((status->message == NULL) && (message == NULL)) ||
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
914 ((status->message != NULL) && (message != NULL) && !strcmp(status->message, message))))
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
915 {
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
916 return status;
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
917 }
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
918 }
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
919
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
920 return NULL;
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
921 }
402bd07464a7 [gaim-migrate @ 15365]
Mark Doliner <markdoliner@pidgin.im>
parents: 12857
diff changeset
922
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
923 gboolean
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
924 gaim_savedstatus_is_transient(const GaimSavedStatus *saved_status)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
925 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
926 g_return_val_if_fail(saved_status != NULL, TRUE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
927
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
928 return (saved_status->title == NULL);
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
929 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
930
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
931 const char *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
932 gaim_savedstatus_get_title(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
933 {
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
934 const char *message;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
935
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
936 g_return_val_if_fail(saved_status != NULL, NULL);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
937
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
938 /* If we have a title then return it */
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
939 if (saved_status->title != NULL)
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
940 return saved_status->title;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
941
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
942 /* 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
943 message = gaim_savedstatus_get_message(saved_status);
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
944
12781
2fda73c527c8 [gaim-migrate @ 15128]
Mark Doliner <markdoliner@pidgin.im>
parents: 12729
diff changeset
945 if ((message == NULL) || (*message == '\0'))
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
946 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
947 GaimStatusPrimitive primitive;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
948 primitive = gaim_savedstatus_get_type(saved_status);
12814
4de603810669 [gaim-migrate @ 15162]
Richard Laager <rlaager@pidgin.im>
parents: 12781
diff changeset
949 return gaim_primitive_get_name_from_type(primitive);
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
950 }
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
951 else
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
952 {
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
953 char *stripped;
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
954 static char buf[64];
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
955 stripped = gaim_markup_strip_html(message);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
956 gaim_util_chrreplace(stripped, '\n', ' ');
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
957 strncpy(buf, stripped, sizeof(buf));
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
958 buf[sizeof(buf) - 1] = '\0';
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
959 if ((strlen(stripped) + 1) > sizeof(buf))
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
960 {
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
961 /* Truncate and ellipsize */
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
962 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
963 strcpy(tmp, "...");
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
964 }
12690
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
965 g_free(stripped);
4a93889c7593 [gaim-migrate @ 15033]
Mark Doliner <markdoliner@pidgin.im>
parents: 12688
diff changeset
966 return buf;
12688
d2beaf15f294 [gaim-migrate @ 15031]
Mark Doliner <markdoliner@pidgin.im>
parents: 12552
diff changeset
967 }
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
968 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
969
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
970 GaimStatusPrimitive
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
971 gaim_savedstatus_get_type(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
972 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
973 g_return_val_if_fail(saved_status != NULL, GAIM_STATUS_OFFLINE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
974
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
975 return saved_status->type;
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
976 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
977
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
978 const char *
10419
cb6b7316fdba [gaim-migrate @ 11670]
Mark Doliner <markdoliner@pidgin.im>
parents: 10418
diff changeset
979 gaim_savedstatus_get_message(const GaimSavedStatus *saved_status)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
980 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
981 g_return_val_if_fail(saved_status != NULL, NULL);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
982
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
983 return saved_status->message;
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
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
986 time_t
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
987 gaim_savedstatus_get_creation_time(const GaimSavedStatus *saved_status)
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
988 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
989 g_return_val_if_fail(saved_status != NULL, 0);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
990
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
991 return saved_status->creation_time;
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
992 }
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
993
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
994 gboolean
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
995 gaim_savedstatus_has_substatuses(const GaimSavedStatus *saved_status)
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
996 {
12197
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
997 g_return_val_if_fail(saved_status != NULL, FALSE);
706655f09bbc [gaim-migrate @ 14499]
Mark Doliner <markdoliner@pidgin.im>
parents: 12125
diff changeset
998
11651
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
999 return (saved_status->substatuses != NULL);
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
1000 }
02f366130354 [gaim-migrate @ 13935]
Mark Doliner <markdoliner@pidgin.im>
parents: 11318
diff changeset
1001
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1002 GaimSavedStatusSub *
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
1003 gaim_savedstatus_get_substatus(const GaimSavedStatus *saved_status,
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
1004 const GaimAccount *account)
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1005 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1006 GList *iter;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1007 GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1008
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1009 g_return_val_if_fail(saved_status != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1010 g_return_val_if_fail(account != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1011
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1012 for (iter = saved_status->substatuses; iter != NULL; iter = iter->next)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1013 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1014 substatus = iter->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1015 if (substatus->account == account)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1016 return substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1017 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1018
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1019 return NULL;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1020 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1021
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1022 const GaimStatusType *
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1023 gaim_savedstatus_substatus_get_type(const GaimSavedStatusSub *substatus)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1024 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1025 g_return_val_if_fail(substatus != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1026
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1027 return substatus->type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1028 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1029
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1030 const char *
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1031 gaim_savedstatus_substatus_get_message(const GaimSavedStatusSub *substatus)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1032 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1033 g_return_val_if_fail(substatus != NULL, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1034
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1035 return substatus->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1036 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1037
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1038 void
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1039 gaim_savedstatus_activate(GaimSavedStatus *saved_status)
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1040 {
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
1041 GList *accounts, *node;
13388
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1042 GaimSavedStatus *old = gaim_savedstatus_get_current();
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1043
11727
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
1044 g_return_if_fail(saved_status != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
1045
12729
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
1046 /* Make sure our list of saved statuses remains sorted */
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
1047 saved_status->lastused = time(NULL);
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
1048 saved_status->usage_count++;
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
1049 saved_statuses = g_list_remove(saved_statuses, saved_status);
1dbd1ec5c8b2 [gaim-migrate @ 15073]
Mark Doliner <markdoliner@pidgin.im>
parents: 12724
diff changeset
1050 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
1051
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1052 accounts = gaim_accounts_get_all_active();
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
1053 for (node = accounts; node != NULL; node = node->next)
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1054 {
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1055 GaimAccount *account;
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1056
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
1057 account = node->data;
12857
2e99b4a360fc [gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents: 12814
diff changeset
1058
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1059 gaim_savedstatus_activate_for_account(saved_status, account);
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1060 }
11733
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
1061
61f0e3ce2b9b [gaim-migrate @ 14024]
Mark Doliner <markdoliner@pidgin.im>
parents: 11727
diff changeset
1062 g_list_free(accounts);
11954
7da15f32e1ca [gaim-migrate @ 14245]
Mark Doliner <markdoliner@pidgin.im>
parents: 11806
diff changeset
1063
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
1064 gaim_prefs_set_int("/core/savedstatus/default",
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1065 gaim_savedstatus_get_creation_time(saved_status));
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
1066 gaim_savedstatus_set_idleaway(FALSE);
13388
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1067
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1068 gaim_signal_emit(gaim_savedstatuses_get_handle(), "savedstatus-changed",
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1069 saved_status, old);
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1070 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1071
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1072 void
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1073 gaim_savedstatus_activate_for_account(const GaimSavedStatus *saved_status,
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1074 GaimAccount *account)
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1075 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1076 const GaimStatusType *status_type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1077 const GaimSavedStatusSub *substatus;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1078 const char *message = NULL;
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1079
11727
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
1080 g_return_if_fail(saved_status != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
1081 g_return_if_fail(account != NULL);
ef78f9d0efec [gaim-migrate @ 14018]
Mark Doliner <markdoliner@pidgin.im>
parents: 11724
diff changeset
1082
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12056
diff changeset
1083 substatus = gaim_savedstatus_get_substatus(saved_status, account);
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1084 if (substatus != NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1085 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1086 status_type = substatus->type;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1087 message = substatus->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1088 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1089 else
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1090 {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1091 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
1092 if (status_type == NULL)
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1093 return;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1094 message = saved_status->message;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1095 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1096
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1097 if ((message != NULL) &&
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1098 (gaim_status_type_get_attr(status_type, "message")))
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1099 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1100 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
1101 TRUE, "message", message, NULL);
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1102 }
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1103 else
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1104 {
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1105 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
1106 TRUE, NULL);
11724
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1107 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1108 }
d3f71bc34b4f [gaim-migrate @ 14015]
Mark Doliner <markdoliner@pidgin.im>
parents: 11651
diff changeset
1109
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1110 void *
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1111 gaim_savedstatuses_get_handle(void)
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1112 {
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1113 static int handle;
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1114
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1115 return &handle;
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1116 }
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10738
diff changeset
1117
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1118 void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1119 gaim_savedstatuses_init(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1120 {
13388
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1121 void *handle = gaim_savedstatuses_get_handle();
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1122
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1123 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
1124
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1125 /*
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1126 * Using 0 as the creation_time is a special case.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1127 * If someone calls gaim_savedstatus_get_current() or
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1128 * gaim_savedstatus_get_idleaway() and either of those functions
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1129 * 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
1130 * saved status and return that to the user.
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1131 */
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1132 gaim_prefs_add_none("/core/savedstatus");
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
1133 gaim_prefs_add_int("/core/savedstatus/default", 0);
12857
2e99b4a360fc [gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents: 12814
diff changeset
1134 gaim_prefs_add_int("/core/savedstatus/startup", 0);
2e99b4a360fc [gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents: 12814
diff changeset
1135 gaim_prefs_add_bool("/core/savedstatus/startup_current_status", TRUE);
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1136 gaim_prefs_add_int("/core/savedstatus/idleaway", 0);
14190
4d3fc3f58cc6 [gaim-migrate @ 16766]
Mark Doliner <markdoliner@pidgin.im>
parents: 13763
diff changeset
1137 gaim_prefs_add_bool("/core/savedstatus/isidleaway", FALSE);
11975
0abdd0c63f0f [gaim-migrate @ 14268]
Mark Doliner <markdoliner@pidgin.im>
parents: 11954
diff changeset
1138
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1139 load_statuses();
13388
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1140
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1141 gaim_signal_register(handle, "savedstatus-changed",
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1142 gaim_marshal_VOID__POINTER_POINTER, NULL, 2,
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1143 gaim_value_new(GAIM_TYPE_SUBTYPE,
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1144 GAIM_SUBTYPE_SAVEDSTATUS),
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1145 gaim_value_new(GAIM_TYPE_SUBTYPE,
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1146 GAIM_SUBTYPE_SAVEDSTATUS));
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1147 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1148
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1149 void
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1150 gaim_savedstatuses_uninit(void)
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1151 {
12327
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
1152 remove_old_transient_statuses();
95f220804a31 [gaim-migrate @ 14631]
Mark Doliner <markdoliner@pidgin.im>
parents: 12309
diff changeset
1153
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1154 if (save_timer != 0)
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1155 {
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1156 gaim_timeout_remove(save_timer);
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1157 save_timer = 0;
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1158 sync_statuses();
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1159 }
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1160
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1161 while (saved_statuses != NULL) {
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1162 GaimSavedStatus *saved_status = saved_statuses->data;
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1163 saved_statuses = g_list_remove(saved_statuses, saved_status);
12724
58ed377f17db [gaim-migrate @ 15068]
Mark Doliner <markdoliner@pidgin.im>
parents: 12690
diff changeset
1164 free_saved_status(saved_status);
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1165 }
12125
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1166
c1e55f812ded [gaim-migrate @ 14425]
Mark Doliner <markdoliner@pidgin.im>
parents: 12123
diff changeset
1167 g_hash_table_destroy(creation_times);
13388
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1168
56132ad4179e [gaim-migrate @ 15760]
Kevin Stange <kstange@pidgin.im>
parents: 13247
diff changeset
1169 gaim_signals_unregister_by_instance(gaim_savedstatuses_get_handle());
10418
7b632343a29c [gaim-migrate @ 11669]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1170 }
12056
ddfcb4df0965 [gaim-migrate @ 14351]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11977
diff changeset
1171

mercurial