MailPad開発記 DAY 4 - アカウントの作成

さて、libsylphと一緒に配布してくれているサンプルプログラムのlibsylph-send.cを見てみます。
このプログラムは、


$ libsylph-send message-file hogehoge@foo.com
というように、message-fileと宛先をパラメータで指定するようになっています。
message-fileは、Sylpheedで使用しているMH形式のファイルです。
アカウント情報はSylpheedの設定ファイルを読み込むようになっている模様。
今回のプログラムではウィンドウに入力したアカウント情報を使うので、
まずはそこを作りましょう。

callbacks.c

#ifdef HAVE_CONFIG_H
# include
#endif

#include
#include
#include
#include
#include

#include "callbacks.h"
#include "interface.h"
#include "support.h"


PrefsAccount *
set_account(GtkWidget *button)
{
PrefsAccount *ac = prefs_account_new();
/* SEND */
GtkEntry*entry_name=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_name");
GtkEntry*entry_address=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_address");
GtkEntry*entry_smtpserver=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_smtpserver");
GtkEntry*entry_port=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_port");
GtkCheckButton*checkbutton_issmtpauth=(GtkCheckButton*)lookup_widget((GtkWidget*)button, (gchar*)"checkbutton_issmtpauth");
GtkComboBox*combobox_smtpauth=(GtkComboBox*)lookup_widget((GtkWidget*)button, (gchar*)"combobox_smtpauth");
GtkEntry*entry_user=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_user");
GtkEntry*entry_pass=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_pass");
GtkComboBox*combobox_ssl=(GtkComboBox*)lookup_widget((GtkWidget*)button, (gchar*)"combobox_ssl");
/* POP3 */
GtkEntry*entry_pop3server=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_pop3server");
GtkEntry*entry_pop3port=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_pop3port");
GtkCheckButton*checkbutton_ispopbeforesmtp=(GtkCheckButton*)lookup_widget((GtkWidget*)button, (gchar*)"checkbutton_ispopbeforesmtp");
GtkEntry*entry_pop3user=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_pop3user");
GtkEntry*entry_pop3pass=(GtkEntry*)lookup_widget((GtkWidget*)button, (gchar*)"entry_pop3pass");
GtkComboBox*combobox_pop3ssl=(GtkComboBox*)lookup_widget((GtkWidget*)button, (gchar*)"combobox_pop3ssl");
GtkCheckButton*checkbutton_isusenonblockssl=(GtkCheckButton*)lookup_widget((GtkWidget*)button, (gchar*)"checkbutton_isusenonblockssl");
GtkCheckButton*checkbutton_isuseapop=(GtkCheckButton*)lookup_widget((GtkWidget*)button, (gchar*)"checkbutton_isapop");

ac->name=(gchar*)gtk_entry_get_text(entry_name);
ac->address=(gchar*)gtk_entry_get_text(entry_address);
ac->smtp_server=(gchar*)gtk_entry_get_text(entry_smtpserver);
ac->recv_server=(gchar*)gtk_entry_get_text(entry_pop3server);
ac->userid=(gchar*)gtk_entry_get_text(entry_pop3user);
ac->passwd=(gchar*)gtk_entry_get_text(entry_pop3pass);
ac->ssl_pop=(SSLType)gtk_combo_box_get_active(combobox_pop3ssl);
ac->ssl_smtp=(SSLType)gtk_combo_box_get_active(combobox_ssl);
ac->use_nonblocking_ssl=(gboolean)gtk_toggle_button_get_active((GtkToggleButton*)checkbutton_isusenonblockssl);
ac->use_apop_auth=(gboolean)gtk_toggle_button_get_active((GtkToggleButton*)checkbutton_isuseapop);
ac->use_smtp_auth=(gboolean)gtk_toggle_button_get_active((GtkToggleButton*)checkbutton_issmtpauth);
ac->smtp_auth_type=gtk_combo_box_get_active(combobox_smtpauth)==0?0:(SMTPAuthType)(1<<(gtk_combo_box_get_active(combobox_smtpauth)-1));
ac->smtp_userid=(gchar*)gtk_entry_get_text(entry_user);
ac->smtp_passwd=(gchar*)gtk_entry_get_text(entry_pass);
ac->pop_before_smtp=(gboolean)gtk_toggle_button_get_active((GtkToggleButton*)checkbutton_ispopbeforesmtp);
ac->set_smtpport=TRUE;
ac->smtpport=(gushort)atoi(gtk_entry_get_text(entry_port));
ac->set_popport=TRUE;
ac->popport=(gushort)atoi(gtk_entry_get_text(entry_pop3port));
ac->protocol=A_POP3;

return ac;
}

void
on_button_clicked (GtkButton *button, gpointer user_data)
{
syl_init();
set_debug_mode(TRUE);

PrefsAccount *ac = set_account((GtkWidget *)button);

syl_cleanup();
}


void
on_window_destroy (GtkObject *object,
gpointer user_data)
{
gtk_main_quit();
}

もうめちゃくちゃ見にくくて申し訳ないですが、
要は入力されているアカウント情報を、新規に作成したアカウント ac に格納しているだけです。
libsylphのprefs_account.hを参考にしながら進めてください。