annotate gtk/plugins/cap/cap.h @ 14511:f309a5b3f184

[gaim-migrate @ 17231] Switched from using libdbi to using sqlite3. Results in easier configuration (no need to setup database server/create database/add tables). Also Gtk Gaim no longer needs to link against libdbi. This should make the plugin more easily distributable and thus hopefully it can be included in binary releases of Gaim (fingers crossed). committer: Tailor Script <tailor@pidgin.im>
author Geoff Foster <g-off_>
date Mon, 11 Sep 2006 00:28:35 +0000
parents eec3ce357b70
children 3c8b4bcb68fb
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 #ifndef _CAP_H_
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
23 #define _CAP_H_
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
24
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
25 #include "internal.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
26 #include "gtkgaim.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
27
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
28 #include "conversation.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
29
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
30 #include "gtkconv.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
31 #include "gtkblist.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
32 #include "gtkplugin.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
33 #include "gtkutils.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
34
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
35 #include "blist.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
36 #include "notify.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
37 #include "version.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
38 #include "debug.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
39
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
40 #include "util.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
41
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
42 #include <glib.h>
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
43 #include <time.h>
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
44 #include <sqlite3.h>
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
45 #include "cap_statistics.h"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
46
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
47 #define CAP_PLUGIN_ID "gtk-g-off_-cap"
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
48
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
49 /* Variables used throughout lifetime of the plugin */
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
50 GaimPlugin *_plugin_pointer;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
51 sqlite3 *_db; /**< The database */
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
52
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
53 GHashTable *_buddy_stats = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
54 GHashTable *_my_offline_times = NULL;
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
55 gboolean _signals_connected;
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
56 gboolean _sqlite_initialized;
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
57
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
58 /* Prefs UI */
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
59 typedef struct _CapPrefsUI CapPrefsUI;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
60
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
61 struct _CapPrefsUI {
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
62 GtkWidget *ret;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
63 GtkWidget *cap_vbox;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
64 GtkWidget *table_layout;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
65
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
66 GtkWidget *threshold_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
67 GtkWidget *threshold_input;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
68 GtkWidget *threshold_minutes_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
69
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
70 GtkWidget *msg_difference_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
71 GtkWidget *msg_difference_input;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
72 GtkWidget *msg_difference_minutes_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
73
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
74 GtkWidget *last_seen_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
75 GtkWidget *last_seen_input;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
76 GtkWidget *last_seen_minutes_label;
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
77 };
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
78
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
79 static void generate_prediction(CapStatistics *statistics);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
80 static double generate_prediction_for(GaimBuddy *buddy);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
81 static CapStatistics * get_stats_for(GaimBuddy *buddy);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
82 static void destroy_stats(gpointer data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
83 static void 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
84 static void 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
85 static void 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
86 static void 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
87 static void insert_cap_success(CapStatistics *stats);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
88 static void insert_cap_failure(CapStatistics *stats);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
89 static gboolean max_message_difference_cb(gpointer data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
90 /* Gaim Signal Handlers */
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
91 //sent-im-msg
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
92 static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
93 //received-im-msg
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
94 static void received_im_msg(GaimAccount *account, char *sender, char *message, GaimConversation *conv, GaimMessageFlags flags);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
95 //buddy-status-changed
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
96 static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
97 //buddy-signed-on
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
98 static void buddy_signed_on(GaimBuddy *buddy);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
99 //buddy-signed-off
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
100 static void buddy_signed_off(GaimBuddy *buddy);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
101 static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
102 static void blist_node_extended_menu(GaimBlistNode *node, GList **menu);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
103 //drawing-tooltip
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
104 static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
105 //signed-on
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
106 static void signed_on(GaimConnection *gc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
107 //signed-off
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
108 static void signed_off(GaimConnection *gc);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
109 static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
110 static GaimStatus * get_status_for(GaimBuddy *buddy);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
111 static void create_tables();
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
112 static gboolean create_database_connection();
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
113 static void destroy_database_connection();
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
114 static guint word_count(const gchar *string);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
115 static void insert_status_change(CapStatistics *statistics);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
116 static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
117 static void insert_word_count(const char *sender, const char *receiver, guint count);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
118 void display_statistics_action_cb(GaimBlistNode *node, gpointer data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
119 static gboolean plugin_load(GaimPlugin *plugin);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
120 static void add_plugin_functionality(GaimPlugin *plugin);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
121 static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
122 static void remove_plugin_functionality(GaimPlugin *plugin);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
123 static void write_stats_on_unload(gpointer key, gpointer value, gpointer user_data);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
124 static gboolean plugin_unload(GaimPlugin *plugin);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
125 static CapPrefsUI * create_cap_prefs_ui();
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
126 static void cap_prefs_ui_destroy_cb(GtkObject *object, gpointer user_data);
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
127 static void numeric_spinner_prefs_cb(GtkSpinButton *spinbutton, gpointer user_data);
14511
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
128 static GtkWidget * get_config_frame(GaimPlugin *plugin);
f309a5b3f184 [gaim-migrate @ 17231]
Geoff Foster <g-off_>
parents: 14350
diff changeset
129 static void init_plugin(GaimPlugin *plugin);
14350
eec3ce357b70 [gaim-migrate @ 17053]
Geoff Foster <g-off_>
parents: 14266
diff changeset
130
14266
63ef6342db05 [gaim-migrate @ 16948]
Geoff Foster <g-off_>
parents:
diff changeset
131 #endif