aboutsummaryrefslogtreecommitdiff
path: root/PLUGIN.ja.txt
blob: db11f5a1aeb9013e4e450f10bfefe82ae7842ef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
Sylpheed プラグイン仕様
=======================

Sylpheed のプラグイン機構の構成は以下のようになっています。

 +----------+    +----------------------+     +-----------+
 | Sylpheed |----| libsylpheed-plugin-0 |--+--| Plug-in A |
 +----------+    +----------------------+  |  +-----------+
Sylpheed 本体    プラグインインタフェース  |  プラグイン DLL
                 ライブラリ             +--+
        |        +------------+         |  |  +-----------+
        +--------| libsylph-0 |---------+  +--| Plug-in B |
                 +------------+               +-----------+
                 LibSylph メールライブラリ

Sylpheed は起動時にプラグインディレクトリにインストールされている
プラグイン DLL をメモリにロードします。

プラグインは libsylpheed-plugin-0 と libsylph-0 ライブラリで
提供されている API を通してのみ Sylpheed の機能にアクセスできます。

プラグイン API には、プラグインが直接呼び出す関数群と、
GObject のシグナル機構を利用して、特定のイベントが発生した場合に
コールバック関数を呼び出すものの2種類があります。

プラグイン機構は libsylph/sylmain.[ch] と src/plugin.[ch] で実装されて
います。


プラグイン API
==============

Sylpheed から利用する関数
-------------------------

-------------------------------------------------------------------------
void syl_plugin_signal_connect  (const gchar *name, GCallback callback,
                                 gpointer data);

SylPlugin オブジェクト(ライブラリ内部で保持)で利用できるシグナルに
接続します。シグナルを受け取るコールバック関数の仕様は通常の GObject と
同様です。
利用できるシグナルに関してはシグナルの一覧を参照してください。
-------------------------------------------------------------------------
void syl_plugin_signal_disconnect(gpointer func, gpointer data);

syl_plugin_signal_connect() で接続したシグナルを解除します。
-------------------------------------------------------------------------
void syl_plugin_signal_emit(const gchar *name, ...);

SylPlugin オブジェクトのシグナルを発行します。
-------------------------------------------------------------------------
gint syl_plugin_init_lib        (void);

libsylpheed-plugin-0 ライブラリの初期化を行います。
-------------------------------------------------------------------------
gint syl_plugin_load            (const gchar *file);

プラグイン DLL ファイルをメモリにロードします。
-------------------------------------------------------------------------
gint syl_plugin_load_all        (const gchar *dir);

指定したディレクトリ内のプラグイン DLL ファイルをメモリにロードします。
-------------------------------------------------------------------------
void syl_plugin_unload_all      (void);

ロードしたすべてのプラグインをアンロードします。
-------------------------------------------------------------------------
GSList *syl_plugin_get_module_list      (void);

現在メモリにロードされているプラグインのリストを取得します。
GModule 構造体へのポインタのリストが返ります。
リストはライブラリ内部で保持しているため、解放できません。
-------------------------------------------------------------------------
SylPluginInfo *syl_plugin_get_info      (GModule *module);

プラグインの情報を取得します。情報は SylPluginInfo 構造体で返ります。
-------------------------------------------------------------------------
gboolean syl_plugin_check_version       (GModule *module);

プラグインインタフェースのバージョンを比較し、互換性があるかどうかを
確認します。バージョンが一致する場合は TRUE 、一致しない場合は FALSE
が返ります。
-------------------------------------------------------------------------
gint syl_plugin_add_symbol              (const gchar *name, gpointer sym);

ライブラリにシンボル名とそれに関連付けられるポインタ値を登録します。
-------------------------------------------------------------------------
gpointer syl_plugin_lookup_symbol       (const gchar *name);

syl_plugin_add_symbol() で登録したシンボルを検索し、ポインタ値を返します。
-------------------------------------------------------------------------


プラグインが実装しなければならない関数
--------------------------------------

-------------------------------------------------------------------------
void plugin_load(void)

プラグインのロード時に Sylpheed から呼び出されます。
ここでプラグインの初期化処理などを行います。
-------------------------------------------------------------------------
void plugin_unload(void)

プラグインのアンロード時に Sylpheed から呼び出されます。
ここでプラグインの後処理などを行います。
-------------------------------------------------------------------------
SylPluginInfo *plugin_info(void)

プラグインの情報を格納する構造体を Sylpheed に返すための関数です。
通常は静的な構造体へのポインタを返します。
-------------------------------------------------------------------------
gint plugin_interface_version(void)

プラグイン API のインタフェースのバージョンを Sylpheed に返すための
関数です。プラグインでは通常は定数 SYL_PLUGIN_INTERFACE_VERSION を返し、
Sylpheed ではこの値を Sylpheed 本体側の値と比較し、互換性のあるバージョン
かどうかをチェックします。 Sylpheed 本体のプラグインインタフェースバージョン
はプラグインのプラグインインタフェースバージョン以上である必要があります。
また、インタフェースバージョンのメジャーバージョンが異なる場合も互換性は
なくなります。

