annotate gtk/plugins/cap/cap.c @ 15136:31603a03cc02

[gaim-migrate @ 17921] Etan had changed the account notify stuff so that the prpl decides if the person is a buddy or not; I totally wiped that out with my authorization stuff. This brings it back. Additionally, I added a googletalk flag to JabberStream which can determine at runtime if you're connected to Google Talk. All of the Google Talk extensions can be detected individually with disco, but this might be used for working with perfectly standard XMPP that's implemented in what might be considered a quirky way in Google Talk. For instance, Google Talk automatically adds buddies to your roster when you authorize them to add you. I was going to use this flag so that the Jabber prpl would never ask me to add a Google Talk buddy who's just been automatically added anyway. I decided to keep it, though, since I may still want to specify what group he's in. This opens the door for more Google Talk customization though >:) committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Fri, 08 Dec 2006 02:51:47 +0000
parents 5e5b34ac509a
children 2db21e0292b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
1 /*
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
2 * Contact Availability Prediction plugin for Gaim
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
3 *
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
4 * Copyright (C) 2006 Geoffrey Foster.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
5 *
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
7 * modify it under the terms of the GNU General Public License as
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
8 * published by the Free Software Foundation; either version 2 of the
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
9 * License, or (at your option) any later version.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
10 *
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
14 * General Public License for more details.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
15 *
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
19 * 02111-1307, USA.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
20 */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
21
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
22 #include "cap.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
23
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
24 static void generate_prediction(CapStatistics *statistics) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
25 if(statistics->buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
26 if(statistics->prediction == NULL)
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
27 statistics->prediction = g_malloc(sizeof(CapPrediction));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
28 statistics->prediction->probability = generate_prediction_for(statistics->buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
29 statistics->prediction->generated_at = time(NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
30 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
31 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
32
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
33 static double generate_prediction_for(GaimBuddy *buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
34 double prediction = 1.0f;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
35 gboolean generated = FALSE;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
36 gchar *buddy_name = buddy->name;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
37 const gchar *protocol_id = gaim_account_get_protocol_id(buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
38 const gchar *account_id = gaim_account_get_username(buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
39 const gchar *status_id = gaim_status_get_id(get_status_for(buddy));
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
40 time_t t = time(NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
41 struct tm *current_time = localtime(&t);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
42 int current_minute = current_time->tm_min + current_time->tm_hour * 60;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
43 int threshold = gaim_prefs_get_int("/plugins/gtk/cap/threshold");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
44 int min_minute = (current_minute - threshold) % 1440;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
45 int max_minute = (current_minute + threshold) % 1440;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
46 char *sql;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
47 sqlite3_stmt *stmt = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
48 const char *tail = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
49 int rc;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
50
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
51
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
52 sql = sqlite3_mprintf("select sum(success_count) as successes, sum(failed_count) as failures "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
53 "from cap_msg_count where "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
54 "buddy=%Q and account=%Q and protocol=%Q and minute_val>=%d and minute_val<=%d;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
55 buddy_name, account_id, protocol_id, min_minute, max_minute);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
56 rc = sqlite3_prepare(_db, sql, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
57 if(rc == SQLITE_OK) {
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
58 int successes = 0;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
59 int failures = 0;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
60 if(stmt != NULL) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
61 if(sqlite3_step(stmt) == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
62 successes = sqlite3_column_int(stmt, 0);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
63 failures = sqlite3_column_int(stmt, 1);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
64 if(failures + successes > 0) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
65 prediction *= ((double)successes/((double)(successes+failures)));
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
66 generated = TRUE;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
67 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
68 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
69 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
70 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
71 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
72 sqlite3_free(sql);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
73
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
74 sql = sqlite3_mprintf("select sum(success_count) as successes, sum(failed_count) as failures "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
75 "from cap_status_count where "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
76 "buddy=%Q and account=%Q and protocol=%Q and status=%Q;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
77 buddy_name, account_id, protocol_id, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
78 rc = sqlite3_prepare(_db, sql, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
79 if(rc == SQLITE_OK) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
80 int successes = 0;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
81 int failures = 0;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
82 if(stmt != NULL) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
83 if(sqlite3_step(stmt) == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
84 successes = sqlite3_column_int(stmt, 0);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
85 failures = sqlite3_column_int(stmt, 1);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
86 if(failures + successes > 0) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
87 prediction *= ((double)successes/((double)(successes+failures)));
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
88 generated = TRUE;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
89 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
90 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
91 sqlite3_finalize(stmt);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
92 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
93 }
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
94 sqlite3_free(sql);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
95
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
96
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
97 if(strcmp(gaim_status_get_id(get_status_for(buddy)), "offline") == 0) {
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
98 /* This is kind of stupid, change it. */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
99 if(prediction == 1.0f)
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
100 prediction = 0.0f;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
101 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
102
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
103 if(generated)
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
104 return prediction;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
105 else
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
106 return -1;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
107 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
108
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
109 static CapStatistics * get_stats_for(GaimBuddy *buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
110 gchar *buddy_name;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
111 CapStatistics *stats;
14821
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
112
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
113 g_return_val_if_fail(buddy != NULL, NULL);
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
114
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
115 buddy_name = g_strdup(buddy->name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
116 stats = g_hash_table_lookup(_buddy_stats, buddy_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
117 if(!stats) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
118 stats = g_malloc(sizeof(CapStatistics));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
119 stats->last_message = -1;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
120 stats->last_message_status_id = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
121 stats->last_status_id = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
122 stats->prediction = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
123 g_hash_table_insert(_buddy_stats, buddy_name, stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
124 stats->buddy = buddy;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
125 stats->last_seen = -1;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
126 stats->last_status_id = "";
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
127 } else {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
128 g_free(buddy_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
129 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
130 generate_prediction(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
131 return stats;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
132 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
133
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
134 static void destroy_stats(gpointer data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
135 CapStatistics *stats = data;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
136 g_free(stats->prediction);
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
137 /* g_free(stats->hourly_usage); */
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
138 /* g_free(stats->daily_usage); */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
139 g_free(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
140 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
141
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
142 static void
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
143 insert_cap_msg_count_success(const char *buddy_name, const char *account, const char *protocol, int minute) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
144 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
145 sqlite3_stmt *stmt;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
146 const char *tail;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
147 char *sql_select = sqlite3_mprintf("SELECT * FROM cap_msg_count WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
148 "buddy=%Q AND account=%Q AND protocol=%Q AND minute_val=%d;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
149 buddy_name, account, protocol, minute);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
150 char *sql_ins_up = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
151
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
152 gaim_debug_info("cap", "%s\n", sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
153
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
154 sqlite3_prepare(_db, sql_select, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
155
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
156 rc = sqlite3_step(stmt);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
157
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
158 if(rc == SQLITE_DONE) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
159 sql_ins_up = sqlite3_mprintf("INSERT INTO cap_msg_count VALUES (%Q, %Q, %Q, %d, %d, %d);",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
160 buddy_name, account, protocol, minute, 1, 0);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
161 } else if(rc == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
162 sql_ins_up = sqlite3_mprintf("UPDATE cap_msg_count SET success_count=success_count+1 WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
163 "buddy=%Q AND account=%Q AND protocol=%Q AND minute_val=%d;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
164 buddy_name, account, protocol, minute);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
165 } else {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
166 gaim_debug_info("cap", "%d\n", rc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
167 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
168 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
169 return;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
170 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
171
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
172 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
173 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
174
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
175 sqlite3_exec(_db, sql_ins_up, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
176 sqlite3_free(sql_ins_up);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
177 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
178
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
179 static void
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
180 insert_cap_status_count_success(const char *buddy_name, const char *account, const char *protocol, const char *status_id) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
181 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
182 sqlite3_stmt *stmt;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
183 const char *tail;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
184 char *sql_select = sqlite3_mprintf("SELECT * FROM cap_status_count WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
185 "buddy=%Q AND account=%Q AND protocol=%Q AND status=%Q;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
186 buddy_name, account, protocol, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
187 char *sql_ins_up = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
188
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
189 gaim_debug_info("cap", "%s\n", sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
190
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
191 sqlite3_prepare(_db, sql_select, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
192
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
193 rc = sqlite3_step(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
194
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
195 if(rc == SQLITE_DONE) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
196 sql_ins_up = sqlite3_mprintf("INSERT INTO cap_status_count VALUES (%Q, %Q, %Q, %Q, %d, %d);",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
197 buddy_name, account, protocol, status_id, 1, 0);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
198 } else if(rc == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
199 sql_ins_up = sqlite3_mprintf("UPDATE cap_status_count SET success_count=success_count+1 WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
200 "buddy=%Q AND account=%Q AND protocol=%Q AND status=%Q;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
201 buddy_name, account, protocol, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
202 } else {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
203 gaim_debug_info("cap", "%d\n", rc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
204 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
205 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
206 return;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
207 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
208
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
209 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
210 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
211
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
212 sqlite3_exec(_db, sql_ins_up, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
213 sqlite3_free(sql_ins_up);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
214 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
215
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
216 static void
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
217 insert_cap_msg_count_failed(const char *buddy_name, const char *account, const char *protocol, int minute) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
218 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
219 sqlite3_stmt *stmt;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
220 const char *tail;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
221 char *sql_select = sqlite3_mprintf("SELECT * FROM cap_msg_count WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
222 "buddy=%Q AND account=%Q AND protocol=%Q AND minute_val=%d;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
223 buddy_name, account, protocol, minute);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
224 char *sql_ins_up = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
225
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
226 gaim_debug_info("cap", "%s\n", sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
227
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
228 sqlite3_prepare(_db, sql_select, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
229
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
230 rc = sqlite3_step(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
231
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
232 if(rc == SQLITE_DONE) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
233 sql_ins_up = sqlite3_mprintf("INSERT INTO cap_msg_count VALUES (%Q, %Q, %Q, %d, %d, %d);",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
234 buddy_name, account, protocol, minute, 0, 1);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
235 } else if(rc == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
236 sql_ins_up = sqlite3_mprintf("UPDATE cap_msg_count SET failed_count=failed_count+1 WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
237 "buddy=%Q AND account=%Q AND protocol=%Q AND minute_val=%d;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
238 buddy_name, account, protocol, minute);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
239 } else {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
240 gaim_debug_info("cap", "%d\n", rc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
241 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
242 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
243 return;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
244 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
245
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
246 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
247 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
248
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
249 sqlite3_exec(_db, sql_ins_up, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
250 sqlite3_free(sql_ins_up);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
251 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
252
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
253 static void
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
254 insert_cap_status_count_failed(const char *buddy_name, const char *account, const char *protocol, const char *status_id) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
255 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
256 sqlite3_stmt *stmt;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
257 const char *tail;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
258 char *sql_select = sqlite3_mprintf("SELECT * FROM cap_status_count WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
259 "buddy=%Q AND account=%Q AND protocol=%Q AND status=%Q;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
260 buddy_name, account, protocol, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
261 char *sql_ins_up = NULL;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
262
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
263 gaim_debug_info("cap", "%s\n", sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
264
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
265 sqlite3_prepare(_db, sql_select, -1, &stmt, &tail);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
266
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
267 rc = sqlite3_step(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
268
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
269 if(rc == SQLITE_DONE) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
270 sql_ins_up = sqlite3_mprintf("INSERT INTO cap_status_count VALUES (%Q, %Q, %Q, %Q, %d, %d);",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
271 buddy_name, account, protocol, status_id, 0, 1);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
272 } else if(rc == SQLITE_ROW) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
273 sql_ins_up = sqlite3_mprintf("UPDATE cap_status_count SET failed_count=failed_count+1 WHERE "
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
274 "buddy=%Q AND account=%Q AND protocol=%Q AND status=%Q;",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
275 buddy_name, account, protocol, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
276 } else {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
277 gaim_debug_info("cap", "%d\n", rc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
278 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
279 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
280 return;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
281 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
282
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
283 sqlite3_finalize(stmt);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
284 sqlite3_free(sql_select);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
285
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
286 sqlite3_exec(_db, sql_ins_up, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
287 sqlite3_free(sql_ins_up);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
288 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
289
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
290 static void insert_cap_success(CapStatistics *stats) {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
291 gchar *buddy_name = stats->buddy->name;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
292 const gchar *protocol_id = gaim_account_get_protocol_id(stats->buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
293 const gchar *account_id = gaim_account_get_username(stats->buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
294 const gchar *status_id = (stats->last_message_status_id) ?
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
295 stats->last_message_status_id :
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
296 gaim_status_get_id(get_status_for(stats->buddy));
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
297 struct tm *current_time;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
298 int minute;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
299
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
300 if(stats->last_message == -1) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
301 time_t now = time(NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
302 current_time = localtime(&now);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
303 } else {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
304 current_time = localtime(&stats->last_message);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
305 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
306 minute = current_time->tm_min + current_time->tm_hour * 60;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
307
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
308 insert_cap_msg_count_success(buddy_name, account_id, protocol_id, minute);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
309
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
310 insert_cap_status_count_success(buddy_name, account_id, protocol_id, status_id);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
311
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
312 stats->last_message = -1;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
313 stats->last_message_status_id = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
314 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
315
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
316 static void insert_cap_failure(CapStatistics *stats) {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
317 gchar *buddy_name = stats->buddy->name;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
318 const gchar *protocol_id = gaim_account_get_protocol_id(stats->buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
319 const gchar *account_id = gaim_account_get_username(stats->buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
320 const gchar *status_id = (stats->last_message_status_id) ?
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
321 stats->last_message_status_id :
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
322 gaim_status_get_id(get_status_for(stats->buddy));
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
323 struct tm *current_time = localtime(&stats->last_message);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
324 int minute = current_time->tm_min + current_time->tm_hour * 60;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
325
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
326 insert_cap_msg_count_failed(buddy_name, account_id, protocol_id, minute);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
327
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
328 insert_cap_status_count_failed(buddy_name, account_id, protocol_id, status_id);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
329
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
330 stats->last_message = -1;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
331 stats->last_message_status_id = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
332 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
333
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
334 static gboolean max_message_difference_cb(gpointer data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
335 CapStatistics *stats = data;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
336 gaim_debug_info("cap", "Max Message Difference timeout occured\n");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
337 insert_cap_failure(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
338 stats->timeout_source_id = 0;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
339 return FALSE;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
340 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
341
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
342 /* Gaim Signal Handlers */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
343
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
344 /* sent-im-msg */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
345 static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message) {
14821
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
346 GaimBuddy *buddy;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
347 guint interval, words;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
348
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
349 buddy = gaim_find_buddy(account, receiver);
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
350
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
351 if (buddy == NULL)
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
352 return;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
353
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
354 interval = gaim_prefs_get_int("/plugins/gtk/cap/max_msg_difference") * 1000 * 60;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
355 words = word_count(message);
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
356
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
357 CapStatistics *stats = get_stats_for(buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
358
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
359 insert_word_count(gaim_account_get_username(account), receiver, words);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
360 stats->last_message = time(NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
361 stats->last_message_status_id = gaim_status_get_id(get_status_for(buddy));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
362 if(stats->timeout_source_id != 0)
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
363 g_source_remove(stats->timeout_source_id);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
364
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
365 stats->timeout_source_id = g_timeout_add(interval, max_message_difference_cb, stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
366 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
367
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
368 /* received-im-msg */
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
369 static void
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
370 received_im_msg(GaimAccount *account, char *sender, char *message, GaimConversation *conv, GaimMessageFlags flags) {
14821
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
371 GaimBuddy *buddy;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
372 CapStatistics *stats;
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
373 /* guint words = word_count(message); */
14821
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
374
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
375 buddy = gaim_find_buddy(account, sender);
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
376
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
377 if (buddy == NULL)
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
378 return;
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
379
5e5b34ac509a [gaim-migrate @ 17588]
Stu Tomlinson <stu@nosnilmot.com>
parents: 14517
diff changeset
380 stats = get_stats_for(buddy);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
381
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
382 /* insert_word_count(sender, buddy_name, words); */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
383
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
384 /* If we are waiting for a response from a prior message
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
385 * then cancel the timeout callback. */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
386 if(stats->timeout_source_id != 0) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
387 gaim_debug_info("cap", "Cancelling timeout callback\n");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
388 g_source_remove(stats->timeout_source_id);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
389 stats->timeout_source_id = 0;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
390 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
391
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
392 insert_cap_success(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
393
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
394 /* Reset the last_message value */
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
395 stats->last_message = -1;
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
396 /* Reset the last status id value */
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
397 stats->last_message_status_id = NULL;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
398 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
399
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
400 /* buddy-status-changed */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
401 static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
402 CapStatistics *stats = get_stats_for(buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
403 insert_status_change_from_gaim_status(stats, status);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
404 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
405
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
406 /* buddy-signed-on */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
407 static void buddy_signed_on(GaimBuddy *buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
408 CapStatistics *stats = get_stats_for(buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
409
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
410 /* If the statistic object existed but doesn't have a buddy pointer associated
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
411 * with it then reassociate one with it. The pointer being null is a result
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
412 * of a buddy with existing stats signing off and Gaim sticking around. */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
413 if(!stats->buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
414 stats->buddy = buddy;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
415 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
416
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
417 insert_status_change(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
418 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
419
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
420 /* buddy-signed-off */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
421 static void buddy_signed_off(GaimBuddy *buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
422 CapStatistics *stats = get_stats_for(buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
423
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
424 /* We don't necessarily want to delete a buddies generated statistics every time they go offline.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
425 * Instead we just set the buddy pointer to null so that when they come back online we can look
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
426 * them up again and continue using their statistics.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
427 */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
428 insert_status_change(stats);
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
429 /* stats->buddy = NULL; */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
430 stats->last_seen = time(NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
431 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
432
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
433 static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
434 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
435
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
436 static void blist_node_extended_menu(GaimBlistNode *node, GList **menu) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
437 GaimBuddy *buddy;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
438 GaimMenuAction *menu_action;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
439 gaim_debug_info("cap", "got extended blist menu\n");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
440 gaim_debug_info("cap", "is buddy: %d\n", GAIM_BLIST_NODE_IS_BUDDY(node));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
441 gaim_debug_info("cap", "is contact: %d\n", GAIM_BLIST_NODE_IS_CONTACT(node));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
442 gaim_debug_info("cap", "is group: %d\n", GAIM_BLIST_NODE_IS_GROUP(node));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
443 /* Probably only concerned with buddy/contact types. Contacts = meta-buddies (grouped msn/jabber/etc.) */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
444 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
445 buddy = (GaimBuddy *)node;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
446 menu_action = gaim_menu_action_new(_("Display Statistics"),
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
447 GAIM_CALLBACK(display_statistics_action_cb), NULL, NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
448 *menu = g_list_append(*menu, menu_action);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
449 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
450
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
451 /* drawing-tooltip */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
452 static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
453 if(node->type == GAIM_BLIST_BUDDY_NODE) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
454 GaimBuddy *buddy = (GaimBuddy *)node;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
455 CapStatistics *stats = get_stats_for(buddy);
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
456 /* get the probability that this buddy will respond and add to the tooltip */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
457 if(stats->prediction->probability >= 0.0) {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
458 g_string_append_printf(text, "\n<b>%s</b> %3.0f %%", _("Response Probability:"),
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
459 100 * stats->prediction->probability);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
460 } else {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
461 g_string_append_printf(text, "\n<b>%s</b> ???", _("Response Probability:"));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
462 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
463 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
464 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
465
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
466 /* signed-on */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
467 static void signed_on(GaimConnection *gc) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
468 GaimAccount *account = gaim_connection_get_account(gc);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
469 const char *my_gaim_name = gaim_account_get_username(account);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
470 gchar *my_name = g_strdup(my_gaim_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
471 time_t *last_offline = g_hash_table_lookup(_my_offline_times, my_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
472
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
473 const gchar *account_id = gaim_account_get_username(account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
474 const gchar *protocol_id = gaim_account_get_protocol_id(account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
475 char *sql;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
476
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
477 sql = sqlite3_mprintf("insert into cap_my_usage values(%Q, %Q, %d, now());", account_id, protocol_id, 1);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
478 sqlite3_exec(_db, sql, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
479 sqlite3_free(sql);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
480
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
481 if(last_offline) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
482 if(difftime(*last_offline, time(NULL)) > gaim_prefs_get_int("/plugins/gtk/cap/max_seen_difference") * 60) {
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
483 /* reset all of the last_message times to -1 */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
484 g_hash_table_foreach(_my_offline_times, reset_all_last_message_times, NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
485 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
486 g_hash_table_remove(_my_offline_times, my_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
487 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
488 g_free(my_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
489 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
490
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
491 /* signed-off */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
492 static void signed_off(GaimConnection *gc) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
493 /* Here we record the time you (the user) sign off of an account.
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
494 * The account username is the key in the hashtable and the sign off time_t
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
495 * (equal to the sign off time) is the value. */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
496 GaimAccount *account = gaim_connection_get_account(gc);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
497 const char *my_gaim_name = gaim_account_get_username(account);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
498 gchar *my_name = g_strdup(my_gaim_name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
499 time_t *offline_time = g_malloc(sizeof(time_t));
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
500 const gchar *account_id = gaim_account_get_username(account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
501 const gchar *protocol_id = gaim_account_get_protocol_id(account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
502 char *sql;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
503
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
504 sql = sqlite3_mprintf("insert into cap_my_usage values(%Q, %Q, %d, now());", account_id, protocol_id, 0);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
505 sqlite3_exec(_db, sql, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
506 sqlite3_free(sql);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
507
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
508 time(offline_time);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
509 g_hash_table_insert(_my_offline_times, my_name, offline_time);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
510 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
511
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
512 static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
513 CapStatistics *stats = value;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
514 stats->last_message = -1;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
515 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
516
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
517 static GaimStatus * get_status_for(GaimBuddy *buddy) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
518 GaimPresence *presence = gaim_buddy_get_presence(buddy);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
519 GaimStatus *status = gaim_presence_get_active_status(presence);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
520 return status;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
521 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
522
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
523 static void create_tables() {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
524 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
525 rc = sqlite3_exec(_db,
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
526 "CREATE TABLE IF NOT EXISTS cap_status ("
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
527 " buddy varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
528 " account varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
529 " protocol varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
530 " status varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
531 " event_time datetime not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
532 " primary key (buddy, account, protocol, event_time)"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
533 ");",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
534 NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
535
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
536 rc = sqlite3_exec(_db,
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
537 "create table if not exists cap_message ("
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
538 " sender varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
539 " receiver varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
540 " account varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
541 " protocol varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
542 " word_count integer not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
543 " event_time datetime not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
544 " primary key (sender, account, protocol, receiver, event_time)"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
545 ");",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
546 NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
547
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
548 rc = sqlite3_exec(_db,
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
549 "create table if not exists cap_msg_count ("
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
550 " buddy varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
551 " account varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
552 " protocol varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
553 " minute_val int not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
554 " success_count int not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
555 " failed_count int not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
556 " primary key (buddy, account, protocol, minute_val)"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
557 ");",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
558 NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
559
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
560 rc = sqlite3_exec(_db,
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
561 "create table if not exists cap_status_count ("
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
562 " buddy varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
563 " account varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
564 " protocol varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
565 " status varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
566 " success_count int not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
567 " failed_count int not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
568 " primary key (buddy, account, protocol, status)"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
569 ");",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
570 NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
571
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
572 rc = sqlite3_exec(_db,
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
573 "create table if not exists cap_my_usage ("
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
574 " account varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
575 " protocol varchar(60) not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
576 " online tinyint not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
577 " event_time datetime not null,"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
578 " primary key(account, protocol, online, event_time)"
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
579 ");",
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
580 NULL, NULL, NULL);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
581 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
582
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
583 static gboolean create_database_connection() {
14517
1444d83ff10a [gaim-migrate @ 17237]
Geoff Foster <g-off_>
parents: 14516
diff changeset
584 gchar *path;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
585 int rc;
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
586
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
587 if(_db)
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
588 return TRUE;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
589
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
590 /* build the path */
14517
1444d83ff10a [gaim-migrate @ 17237]
Geoff Foster <g-off_>
parents: 14516
diff changeset
591 path = g_build_filename(gaim_user_dir(), "cap.db", (gchar *)NULL);
14513
59223d5fb0ad [gaim-migrate @ 17233]
Geoff Foster <g-off_>
parents: 14511
diff changeset
592
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
593 /* make database connection here */
14517
1444d83ff10a [gaim-migrate @ 17237]
Geoff Foster <g-off_>
parents: 14516
diff changeset
594 rc = sqlite3_open(path, &_db);
1444d83ff10a [gaim-migrate @ 17237]
Geoff Foster <g-off_>
parents: 14516
diff changeset
595 g_free(path);
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
596 if(rc != SQLITE_OK)
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
597 return FALSE;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
598
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
599 /* Add tables here */
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
600 create_tables();
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
601 gaim_debug_info("cap", "Database connection successfully made.\n");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
602 return TRUE;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
603 }
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
604 static void destroy_database_connection() {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
605 if(_db)
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
606 sqlite3_close(_db);
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
607
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
608 _db = NULL;
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
609 }
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
610
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
611 static guint word_count(const gchar *string) {
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
612 /*TODO: doesn't really work, should use regex instead (#include <regex.h>)*/
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
613 gchar **result = g_strsplit_set(string, " ", -1);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
614 guint count = g_strv_length(result);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
615
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
616 g_strfreev(result);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
617
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
618 return count;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
619 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
620
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
621 static void insert_status_change(CapStatistics *statistics) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
622 insert_status_change_from_gaim_status(statistics, get_status_for(statistics->buddy));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
623 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
624
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
625 static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status) {
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
626 char *sql;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
627 int rc;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
628 const gchar *status_id;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
629 const gchar *buddy_name;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
630 const gchar *protocol_id;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
631 const gchar *account_id;
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
632
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
633 /* It would seem that some protocols receive periodic updates of the buddies status.
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
634 * Check to make sure the last status is not the same as current status to prevent
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
635 * to many duplicated useless database entries. */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
636 if(strcmp(statistics->last_status_id, gaim_status_get_id(status)) == 0)
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
637 return;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
638
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
639 status_id = gaim_status_get_id(status);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
640 buddy_name = statistics->buddy->name;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
641 protocol_id = gaim_account_get_protocol_id(statistics->buddy->account);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
642 account_id = gaim_account_get_username(statistics->buddy->account);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
643
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
644 statistics->last_status_id = gaim_status_get_id(status);
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
645
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
646 gaim_debug_info("cap", "Executing: insert into cap_status (buddy, account, protocol, status, event_time) values(%s, %s, %s, %s, now());\n", buddy_name, account_id, protocol_id, status_id);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
647
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
648 sql = sqlite3_mprintf("insert into cap_status values (%Q, %Q, %Q, %Q, now());", buddy_name, account_id, protocol_id, status_id);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
649 rc = sqlite3_exec(_db, sql, NULL, NULL, NULL);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
650 sqlite3_free(sql);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
651 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
652
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
653 static void insert_word_count(const char *sender, const char *receiver, guint count) {
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
654 /* TODO! */
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
655 /* dbi_result result; */
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
656 /* result = dbi_conn_queryf(_conn, "insert into cap_message values(\'%s\', \'%s\', %d, now());", sender, receiver, count); */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
657 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
658
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
659 /* Callbacks */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
660 void display_statistics_action_cb(GaimBlistNode *node, gpointer data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
661 GaimBuddy *buddy;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
662
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
663 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
664 buddy = (GaimBuddy *)node;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
665 gaim_debug_info("cap", "Statistics for %s requested.\n", buddy->name);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
666 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
667
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
668 /* Gaim plugin specific code */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
669
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
670 static gboolean plugin_load(GaimPlugin *plugin) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
671 _plugin_pointer = plugin;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
672 _signals_connected = FALSE;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
673
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
674 /* buddy_stats is a hashtable where strings are keys
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
675 * and the keys are a buddies account id (GaimBuddy.name).
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
676 * keys/values are automatically deleted */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
677 _buddy_stats = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, destroy_stats);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
678
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
679 /* ? - Can't remember at the moment
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
680 */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
681 _my_offline_times = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
682
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
683 if(create_database_connection()) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
684 add_plugin_functionality(plugin);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
685 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
686 return TRUE;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
687 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
688
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
689 static void add_plugin_functionality(GaimPlugin *plugin) {
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
690 if(_signals_connected)
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
691 return;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
692
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
693 gaim_debug_info("cap", "Adding plugin functionality.\n");
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
694
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
695 /* Connect all the signals */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
696 gaim_signal_connect(gaim_conversations_get_handle(), "sent-im-msg", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
697 GAIM_CALLBACK(sent_im_msg), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
698
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
699 gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
700 GAIM_CALLBACK(received_im_msg), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
701
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
702 gaim_signal_connect(gaim_blist_get_handle(), "buddy-status-changed", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
703 GAIM_CALLBACK(buddy_status_changed), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
704
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
705 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
706 GAIM_CALLBACK(buddy_signed_on), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
707
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
708 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
709 GAIM_CALLBACK(buddy_signed_off), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
710
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
711 /*gaim_signal_connect(gaim_blist_get_handle(), "blist-node-extended-menu", plugin,
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
712 GAIM_CALLBACK(blist_node_extended_menu), NULL);*/
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
713
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
714 gaim_signal_connect(gaim_gtk_blist_get_handle(), "drawing-tooltip", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
715 GAIM_CALLBACK(drawing_tooltip), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
716
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
717 gaim_signal_connect(gaim_connections_get_handle(), "signed-on", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
718 GAIM_CALLBACK(signed_on), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
719
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
720 gaim_signal_connect(gaim_connections_get_handle(), "signed-off", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
721 GAIM_CALLBACK(signed_off), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
722
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
723 gaim_signal_connect(gaim_blist_get_handle(), "buddy-idle-changed", plugin,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
724 GAIM_CALLBACK(buddy_idle), NULL);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
725
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
726 _signals_connected = TRUE;
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
727 }
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
728
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
729 static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data) {
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
730 CapStatistics *stats = value;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
731 if(stats->timeout_source_id != 0) {
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
732 g_source_remove(stats->timeout_source_id);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
733 stats->timeout_source_id = 0;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
734 }
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
735 }
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
736
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
737 static void remove_plugin_functionality(GaimPlugin *plugin) {
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
738 if(!_signals_connected)
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
739 return;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
740
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
741 gaim_debug_info("cap", "Removing plugin functionality.\n");
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
742
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
743 /* If there are any timeouts waiting to be processed then cancel them */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
744 g_hash_table_foreach(_buddy_stats, cancel_conversation_timeouts, NULL);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
745
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
746 /* Connect all the signals */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
747 gaim_signal_disconnect(gaim_conversations_get_handle(), "sent-im-msg", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
748 GAIM_CALLBACK(sent_im_msg));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
749
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
750 gaim_signal_disconnect(gaim_conversations_get_handle(), "received-im-msg", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
751 GAIM_CALLBACK(received_im_msg));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
752
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
753 gaim_signal_disconnect(gaim_blist_get_handle(), "buddy-status-changed", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
754 GAIM_CALLBACK(buddy_status_changed));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
755
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
756 gaim_signal_disconnect(gaim_blist_get_handle(), "buddy-signed-on", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
757 GAIM_CALLBACK(buddy_signed_on));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
758
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
759 gaim_signal_disconnect(gaim_blist_get_handle(), "buddy-signed-off", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
760 GAIM_CALLBACK(buddy_signed_off));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
761
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
762 /*gaim_signal_disconnect(gaim_blist_get_handle(), "blist-node-extended-menu", plugin,
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
763 GAIM_CALLBACK(blist_node_extended_menu));*/
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
764
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
765 gaim_signal_disconnect(gaim_gtk_blist_get_handle(), "drawing-tooltip", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
766 GAIM_CALLBACK(drawing_tooltip));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
767
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
768 gaim_signal_disconnect(gaim_connections_get_handle(), "signed-on", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
769 GAIM_CALLBACK(signed_on));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
770
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
771 gaim_signal_disconnect(gaim_connections_get_handle(), "signed-off", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
772 GAIM_CALLBACK(signed_off));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
773
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
774 gaim_signal_disconnect(gaim_blist_get_handle(), "buddy-idle-changed", plugin,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
775 GAIM_CALLBACK(buddy_idle));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
776
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
777 _signals_connected = FALSE;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
778 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
779
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
780 static void write_stats_on_unload(gpointer key, gpointer value, gpointer user_data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
781 CapStatistics *stats = value;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
782 if(stats->last_message != -1 && stats->buddy != NULL) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
783 insert_cap_failure(stats);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
784 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
785 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
786
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
787 static gboolean plugin_unload(GaimPlugin *plugin) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
788 gaim_debug_info("cap", "CAP plugin unloading\n");
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
789
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
790 /* clean up memory allocations */
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
791 if(_buddy_stats) {
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
792 g_hash_table_foreach(_buddy_stats, write_stats_on_unload, NULL);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
793 g_hash_table_destroy(_buddy_stats);
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
794 }
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
795
14516
3c8b4bcb68fb [gaim-migrate @ 17236]
Geoff Foster <g-off_>
parents: 14513
diff changeset
796 /* close database connection */
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
797 destroy_database_connection();
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
798
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
799 return TRUE;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
800 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
801
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
802 static CapPrefsUI * create_cap_prefs_ui() {
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
803 CapPrefsUI *ui = g_malloc(sizeof(CapPrefsUI));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
804
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
805 ui->ret = gtk_vbox_new(FALSE, 18);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
806 gtk_container_set_border_width(GTK_CONTAINER(ui->ret), 10);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
807 ui->cap_vbox = gaim_gtk_make_frame(ui->ret, _("Statistics Configuration"));
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
808
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
809 /* msg_difference spinner */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
810 ui->msg_difference_label = gtk_label_new(_("Maximum response timeout:"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
811 gtk_misc_set_alignment(GTK_MISC(ui->msg_difference_label), 0, 0.5);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
812 ui->msg_difference_input = gtk_spin_button_new_with_range(1, 1440, 1);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
813 ui->msg_difference_minutes_label = gtk_label_new(_("minutes"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
814 gtk_misc_set_alignment(GTK_MISC(ui->msg_difference_minutes_label), 0, 0.5);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
815
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
816 /* last_seen spinner */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
817 ui->last_seen_label = gtk_label_new(_("Maximum last-seen difference:"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
818 gtk_misc_set_alignment(GTK_MISC(ui->last_seen_label), 0, 0.5);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
819 ui->last_seen_input = gtk_spin_button_new_with_range(1, 1440, 1);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
820 ui->last_seen_minutes_label = gtk_label_new(_("minutes"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
821 gtk_misc_set_alignment(GTK_MISC(ui->last_seen_minutes_label), 0, 0.5);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
822
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
823 /* threshold spinner */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
824 ui->threshold_label = gtk_label_new(_("Threshold:"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
825 gtk_misc_set_alignment(GTK_MISC(ui->threshold_label), 0, 0.5);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
826 ui->threshold_input = gtk_spin_button_new_with_range(1, 1440, 1);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
827 ui->threshold_minutes_label = gtk_label_new(_("minutes"));
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
828 gtk_misc_set_alignment(GTK_MISC(ui->threshold_minutes_label), 0, 0.5);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
829
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
830 /* Layout threshold/last-seen/response-timeout input items */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
831 ui->table_layout = gtk_table_new(3, 3, FALSE);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
832 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->threshold_label, 0, 1, 0, 1,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
833 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
834 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
835
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
836 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->threshold_input, 1, 2, 0, 1,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
837 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
838 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
839
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
840 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->threshold_minutes_label, 2, 3, 0, 1,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
841 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
842 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
843
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
844 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->msg_difference_label, 0, 1, 1, 2,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
845 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
846 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
847
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
848 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->msg_difference_input, 1, 2, 1, 2,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
849 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
850 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
851
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
852 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->msg_difference_minutes_label, 2, 3, 1, 2,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
853 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
854 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
855
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
856 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->last_seen_label, 0, 1, 2,3,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
857 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
858 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
859
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
860 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->last_seen_input, 1, 2, 2, 3,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
861 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
862 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
863
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
864 gtk_table_attach(GTK_TABLE(ui->table_layout), ui->last_seen_minutes_label, 2, 3, 2, 3,
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
865 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
866 (GtkAttachOptions) (0), 0, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
867
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
868
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
869 /* Config window - lay it out */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
870 gtk_box_pack_start(GTK_BOX(ui->cap_vbox), ui->table_layout, FALSE, FALSE, 0);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
871
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
872 /* Set the input areas to contain the configuration values from
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
873 * gaim prefs.
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
874 */
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
875 if(gaim_prefs_exists("/plugins/gtk/cap/max_msg_difference")) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
876 int max_msg_diff = gaim_prefs_get_int("/plugins/gtk/cap/max_msg_difference");
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
877 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->msg_difference_input), max_msg_diff);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
878 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
879 if(gaim_prefs_exists("/plugins/gtk/cap/max_seen_difference")) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
880 int max_seen_diff = gaim_prefs_get_int("/plugins/gtk/cap/max_seen_difference");
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
881 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->last_seen_input), max_seen_diff);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
882 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
883 if(gaim_prefs_exists("/plugins/gtk/cap/threshold")) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
884 int threshold = gaim_prefs_get_int("/plugins/gtk/cap/threshold");
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
885 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->threshold_input), threshold);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
886 }
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
887
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
888 /* Add the signals */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
889 g_signal_connect(G_OBJECT(ui->ret), "destroy",
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
890 G_CALLBACK(cap_prefs_ui_destroy_cb), ui);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
891
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
892 g_signal_connect(G_OBJECT(ui->msg_difference_input), "value-changed",
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
893 G_CALLBACK(numeric_spinner_prefs_cb), "/plugins/gtk/cap/max_msg_difference");
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
894
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
895 g_signal_connect(G_OBJECT(ui->last_seen_input), "value-changed",
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
896 G_CALLBACK(numeric_spinner_prefs_cb), "/plugins/gtk/cap/max_seen_difference");
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
897
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
898 g_signal_connect(G_OBJECT(ui->threshold_input), "value-changed",
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
899 G_CALLBACK(numeric_spinner_prefs_cb), "/plugins/gtk/cap/threshold");
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
900
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
901 return ui;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
902 }
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
903
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
904 static void cap_prefs_ui_destroy_cb(GtkObject *object, gpointer user_data) {
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
905 CapPrefsUI *ui = user_data;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
906 if(_db) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
907 add_plugin_functionality(_plugin_pointer);
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
908 }
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
909 g_free(ui);
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
910 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
911
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
912 static void numeric_spinner_prefs_cb(GtkSpinButton *spinbutton, gpointer user_data) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
913 gaim_prefs_set_int(user_data, gtk_spin_button_get_value_as_int(spinbutton));
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
914 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
915
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
916 static GaimGtkPluginUiInfo ui_info = {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
917 get_config_frame,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
918 0 /* page_num (reserved) */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
919 };
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
920
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
921 static GaimPluginInfo info = {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
922 GAIM_PLUGIN_MAGIC,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
923 GAIM_MAJOR_VERSION,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
924 GAIM_MINOR_VERSION,
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
925 GAIM_PLUGIN_STANDARD, /**< type */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
926 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
927 0, /**< flags */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
928 NULL, /**< dependencies */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
929 GAIM_PRIORITY_DEFAULT, /**< priority */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
930 CAP_PLUGIN_ID, /**< id */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
931 "Contact Availability Prediction", /**< name */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
932 VERSION, /**< version */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
933 N_("Contact Availability Prediction plugin."), /** summary */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
934 N_("The contact availability plugin (cap) is used to display statistical information about buddies in a users contact list."),
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
935 /** description */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
936 "Geoffrey Foster <geoffrey.foster@gmail.com>", /**< author */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
937 GAIM_WEBSITE, /**< homepage */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
938 plugin_load, /**< load */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
939 plugin_unload, /**< unload */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
940 NULL, /**< destroy */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
941 &ui_info, /**< ui_info */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
942 NULL, /**< extra_info */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
943 NULL, /**< prefs_info */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
944 NULL
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
945 };
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
946
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
947 static GtkWidget * get_config_frame(GaimPlugin *plugin) {
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
948 CapPrefsUI *ui = create_cap_prefs_ui();
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
949
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
950 /*
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
951 * Prevent database stuff from occuring since we are editing values
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
952 */
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
953 remove_plugin_functionality(_plugin_pointer);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
954
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
955 return ui->ret;
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
956 }
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
957
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
958 static void init_plugin(GaimPlugin *plugin) {
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
959 gaim_prefs_add_none("/plugins/gtk/cap");
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
960 gaim_prefs_add_int("/plugins/gtk/cap/max_seen_difference", 1);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
961 gaim_prefs_add_int("/plugins/gtk/cap/max_msg_difference", 10);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
962 gaim_prefs_add_int("/plugins/gtk/cap/threshold", 5);
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
963 }
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
964
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
965 GAIM_INIT_PLUGIN(cap, init_plugin, info);