diff -r 80e79a4926b4 -r 7e18a0a07718 gtk/plugins/cap/cap.h --- a/gtk/plugins/cap/cap.h Sun Sep 10 22:33:28 2006 +0000 +++ b/gtk/plugins/cap/cap.h Mon Sep 11 00:28:35 2006 +0000 @@ -39,100 +39,30 @@ #include "util.h" -#include #include #include +#include #include "cap_statistics.h" #define CAP_PLUGIN_ID "gtk-g-off_-cap" /* Variables used throughout lifetime of the plugin */ GaimPlugin *_plugin_pointer; -dbi_conn _conn = NULL; /**< The database connection */ -dbi_driver _driver = NULL; /**< The database driver */ +sqlite3 *_db; /**< The database */ + GHashTable *_buddy_stats = NULL; GHashTable *_my_offline_times = NULL; -GString *error_msg = NULL; gboolean _signals_connected; -gboolean _dbi_initialized; -int _num_drivers; - -enum driver_types {MYSQL}; - -/* Function definitions */ -static char * quote_string(const char *str); -static gboolean plugin_load(GaimPlugin *plugin); -static void add_plugin_functionality(GaimPlugin *plugin); -static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data); -static void remove_plugin_functionality(GaimPlugin *plugin); -static gboolean plugin_unload(GaimPlugin *plugin); -static void init_plugin(GaimPlugin *plugin); -static void generate_prediction(CapStatistics *statistics); -static double generate_prediction_for(GaimBuddy *buddy); -static CapStatistics * get_stats_for(GaimBuddy *buddy); -static void destroy_stats(gpointer data); -static gboolean remove_stats_for(GaimBuddy *buddy); -static dbi_result insert_cap_msg_count_success(const char *buddy_name, const char *account, const char *protocol, int minute); -static dbi_result insert_cap_status_count_success(const char *buddy_name, const char *account, const char *protocol, const char *status_id); -static dbi_result insert_cap_msg_count_failed(const char *buddy_name, const char *account, const char *protocol, int minute); -static dbi_result insert_cap_status_count_failed(const char *buddy_name, const char *account, const char *protocol, const char *status_id); -static void insert_cap_success(CapStatistics *stats); -static void insert_cap_failure(CapStatistics *stats); -static gboolean max_message_difference_cb(gpointer data); - -/* Various CAP helper functions */ -static const gchar * get_error_msg(void); -static void set_error_msg(const gchar *msg); -static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data); -static GaimStatus * get_status_for(GaimBuddy *buddy); -static void create_tables(void); -static gboolean create_database_connection(void); -static void destroy_database_connection(void); -static guint word_count(const gchar *string); -static gboolean last_message_time_in_range(CapStatistics *statistics, gdouble max_difference); -static gboolean last_seen_time_in_range(CapStatistics *statistics, gdouble max_difference); -static void insert_status_change(CapStatistics *statistics); -static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status); -static void insert_word_count(const char *sender, const char *receiver, guint count); - -/* Gaim Signal Handlers */ -static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message); -static void received_im_msg(GaimAccount *account, char *sender, char *message, - GaimConversation *conv, GaimMessageFlags flags); -static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status); -static void buddy_signed_on(GaimBuddy *buddy); -static void buddy_signed_off(GaimBuddy *buddy); -static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle); -static void blist_node_extended_menu(GaimBlistNode *node, GList **menu); -static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full); -static void signed_on(GaimConnection *gc); -static void signed_off(GaimConnection *gc); - -/* Call backs */ -void display_statistics_action_cb(GaimBlistNode *node, gpointer data); +gboolean _sqlite_initialized; /* Prefs UI */ typedef struct _CapPrefsUI CapPrefsUI; -struct _CapPrefsUI { +struct _CapPrefsUI { GtkWidget *ret; - GtkWidget *db_vbox; GtkWidget *cap_vbox; GtkWidget *table_layout; - GtkWidget *driver_vbox; - GtkWidget *driver_select_hbox; - GtkWidget *driver_choice; - GtkWidget *driver_label; - GtkWidget *driver_config_hbox; - GtkWidget *driver_config; - GtkWidget *driver_connect_button; - - GtkWidget *dbd_label; - GtkWidget *dbd_input; - GtkWidget *dbd_hbox; - GtkWidget *dbd_button; - GtkWidget *threshold_label; GtkWidget *threshold_input; GtkWidget *threshold_minutes_label; @@ -146,18 +76,56 @@ GtkWidget *last_seen_minutes_label; }; -static GtkWidget * get_config_frame(GaimPlugin *plugin); +static void generate_prediction(CapStatistics *statistics); +static double generate_prediction_for(GaimBuddy *buddy); +static CapStatistics * get_stats_for(GaimBuddy *buddy); +static void destroy_stats(gpointer data); +static void insert_cap_msg_count_success(const char *buddy_name, const char *account, const char *protocol, int minute); +static void insert_cap_status_count_success(const char *buddy_name, const char *account, const char *protocol, const char *status_id); +static void insert_cap_msg_count_failed(const char *buddy_name, const char *account, const char *protocol, int minute); +static void insert_cap_status_count_failed(const char *buddy_name, const char *account, const char *protocol, const char *status_id); +static void insert_cap_success(CapStatistics *stats); +static void insert_cap_failure(CapStatistics *stats); +static gboolean max_message_difference_cb(gpointer data); +/* Gaim Signal Handlers */ +//sent-im-msg +static void sent_im_msg(GaimAccount *account, const char *receiver, const char *message); +//received-im-msg +static void received_im_msg(GaimAccount *account, char *sender, char *message, GaimConversation *conv, GaimMessageFlags flags); +//buddy-status-changed +static void buddy_status_changed(GaimBuddy *buddy, GaimStatus *old_status, GaimStatus *status); +//buddy-signed-on +static void buddy_signed_on(GaimBuddy *buddy); +//buddy-signed-off +static void buddy_signed_off(GaimBuddy *buddy); +static void buddy_idle(GaimBuddy *buddy, gboolean old_idle, gboolean idle); +static void blist_node_extended_menu(GaimBlistNode *node, GList **menu); +//drawing-tooltip +static void drawing_tooltip(GaimBlistNode *node, GString *text, gboolean full); +//signed-on +static void signed_on(GaimConnection *gc); +//signed-off +static void signed_off(GaimConnection *gc); +static void reset_all_last_message_times(gpointer key, gpointer value, gpointer user_data); +static GaimStatus * get_status_for(GaimBuddy *buddy); +static void create_tables(); +static gboolean create_database_connection(); +static void destroy_database_connection(); +static guint word_count(const gchar *string); +static void insert_status_change(CapStatistics *statistics); +static void insert_status_change_from_gaim_status(CapStatistics *statistics, GaimStatus *status); +static void insert_word_count(const char *sender, const char *receiver, guint count); +void display_statistics_action_cb(GaimBlistNode *node, gpointer data); +static gboolean plugin_load(GaimPlugin *plugin); +static void add_plugin_functionality(GaimPlugin *plugin); +static void cancel_conversation_timeouts(gpointer key, gpointer value, gpointer user_data); +static void remove_plugin_functionality(GaimPlugin *plugin); +static void write_stats_on_unload(gpointer key, gpointer value, gpointer user_data); +static gboolean plugin_unload(GaimPlugin *plugin); +static CapPrefsUI * create_cap_prefs_ui(); static void cap_prefs_ui_destroy_cb(GtkObject *object, gpointer user_data); -static CapPrefsUI * create_cap_prefs_ui(void); - -static void driver_choice_changed_cb(GtkComboBox *widget, gpointer user_data); -static void driver_config_expanded_cb(GObject *object, GParamSpec *param_spec, gpointer user_data); -static void connect_toggled_cb(GtkToggleButton *togglebutton, gpointer user_data); static void numeric_spinner_prefs_cb(GtkSpinButton *spinbutton, gpointer user_data); -static void driver_location_verify_cb(GtkButton *button, gpointer user_data); -static gboolean text_entry_prefs_cb(GtkWidget *widget, GdkEventFocus *event, gpointer user_data); - -static void set_driver_choice_options(GtkComboBox *chooser); -static GtkWidget * get_mysql_config(void); +static GtkWidget * get_config_frame(GaimPlugin *plugin); +static void init_plugin(GaimPlugin *plugin); #endif