例1: Sylpheed のプラグインインタフェースバージョンが 0x0102 で
     プラグインのプラグインインタフェースバージョンが 0x0100 の場合 OK
例2: Sylpheed のプラグインインタフェースバージョンが 0x0102 で
     プラグインのプラグインインタフェースバージョンが 0x0103 の場合 NG
-------------------------------------------------------------------------


プラグインから利用する関数
--------------------------

関数の一覧はヘッダファイル plugin.h を参照してください。


シグナルの一覧
--------------

* libsylpheed-plugin-0

以下のシグナルは syl_plugin_signal_connect() を呼び出して使用します。

例: syl_plugin_signal_connect("plugin-load", G_CALLBACK(plugin_load_cb), data);

-------------------------------------------------------------------------
void (* plugin_load)    (GObject *obj, GModule *module);

syl_plugin_load() でプラグインをロードしたときに発行されるシグナルです。
-------------------------------------------------------------------------
void (* plugin_unload)  (GObject *obj, GModule *module);

syl_plugin_unload_all() でプラグインをアンロードしたときに発行される
シグナルです。
-------------------------------------------------------------------------
void (* folderview_menu_popup)  (GObject *obj, gpointer ifactory);

FolderView でコンテキストメニューをポップアップしたときに発行される
シグナルです。
-------------------------------------------------------------------------
void (* summaryview_menu_popup)  (GObject *obj, gpointer ifactory);

SummaryView でコンテキストメニューをポップアップしたときに発行される
シグナルです。
-------------------------------------------------------------------------
void (* compose_created)        (GObject *obj, gpointer compose);

Compose メッセージ作成ウィンドウが作成されたときに発行されるシグナルです。
-------------------------------------------------------------------------
void (* compose_destroy)        (GObject *obj, gpointer compose);

Compose メッセージ作成ウィンドウが破棄される直前に発行されるシグナルです。
-------------------------------------------------------------------------
void (* textview_menu_popup)    (GObject *obj,
                                 GtkMenu *menu,
                                 GtkTextView *textview,
                                 const gchar *uri,
                                 const gchar *selected_text,
                                 MsgInfo *msginfo);

TextView でコンテキストメニューをポップアップするときに発行される
シグナルです。ここで渡された GtkMenu に対して任意のメニュー項目を
追加することができます。
メニューオブジェクトはメニューを開くたびに作成され、閉じられると自動的に
破棄されるため、毎回メニュー項目を追加する必要があります。

menu: コンテキストメニューオブジェクト
textview: GtkTextView オブジェクト
uri: URI の上でメニューを表示した場合その URI 文字列
selected_text: テキストビューでテキストが選択されている場合、その文字列
msginfo: テキストビューで表示されているメッセージの MsgInfo オブジェクト
-------------------------------------------------------------------------
gboolean (* compose_send)       (GObject        *obj,
                                 gpointer        compose,
                                 gint            compose_mode,
                                 gint            send_mode,
                                 const gchar    *msg_file,
                                 GSList         *to_list);

作成したメッセージが送信されようとするときに発行されるシグナルです。
FALSE を返すと、メッセージは通常通り送信されます。
TRUE を返すと、送信はキャンセルされます。

compose: Compose オブジェクト
compose_mode: ComposeMode enum
send_mode: 0: 即座に送信 1: 送信待ちに入れて後で送信
msg_file: 作成したメッセージファイルのパス
to_list: 宛先のリスト
-------------------------------------------------------------------------
void (* messageview_show)       (GObject        *obj,
                                 gpointer        msgview,
                                 MsgInfo        *msginfo,
                                 gboolean        all_headers);

メッセージを表示するときに発行されるシグナルです。

msgview: MessageView オブジェクト
msginfo: 表示された MsgInfo メッセージオブジェクト
all_headers: 全ヘッダ表示時は TRUE。一部のみ表示時は FALSE。
-------------------------------------------------------------------------
void (* inc_mail_start)         (GObject        *obj,
                                 PrefsAccount   *account);

受信開始時に発行されるシグナルです。

account: 受信対象のアカウント (PrefsAccount)
-------------------------------------------------------------------------
void (* inc_mail_finished)      (GObject        *obj,
                                 gint            new_messages);

受信終了時に発行されるシグナルです。

new_messages: 受信したメッセージ数
-------------------------------------------------------------------------
void (* prefs_common_open)      (GObject        *obj,
                                 GtkWidget      *window);

全般の設定ダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* prefs_account_open)     (GObject        *obj,
                                 PrefsAccount   *account,
                                 GtkWidget      *window);

アカウント設定ダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* prefs_filter_open)      (GObject        *obj,
                                 GtkWidget      *window);

振り分けルール設定ダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* prefs_filter_edit_open) (GObject        *obj,
                                 FilterRule     *rule,
                                 const gchar    *header,
                                 const gchar    *key,
                                 GtkWidget      *window);

振り分けルール編集ダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* prefs_template_open)    (GObject        *obj,
                                 GtkWidget      *window);

テンプレートダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* plugin_manager_open)    (GObject        *obj,
                                 GtkWidget      *window);

プラグインの管理ダイアログを開いたときに発行されるシグナルです。

