#include #include #include #include #include #include "structures.h" #include "functions.h" #include "vars.h" // most of these functions are SQLITE3 callbacks functions, their prototypes are imposed. see SQLITE3 api for more informations /*---------------------------------------------------------------- * AccountsInMailbox * * * * Append accounts into the account tree * * * * --------------------------------------------------------------*/ int AccountsInMailbox(void *NotUsed, int argc, char **argv, char **azColName) { g_sprintf(Widgets.Text, "%s", argv[1]); gtk_tree_store_append(Widgets.TreeStore, &Widgets.Iter2, &Widgets.Iter); gtk_tree_store_set(Widgets.TreeStore, &Widgets.Iter2,BMP_COLUMN, Widgets.PixBufAcc,TEXT_COLUMN, Widgets.Text, ID_COLUMN, argv[0], -1); return 0; } /*---------------------------------------------------------------- * Mailboxes * * * * Append mail boxes into the account tree * * * * --------------------------------------------------------------*/ int Mailboxes(void *NotUsed, int argc, char **argv, char **azColName) { int rc; char *zErrMsg = 0; g_sprintf(Widgets.Text, "Mailbox %s", argv[0]); gtk_tree_store_append(Widgets.TreeStore, &Widgets.Iter, NULL); gtk_tree_store_set(Widgets.TreeStore, &Widgets.Iter,BMP_COLUMN, Widgets.PixBufBox,TEXT_COLUMN, Widgets.Text, ID_COLUMN, argv[0], -1); Widgets.Requete = g_strdup_printf("SELECT ROWID,name FROM accounts WHERE smtpserver='%s'", argv[0]); rc = sqlite3_exec(Widgets.db, Widgets.Requete, AccountsInMailbox, 0, &zErrMsg); if( rc!=SQLITE_OK ) { GtkError(g_strdup_printf("SQL error: %s\n", zErrMsg), 0); sqlite3_free(zErrMsg); } gtk_tree_view_expand_all(GTK_TREE_VIEW(Widgets.TreeView)); return 0; } /*---------------------------------------------------------------- * ShowMailsList * * * * Append mails into the mail list * * * * --------------------------------------------------------------*/ int ShowMailsList(void *NotUsed, int argc, char **argv, char **azColName) { gtk_list_store_append (GTK_LIST_STORE (Widgets.ListStore), &Widgets.Iter); gtk_list_store_set(GTK_LIST_STORE (Widgets.ListStore),&Widgets.Iter, FROM_COLUMN, argv[2], SUBJECT_COLUMN, argv[6], DATE_COLUMN, argv[5], MAIL_ID_COLUMN, argv[0], -1); return 0; } /*---------------------------------------------------------------- * ShowMail * * * * Show the mail in the reading pane * * * * --------------------------------------------------------------*/ int ShowMail(void *NotUsed, int argc, char **argv, char **azColName) { GtkTextBuffer *MailBuffer; gchar *Label; Widgets.Tr.ToEmail = ""; Widgets.Tr.CCEmail = ""; Widgets.Tr.Subject = g_strdup_printf("Tr: %s", argv[5]); Widgets.Tr.Text = g_strdup_printf("\n\n\n\n---------- %s has written... ----------\n\n%s", argv[1], argv[6]); Widgets.Answer.ToEmail = g_strdup_printf("%s", argv[1]); Widgets.Answer.CCEmail = ""; Widgets.Answer.Subject = g_strdup_printf("Re: %s", argv[5]); Widgets.Answer.Text = g_strdup_printf("\n\n%s", argv[6]); Label = g_strdup_printf("Subject: %s\nFrom: %s\nDate: %s\nTo: %s\nCC: %s", argv[5], argv[1], argv[4], argv[2], argv[3]); gtk_label_set_text(GTK_LABEL(Widgets.RightLabel), Label); MailBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Widgets.Rig)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(MailBuffer), argv[6], -1); return 0; } /*---------------------------------------------------------------- * AccountSelected * * * * Callback on "clicked" event on an account: we wanna see * * the mail list * * * * --------------------------------------------------------------*/ int AccountSelected(GtkTreeView *treeview,gboolean arg1,gpointer user_data) { int rc; char *zErrMsg = 0; gchar *name; GtkTextBuffer *MailBuffer; Widgets.TreeModel = GTK_TREE_MODEL(Widgets.TreeStore); gtk_widget_set_sensitive(Widgets.ButtonReceive, 1); gtk_widget_set_sensitive(Widgets.ButtonNew, 1); gtk_widget_set_sensitive(Widgets.ButtonAnswer, 0); gtk_widget_set_sensitive(Widgets.ButtonTrans, 0); gtk_widget_set_sensitive(Widgets.ButtonDelete, 0); gtk_widget_set_sensitive(Widgets.ItemNew, 1); gtk_widget_set_sensitive(Widgets.ItemTrans, 0); gtk_widget_set_sensitive(Widgets.ItemAnswer, 0); gtk_widget_set_sensitive(Widgets.ItemDelete, 0); gtk_label_set_text(GTK_LABEL(Widgets.RightLabel), "Subject: \nFrom: \nDate: \nTo: \nCC:"); MailBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Widgets.Rig)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(MailBuffer), "", -1); if(gtk_tree_selection_get_selected(Widgets.TreeSelection, &Widgets.TreeModel, &Widgets.Iter)) { gtk_tree_model_get(Widgets.TreeModel, &Widgets.Iter, ID_COLUMN, &name, -1); Widgets.Requete = g_strdup_printf("SELECT ROWID,* FROM mails WHERE account='%s'", name); Widgets.CurrentAccount = (char*)name; gtk_list_store_clear(GTK_LIST_STORE(Widgets.ListStore)); rc = sqlite3_exec(Widgets.db2, Widgets.Requete, ShowMailsList, 0, &zErrMsg); if(rc!=SQLITE_OK) { GtkError(g_strdup_printf("SQL error: %s\n", zErrMsg), 0); sqlite3_free(zErrMsg); } Widgets.Requete = g_strdup_printf("SELECT * FROM accounts WHERE ROWID='%s'", name); rc = sqlite3_exec(Widgets.db, Widgets.Requete, GetAccInfos, 0, &zErrMsg); if( rc!=SQLITE_OK ) { GtkError(g_strdup_printf("SQL error: %s\n", zErrMsg), 0); sqlite3_free(zErrMsg); } } return 0; } /*---------------------------------------------------------------- * MailSelected * * * * Callback function on "clicked" event on a mail: we wanna * * see the mail in the reading pane * * * * --------------------------------------------------------------*/ int MailSelected(GtkTreeView *treeview,gboolean arg1,gpointer user_data) { int rc; gchar *name; char *zErrMsg = 0; gtk_widget_set_sensitive(Widgets.ButtonNew, 1); gtk_widget_set_sensitive(Widgets.ButtonAnswer, 1); gtk_widget_set_sensitive(Widgets.ButtonTrans, 1); gtk_widget_set_sensitive(Widgets.ButtonDelete, 1); gtk_widget_set_sensitive(Widgets.ItemNew, 1); gtk_widget_set_sensitive(Widgets.ItemTrans, 1); gtk_widget_set_sensitive(Widgets.ItemAnswer, 1); gtk_widget_set_sensitive(Widgets.ItemDelete, 1); Widgets.ListModel = GTK_TREE_MODEL(Widgets.ListStore); if(gtk_tree_selection_get_selected(Widgets.ListSelection, &Widgets.ListModel, &Widgets.Iter)) { gtk_tree_model_get(Widgets.ListModel, &Widgets.Iter, MAIL_ID_COLUMN, &name, -1); Widgets.MailId = (char*) name; Widgets.Requete = g_strdup_printf("SELECT * FROM mails WHERE ROWID='%s'", name); rc = sqlite3_exec(Widgets.db2, Widgets.Requete, ShowMail, 0, &zErrMsg); if( rc!=SQLITE_OK ) { GtkError(g_strdup_printf("SQL error: %s\n", zErrMsg), 0); sqlite3_free(zErrMsg); } } return 0; } /*---------------------------------------------------------------- * AccountsInMailbox * * * * Append accounts in the account tree * * * * --------------------------------------------------------------*/ int ListAccounts(void *NotUsed, int argc, char **argv, char **azColName) { g_sprintf(Widgets.Text, "%s", argv[1]); gtk_list_store_append(GTK_LIST_STORE(Widgets.ListAccounts), &Widgets.Iter3); gtk_list_store_set(GTK_LIST_STORE(Widgets.ListAccounts), &Widgets.Iter3, 0, Widgets.Text, 1, argv[0], -1); return 0; } /*---------------------------------------------------------------- * AccountInListSelected * * * * Callback on "clicked" event in the account manager * * We need informations about the account selected * * --------------------------------------------------------------*/ int AccountInListSelected(GtkTreeView *treeview,gboolean arg1,gpointer user_data) { int rc; char *zErrMsg = 0; gchar *name; Widgets.ModelAccounts = GTK_TREE_MODEL(Widgets.ListAccounts); if(gtk_tree_selection_get_selected(Widgets.AccountsSelection, &Widgets.ModelAccounts, &Widgets.Iter3)) { gtk_tree_model_get(Widgets.ModelAccounts, &Widgets.Iter3, 1, &name, -1); Widgets.NewAccount.Id = (char*)name; Widgets.Requete = g_strdup_printf("SELECT * FROM accounts WHERE ROWID='%s'", name); rc = sqlite3_exec(Widgets.db, Widgets.Requete, AccountInfos, 0, &zErrMsg); if( rc!=SQLITE_OK ) { GtkError(g_strdup_printf("SQL error: %s\n", zErrMsg), 0); sqlite3_free(zErrMsg); } } else { Widgets.NewAccount.Id = ""; Widgets.NewAccount.Name = ""; Widgets.NewAccount.Email = ""; Widgets.NewAccount.POPServer = ""; Widgets.NewAccount.SMTPServer = ""; Widgets.NewAccount.User = ""; Widgets.NewAccount.Passwd = ""; } return 0; } /*---------------------------------------------------------------- * AccountInfos * * * * SQL callback to get informations about the selected account * * --------------------------------------------------------------*/ int AccountInfos(void *NotUsed, int argc, char **argv, char **azColName) { Widgets.NewAccount.Name = g_strdup_printf("%s", argv[0]); Widgets.NewAccount.Email = g_strdup_printf("%s", argv[1]); Widgets.NewAccount.POPServer = g_strdup_printf("%s", argv[2]); Widgets.NewAccount.SMTPServer = g_strdup_printf("%s", argv[3]); Widgets.NewAccount.User = g_strdup_printf("%s", argv[4]); Widgets.NewAccount.Passwd = g_strdup_printf("%s", argv[5]); return 0; } /*---------------------------------------------------------------- * GetAccInfos * * * * SQL callback to get informations about the selected account * * --------------------------------------------------------------*/ int GetAccInfos(void *NotUsed, int argc, char **argv, char **azColName) { Widgets.AccInfos.Name = g_strdup_printf("%s", argv[0]); Widgets.AccInfos.Email = g_strdup_printf("%s", argv[1]); Widgets.AccInfos.POPServer = g_strdup_printf("%s", argv[2]); Widgets.AccInfos.SMTPServer = g_strdup_printf("%s", argv[3]); Widgets.AccInfos.User = g_strdup_printf("%s", argv[4]); Widgets.AccInfos.Passwd = g_strdup_printf("%s", argv[5]); return 0; }