comparison 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
comparison
equal deleted inserted replaced
14510:1d73e11d8787 14511:f309a5b3f184
37 #include "version.h" 37 #include "version.h"
38 #include "debug.h" 38 #include "debug.h"
39 39
40 #include "util.h" 40 #include "util.h"
41 41
42 #include <dbi/dbi.h>
43 #include <glib.h> 42 #include <glib.h>
44 #include <time.h> 43 #include <time.h>
44 #include <sqlite3.h>
45 #include "cap_statistics.h" 45 #include "cap_statistics.h"
46 46
47 #define CAP_PLUGIN_ID "gtk-g-off_-cap" 47 #define CAP_PLUGIN_ID "gtk-g-off_-cap"
48 48
49 /* Variables used throughout lifetime of the plugin */ 49 /* Variables used throughout lifetime of the plugin */
50 GaimPlugin *_plugin_pointer; 50 GaimPlugin *_plugin_pointer;
51 dbi_conn _conn = NULL; /**< The database connection */ 51 sqlite3 *_db; /**< The database */
52 dbi_driver _driver = NULL; /**< The database driver */ 52
53 GHashTable *_buddy_stats = NULL; 53 GHashTable *_buddy_stats = NULL;
54 GHashTable *_my_offline_times = NULL; 54 GHashTable *_my_offline_times = NULL;
55 GString *error_msg = NULL;
56 gboolean _signals_connected; 55 gboolean _signals_connected;
57 gboolean _dbi_initialized; 56 gboolean _sqlite_initialized;
58 int _num_drivers;
59
60 enum driver_types {MYSQL};
61
62 /* Function definitions */
63 static char * quote_string(const char *str);
64 static gboolean plugin_load(GaimPlugin *plugin);
65 static void add_plugin_functionality(GaimPlugin *plugin);
66 static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data);
67 static void remove_plugin_functionality(GaimPlugin *plugin);
68 static gboolean plugin_unload(GaimPlugin *plugin);
69 static void init_plugin(GaimPlugin *plugin);
70 static void generate_prediction(CapStatistics *statistics);
71 static double generate_prediction_for(GaimBuddy *buddy);
72 static CapStatistics * get_stats_for(GaimBuddy *buddy);
73 static void destroy_stats(gpointer data);
74 static gboolean remove_stats_for(GaimBuddy *buddy);
75 static dbi_result insert_cap_msg_count_success(const char *buddy_name, const char *account, const char *protocol, int minute);
76 static dbi_result insert_cap_status_count_success(const char *buddy_name, const char *account, const char *protocol, const char *status_id);
77 static dbi_result insert_cap_msg_count_failed(const char *buddy_name, const char *account, const char *protocol, int minute);
78 static dbi_result insert_cap_status_count_failed(const char *buddy_name, const char *account, const char *protocol, const char *status_id);
79 static void insert_cap_success(CapStatistics *stats);
80 static void insert_cap_failure(CapStatistics *stats);
81 static gboolean max_message_difference_cb(gpointer data);
82
83 /* Various CAP helper functions */
84 static const gchar * get_error_msg(void);
85 static void set_error_msg(const gchar *msg);
86 static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data);
87 static GaimStatus * get_status_for(GaimBuddy *buddy);
88 static void create_tables(void);
89 static gboolean create_database_connection(void);
90 static void destroy_database_connection(void);
91 static guint word_count(const gchar *string);
92 static gboolean last_message_time_in_range(CapStatistics *statistics, gdouble max_difference);
93 static gboolean last_seen_time_in_range(CapStatistics *statistics, gdouble max_difference);
94 static void insert_status_change(CapStatistics *statistics);
95 static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status);
96 static void insert_word_count(const char *sender, const char *receiver, guint count);
97
98 /* Gaim Signal Handlers */
99 static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message);
100 static void received_im_msg(GaimAccount *account, char *sender, char *message,
101 GaimConversation *conv, GaimMessageFlags flags);
102 static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status);
103 static void buddy_signed_on(GaimBuddy *buddy);
104 static void buddy_signed_off(GaimBuddy *buddy);
105 static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle);
106 static void blist_node_extended_menu(GaimBlistNode *node, GList **menu);
107 static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full);
108 static void signed_on(GaimConnection *gc);
109 static void signed_off(GaimConnection *gc);
110
111 /* Call backs */
112 void display_statistics_action_cb(GaimBlistNode *node, gpointer data);
113 57
114 /* Prefs UI */ 58 /* Prefs UI */
115 typedef struct _CapPrefsUI CapPrefsUI; 59 typedef struct _CapPrefsUI CapPrefsUI;
116 60
117 struct _CapPrefsUI { 61 struct _CapPrefsUI {
118 GtkWidget *ret; 62 GtkWidget *ret;
119 GtkWidget *db_vbox;
120 GtkWidget *cap_vbox; 63 GtkWidget *cap_vbox;
121 GtkWidget *table_layout; 64 GtkWidget *table_layout;
122
123 GtkWidget *driver_vbox;
124 GtkWidget *driver_select_hbox;
125 GtkWidget *driver_choice;
126 GtkWidget *driver_label;
127 GtkWidget *driver_config_hbox;
128 GtkWidget *driver_config;
129 GtkWidget *driver_connect_button;
130
131 GtkWidget *dbd_label;
132 GtkWidget *dbd_input;
133 GtkWidget *dbd_hbox;
134 GtkWidget *dbd_button;
135 65
136 GtkWidget *threshold_label; 66 GtkWidget *threshold_label;
137 GtkWidget *threshold_input; 67 GtkWidget *threshold_input;
138 GtkWidget *threshold_minutes_label; 68 GtkWidget *threshold_minutes_label;
139 69
144 GtkWidget *last_seen_label; 74 GtkWidget *last_seen_label;
145 GtkWidget *last_seen_input; 75 GtkWidget *last_seen_input;
146 GtkWidget *last_seen_minutes_label; 76 GtkWidget *last_seen_minutes_label;
147 }; 77 };
148 78
79 static void generate_prediction(CapStatistics *statistics);
80 static double generate_prediction_for(GaimBuddy *buddy);
81 static CapStatistics * get_stats_for(GaimBuddy *buddy);
82 static void destroy_stats(gpointer data);
83 static void insert_cap_msg_count_success(const char *buddy_name, const char *account, const char *protocol, int minute);
84 static void insert_cap_status_count_success(const char *buddy_name, const char *account, const char *protocol, const char *status_id);
85 static void insert_cap_msg_count_failed(const char *buddy_name, const char *account, const char *protocol, int minute);
86 static void insert_cap_status_count_failed(const char *buddy_name, const char *account, const char *protocol, const char *status_id);
87 static void insert_cap_success(CapStatistics *stats);
88 static void insert_cap_failure(CapStatistics *stats);
89 static gboolean max_message_difference_cb(gpointer data);
90 /* Gaim Signal Handlers */
91 //sent-im-msg
92 static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message);
93 //received-im-msg
94 static void received_im_msg(GaimAccount *account, char *sender, char *message, GaimConversation *conv, GaimMessageFlags flags);
95 //buddy-status-changed
96 static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status);
97 //buddy-signed-on
98 static void buddy_signed_on(GaimBuddy *buddy);
99 //buddy-signed-off
100 static void buddy_signed_off(GaimBuddy *buddy);
101 static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle);
102 static void blist_node_extended_menu(GaimBlistNode *node, GList **menu);
103 //drawing-tooltip
104 static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full);
105 //signed-on
106 static void signed_on(GaimConnection *gc);
107 //signed-off
108 static void signed_off(GaimConnection *gc);
109 static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data);
110 static GaimStatus * get_status_for(GaimBuddy *buddy);
111 static void create_tables();
112 static gboolean create_database_connection();
113 static void destroy_database_connection();
114 static guint word_count(const gchar *string);
115 static void insert_status_change(CapStatistics *statistics);
116 static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status);
117 static void insert_word_count(const char *sender, const char *receiver, guint count);
118 void display_statistics_action_cb(GaimBlistNode *node, gpointer data);
119 static gboolean plugin_load(GaimPlugin *plugin);
120 static void add_plugin_functionality(GaimPlugin *plugin);
121 static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data);
122 static void remove_plugin_functionality(GaimPlugin *plugin);
123 static void write_stats_on_unload(gpointer key, gpointer value, gpointer user_data);
124 static gboolean plugin_unload(GaimPlugin *plugin);
125 static CapPrefsUI * create_cap_prefs_ui();
126 static void cap_prefs_ui_destroy_cb(GtkObject *object, gpointer user_data);
127 static void numeric_spinner_prefs_cb(GtkSpinButton *spinbutton, gpointer user_data);
149 static GtkWidget * get_config_frame(GaimPlugin *plugin); 128 static GtkWidget * get_config_frame(GaimPlugin *plugin);
150 static void cap_prefs_ui_destroy_cb(GtkObject *object, gpointer user_data); 129 static void init_plugin(GaimPlugin *plugin);
151 static CapPrefsUI * create_cap_prefs_ui(void);
152
153 static void driver_choice_changed_cb(GtkComboBox *widget, gpointer user_data);
154 static void driver_config_expanded_cb(GObject *object, GParamSpec *param_spec, gpointer user_data);
155 static void connect_toggled_cb(GtkToggleButton *togglebutton, gpointer user_data);
156 static void numeric_spinner_prefs_cb(GtkSpinButton *spinbutton, gpointer user_data);
157 static void driver_location_verify_cb(GtkButton *button, gpointer user_data);
158 static gboolean text_entry_prefs_cb(GtkWidget *widget, GdkEventFocus *event, gpointer user_data);
159
160 static void set_driver_choice_options(GtkComboBox *chooser);
161 static GtkWidget * get_mysql_config(void);
162 130
163 #endif 131 #endif