window: ダイアログウィンドウ (GtkWindow)
-------------------------------------------------------------------------
void (* main_window_toolbar_changed) (GObject *obj);

メインウィンドウのツールバー変更時に発行されるシグナルです。
メインウィンドウのツールバーオブジェクトを取得する場合は
syl_plugin_main_window_get_toolbar() を使用してください。
-------------------------------------------------------------------------
void (* compose_toolbar_changed)     (GObject *obj, gpointer compose);

メッセージ作成ウィンドウのツールバー変更時に発行されるシグナルです。
メッセージ作成ウィンドウのツールバーオブジェクトを取得する場合は
syl_plugin_compose_get_toolbar() を使用してください。
-------------------------------------------------------------------------
void (* compose_attach_changed)     (GObject *obj, gpointer compose);

メッセージ作成ウィンドウ上の添付ファイルが変更された場合に発行される
シグナルです。現在の添付ファイルのリストを取得する場合は
syl_plugin_get_attach_list() を使用してください。

compose: Compose オブジェクト
-------------------------------------------------------------------------

* libsylph-0

以下のシグナルは g_signal_connect() の第一引数に syl_app_get() で得られる
GObject を渡して使用します。

例:

void init_done_cb(GObject *obj, gpointer data)
{
    ...
}

    g_signal_connect(syl_app_get(), "init-done", G_CALLBACK(init_done_cb),
                     data);

-------------------------------------------------------------------------
void (* init_done) (GObject *obj)

アプリケーションの初期化が完了した時点で発行されます。
-------------------------------------------------------------------------
void (* app_exit) (GObject *obj)

アプリケーションが終了する時に発行されます。
-------------------------------------------------------------------------
void (* app_force_exit) (GObject *obj)

アプリケーションが強制的(確認なし)に終了するときに発行されます。
(例: sylpheed --exit)
-------------------------------------------------------------------------
void (* add_msg) (GObject *obj, FolderItem *item, const gchar *file, guint num)

フォルダ item に番号 num のメッセージが追加された時に発行されます。
-------------------------------------------------------------------------
void (* remove_msg) (GObject *obj, FolderItem *item, const gchar *file,
                     guint num)

フォルダ item から番号 num のメッセージが削除される時に発行されます。
-------------------------------------------------------------------------
void (* remove_all_msg) (GObject *obj, FolderItem *item)

フォルダ item からすべてのメッセージが削除されるときに発行されます。
-------------------------------------------------------------------------
void (* remove_folder) (GObject *obj, FolderItem *item)

フォルダ item が削除されるときに発行されます。
-------------------------------------------------------------------------
void (* move_folder) (GObject *obj, FolderItem *item, const gchar *old_id,
                      const gchar *new_id)

フォルダ item が old_id から new_id に移動(リネーム)されるときに
発行されます。 old_id, new_id はフォルダ識別子文字列です。
-------------------------------------------------------------------------
void (* folderlist_updated) (GObject *obj)

フォルダ情報が変更され、フォルダリストを格納した folderlist.xml ファイルが
更新されたときに発行されます。
-------------------------------------------------------------------------
void (* account_updated) (GObject *obj)

アカウント情報が更新されたときに発行されるシグナルです。
ただし、 account_update_lock() によってロックされている場合は
発行されません。
-------------------------------------------------------------------------


サンプルプラグイン
==================

plugin ディレクトリ以下にサンプルプラグインがあります。これらのプラグインは
make install ではインストールされません。インストールするには
plugin/ 以下の各ディレクトリに入って make install-plugin を実行してください。

Test Plug-in
------------

test プラグインは Sylpheed プラグインの基本的な構造に加え、以下の処理を
行います。

- ロード時に標準出力に "test plug-in loaded!" という文字列を出力
- フォルダの一覧を取得し、標準出力に表示
- Sylpheed のバージョン文字列を取得し、標準出力に表示
- メインウィンドウを取得し、前面に出す
- フォルダビューの下にサブウィジェットを追加
- 「ツール」メニューに「Plugin test」メニュー項目を追加
- 「Plugin test」メニューを選択すると、「Click this button」という
  ボタンのみのウィンドウを表示し、クリックするとメッセージを出力
- アプリケーション初期化、終了、フォルダビューのコンテキストメニュー
  ポップアップ、メッセージ作成ウィンドウ作成、メッセージ作成ウィンドウ破棄
  のイベントを捕捉してメッセージを表示
- テキストビューのコンテキストメニュー表示イベントを捕捉してメニュー項目を追加

Attachment Tool Plug-in
-----------------------

添付ファイルつきのメッセージを操作するためのプラグインです。

詳細は plugin/attachment_tool/README を参照してください。


ライセンスについて
==================

Sylpheed 本体のライセンスは GPL であるため、 Sylpheed から動的に
読み込まれるプラグイン DLL は、 GPL の規定に基づき、 GPL または
GPL と互換性のあるライセンス(修正 BSD ライセンスなど)である必要が
あります。

プラグインに商用ライセンスなど他のライセンスを適用したい場合は、
そのモジュールを独立した実行ファイルにして、 DLL とプロセス間通信で
連携して動作させる必要があります。