compose - メッセージの作成 ------------------------------------------------------------------------------ ComposeMode typedef enum { COMPOSE_REPLY = 1, COMPOSE_REPLY_TO_SENDER = 2, COMPOSE_REPLY_TO_ALL = 3, COMPOSE_REPLY_TO_LIST = 4, COMPOSE_FORWARD = 5, COMPOSE_FORWARD_AS_ATTACH = 6, COMPOSE_NEW = 7, COMPOSE_REDIRECT = 8, COMPOSE_REEDIT = 9, COMPOSE_WITH_QUOTE = 1 << 16, COMPOSE_MODE_MASK = 0xffff } ComposeMode; compose_info_new() でメッセージ作成時のモードを指定するための型です。 COMPOSE_REPLY: 通常の返信 COMPOSE_REPLY_TO_SENDER: 差出人に返信(Reply-Toを無視する) COMPOSE_REPLY_TO_ALL: 全員に返信 COMPOSE_REPLY_TO_LIST: 差出人よりメーリングリストを優先して返信 COMPOSE_FORWARD: 通常の転送 COMPOSE_FORWARD_AS_ATTACH: 添付として転送 COMPOSE_NEW: 新規作成 COMPOSE_REDIRECT: 手を加えずに転送(リダイレクト) COMPOSE_REEDIT: 再編集 COMPOSE_WITH_QUOTE: アプリケーションが引用を制御するためのもので、 LibSylphでは使用されません。 COMPOSE_MODE_MASK: LibSylphがメッセージ作成モードに使用するフラグのマスク ------------------------------------------------------------------------------ #define COMPOSE_MODE(mode) ((mode) & COMPOSE_MODE_MASK) LibSylphが使用するメッセージ作成モードのみを取り出します。 ------------------------------------------------------------------------------ #define COMPOSE_QUOTE_MODE(mode) ((mode) & COMPOSE_WITH_QUOTE) アプリケーションが使用する引用モードを取り出します。 ------------------------------------------------------------------------------ ComposeFlags typedef enum { COMPOSE_OUT_MIME_PROLOG = 1 << 0, COMPOSE_OUT_DISPOSITION_INLINE = 1 << 1, COMPOSE_PROTECT_TRAILING_SPACE = 1 << 2, COMPOSE_DRAFT_MODE = 1 << 3 } ComposeFlags; メッセージ生成時の動作を指定するためのフラグです (FIXME: 現在ComposeInfo::flagsで直接指定)。 COMPOSE_OUT_MIME_PROLOG: マルチパートMIMEメッセージの場合プロローグメッセージを 出力するかどうかを決定します。 COMPOSE_OUT_DISPOSITION_INLINE: マルチパートMIMEメッセージの場合本文のパートを Content-Disposition: inline として出力するか どうかを決定します。 COMPOSE_PROTECT_TRAILING_SPACE: 行末の空白を保護するために quoted-printable または base64 を使用するかどうかを決定します。 COMPOSE_DRAFT_MODE: 指定した場合は草稿モードになります。 ------------------------------------------------------------------------------ ComposeInfo struct _ComposeInfo { ComposeMode mode; ComposeFlags flags; /* reference of redirect or reedit */ MsgInfo *targetinfo; /* reference of reply */ MsgInfo *replyinfo; /* extra information */ gchar *ref_replyto; gchar *ref_cc; gchar *ref_bcc; gchar *ref_newsgroups; gchar *ref_followup_to; gchar *ref_ml_post; /* composing message information */ gchar *to; gchar *cc; gchar *bcc; gchar *replyto; gchar *newsgroups; gchar *followup_to; gchar *subject; gchar *inreplyto; gchar *references; gchar *msgid; gchar *boundary; gchar *header_encoding; gchar *body_encoding; EncodingType ctencoding; gchar *body_text; GList *attach_list; /* actually sent address list */ GSList *to_list; GSList *newsgroup_list; PrefsAccount *account; /* callback functions for pre/post-process */ ComposePreFunc preprocess_func; ComposePostFunc postprocess_func; /* user data */ gpointer data; }; 作成するメッセージを管理するための構造体です。 compose_info_new() で作成し、 適切な設定を行った後 compose_write_to_file() を呼び出してメッセージを出力 します。 compose_info_free() で解放します。 ------------------------------------------------------------------------------ ComposeAttachInfo struct _ComposeAttachInfo { gchar *file; gchar *content_type; EncodingType encoding; gchar *name; gsize size; }; 添付ファイルを表す構造体です。 compose_attach_info_new() で作成し、 compose_attach_info_free() で解放します。 ------------------------------------------------------------------------------ gint (*ComposePreFunc) (ComposeInfo *compose, gpointer user_data); compose_write_to_file() から呼ばれるコールバック関数の型です。 compose: ComposeInfo構造体へのポインタ user_data: ComposeInfoにセットされているユーザデータ 戻り値: -1 を返せば compose_write_to_file() が処理を中断してエラーで返ります。 ------------------------------------------------------------------------------ gint (*ComposePostFunc) (ComposeInfo *compose, const gchar *file, gpointer user_data); compose_write_to_file() から呼ばれるコールバック関数の型です。 compose: ComposeInfo構造体へのポインタ file: 出力されたメッセージファイルのパス(改行コード変換前) user_data: ComposeInfoにセットされているユーザデータ 戻り値: -1 を返せば compose_write_to_file() が処理を中断してエラーで返ります。 ------------------------------------------------------------------------------ ComposeInfo *compose_info_new (PrefsAccount *account, ComposeMode mode); メッセージを作成するためのComposeInfo構造体を生成します。 生成したComposeInfo構造体は compose_info_free() で解放する必要があります。 account: メッセージ作成時に使用するアカウント mode: メッセージ作成モード(新規、返信など) 戻り値: 新しいComposeInfo構造体へのポインタ ------------------------------------------------------------------------------ void compose_info_free (ComposeInfo *compose); ComposeInfo構造体を破棄します。 compose: ComposeInfo構造体へのポインタ ------------------------------------------------------------------------------ ComposeAttachInfo *compose_attach_info_new (const gchar *file, const gchar *content_type, EncodingType encoding, const gchar *name, gsize size); 添付ファイルを表すComposeAttachInfo構造体を生成します。 ComposeAttachInfo構造体はcompose_attach_info_free()で解放する必要があります。 file: 添付ファイルのフルパス content_type: ファイルのContent-Type encoding: 添付ファイルのパートのContent-Transfer-Encoding name: ファイル名(実際のファイルとは異なっていてもよい) size: ファイルのサイズ 戻り値: 新しいComposeAttachInfo構造体へのポインタ ------------------------------------------------------------------------------ void compose_attach_info_free (ComposeAttachInfo *ainfo); ComposeAttachInfo構造体を破棄します。 ainfo: ComposeAttachInfo構造体へのポインタ ------------------------------------------------------------------------------ gint compose_parse_header (ComposeInfo *compose, MsgInfo *msginfo); メッセージ作成時に参照するメッセージを設定します。 メッセージの内容をスキャンし、ComposeInfo構造体に情報をセットします。 compose_info_new() で指定した mode によって動作は変わります。 compose: ComposeInfo構造体へのポインタ msginfo: 参照するメッセージ情報 戻り値: メッセージの読み込みに成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_set_headers (ComposeInfo *compose, const gchar *to, const gchar *cc, const gchar *bcc, const gchar *replyto, const gchar *subject); ComposeInfoに作成するメッセージのヘッダ情報を指定します。 文字コードは UTF-8 である必要があります。 compose: ComposeInfo構造体へのポインタ to: To(宛先) cc: Cc(カーボンコピー) bcc: Bcc(ブラインドカーボンコピー) replyto: Reply-To(返信先) subject: Subject(件名) 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_set_news_headers (ComposeInfo *compose, const gchar *newsgroups, const gchar *followup_to); ネットニュースのためのヘッダ情報を指定します。 文字コードは UTF-8 である必要があります。 compose: ComposeInfo構造体へのポインタ newsgroups: Newsgroups(投稿先のニュースグループ名) followup_to: Followup-To(フォロー先) 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_set_body (ComposeInfo *compose, const gchar *body); ComposeInfoに作成するメッセージの本文を指定します。 文字コードは UTF-8 である必要があります。 compose: ComposeInfo構造体へのポインタ body: 本文(UTF-8) 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_set_encoding (ComposeInfo *compose, const gchar *header_encoding, const gchar *body_encoding); ヘッダに使用する文字エンコーディングと本文に使用する文字エンコーディングを 指定します。 compose: ComposeInfo構造体へのポインタ header_encoding: ヘッダに使用する文字エンコーディング body_encoding: 本文に使用する文字エンコーディング 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_set_attachments (ComposeInfo *compose, GList *attach_list); 添付ファイルのリストをComposeAttachInfo構造体のリストで指定します。 compose: ComposeInfo構造体へのポインタ attach_list: ComposeAttachInfo構造体へのポインタのリスト 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_write_to_file (ComposeInfo *compose, const gchar *out_file, GError *error); ComposeInfo構造体に指定した情報からメッセージを生成し、 指定したファイルに書き出します。 compose: ComposeInfo構造体へのポインタ out_file: 出力するファイルのフルパス error: NULLでない場合はエラーの詳細を返します(今は無視されます)。 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_redirect_write_to_file (ComposeInfo *compose, const gchar *out_file, GError *error); ComposeInfo::targetinfo で指定したメッセージをリダイレクト(手を加えずに転送) します。 リダイレクト専用のヘッダが作成されます。 compose_set_body() による本文の指定は無視されます。 それ以外は compose_write_to_file() と同様です。 compose: ComposeInfo構造体へのポインタ out_file: 出力するファイルのフルパス error: NULLでない場合はエラーの詳細を返します(今は無視されます)。 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_remove_reedit_target (ComposeInfo *compose); 再編集に使用したメッセージを削除します。 具体的には Compose::targetinfo で示されるメッセージを削除します。 compose: ComposeInfo構造体へのポインタ 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ gint compose_queue (ComposeInfo *compose, const gchar *file); compose_write_to_file() で作成したメッセージファイルを送信待ちフォルダに 入れます。 ComposeInfo の内容と file の内容は対応している必要があります。 送信待ちフォルダに入れたメッセージは send_message_queue_all() などで 送信できます(注: 現在未実装)。 compose: ComposeInfo構造体へのポインタ file: compose_write_to_file() で作成したメッセージファイルのフルパス 戻り値: 成功した場合は0、失敗した場合は-1を返します。 ------------------------------------------------------------------------------ void compose_generate_msgid (ComposeInfo *compose, gchar *buf, gint len); ComposeInfo の内容から Message-Id 文字列を生成します。 Message-Idはメッセージファイルの作成時に自動的に生成されるので、 通常は使用する必要はありません。 compose: ComposeInfo構造体へのポインタ buf: 文字列のバッファ len: バッファ buf のサイズ ------------------------------------------------------------------------------ void compose_set_preprocess_func (ComposeInfo *compose, ComposePreFunc func); メッセージ作成時に前処理として呼ばれるコールバック関数を指定します。 func は ComposeInfo 構造体へのポインタとユーザデータが渡されて呼び出されます。 func は送信エンコーディングが決定され、本文のエンコーディングを変換した後の タイミングで呼ばれるため、ここで送信エンコーディングや本文の内容のチェックと その書き換えを行うことができます。 func が -1 を返せば処理を中断することができます(compose_write_to_file() は エラーで返ります)。 compose: ComposeInfo構造体へのポインタ func: ComposePreFunc型の関数ポインタ ------------------------------------------------------------------------------ void compose_set_postprocess_func (ComposeInfo *compose, ComposePostFunc func); メッセージ作成時に後処理として呼ばれるコールバック関数を指定します。 func は ComposeInfo 構造体へのポインタと、出力されたファイルのパス、そして ユーザデータが渡されて呼び出されます。 func はすべての出力処理が終わり、改行コードをLFに変換する直前で呼び出される ため、ここで出力されたファイルの書き換えなどを行うことができます。 func が -1 を返せば処理を中断することができます(compose_write_to_file() は エラーで返ります)。 compose: ComposeInfo構造体へのポインタ func: ComposePostFunc型の関数ポインタ