続) Exaileのプラグイン

さてさて、前回に引き続き、Exaile用のリッピングプラグイン
について書きます。

Exaileのプラグインの作り方はExaileの開発元のホームページ(Trac)
にサンプル付きで解説されています。
また、Exaile本体のPythonソースコードも開発元のホームページで
全て見ることができます。


Exaileのプラグインを書くためには、だいたい次のような関数を
含むpythonスクリプトを書くことになります。

#
#
def initialize():
'''
この関数はプラグインがPluginManagerで有効にされた時に呼ばれます。
'''

#
#
def destroy():
'''
この関数はプラグインがPluginManagerで無効にされた場合に呼ばれます。
'''


#
#
def configure():
'''
この関数はプラグインの設定ボタンが押された場合に呼ばれます。
プラグインの設定ボタンというのは、PluginManagerにある"Configure"
    というボタンのことです。
'''

今回の私のプラグインの場合には、以下のような処理になります。

#
#
def initialize():
'''
(1) Exaileの本体にリッピング開始用のボタンをくっつける。
      →まだボタンがくっつれられていない場合のみ(重要)
  →destroy()でこのボタンは削除するので、ボタンは
 グローバルの変数に保持しておく。
      →今回はExaile本体のWidgetを名前で取得してボタンを
       くっつけたが、将来的にWidgetの名前が変わったら
       問題だなぁ。。
(2) リッピング開始用のボタンが押された場合の処理を関連づける。
(3) Exaile本体の表示を更新する。
'''

#
#
def destroy():
'''
(1) Exaileにくっつけたリッピング開始用ボタンを削除する。
(2) Exaile本体の表示を更新する。
'''

#
#
def configure():
'''
(1) 設定用のダイアログを表示する。
(2) 設定用のダイアログがOKボタンで閉じられた場合には、設定内容
を保存する。
      プラグイン用の設定を保存・取得する関数はExaileが提供してくれています。
(詳しいことは、下で)
'''


プラグインの設定を保存・取得する方法
 今回私が使用したものは次のものです。
 (他にもありますので、詳しくは本家のHPで)

(1)文字列の情報を保存・取得

 APP.settings.get_str(name,default,plugin=plugins.name(__file__))
 APP.settings.set_str(name,someStr,plugin=plugins.name(__file__))

 (2)整数値の情報を保存・取得

 APP.settings.get_int(name,default,plugin=plugins.name(__file__))
APP.settings.set_int(name,someVal,plugin=plugins.name(__file__))

 (3)論理値(True/False)を保存・取得

 APP.settings.get_boolean(name,default,plugin=plugins.name(__file__))
APP.settings.set_boolean(name,someFlag,plugin=plugins.name(__file__))

*補足*
 ・APP はExaile本体側で定義されている変数で、実際のところは
  ExaileWindowクラスです。プラグインはこの変数をいつでも参照できます。

 ・各関数の第1引数:name は設定項目名を表す文字列を指定します。
  Pythonでいうところの辞書のキーみたいな感じです。

 ・get_****()の第2引数:defaultには、デフォルト値を指定します。
  nameで指定した設定項目が存在しなかった場合には、この値が返されます。

 ・set_****()の第2引数:some**は設定すべき値を指定します。

 ・plugin=plugins.name(__file__)はお約束のようです。
  ここで指定したプラグイン用の設定として設定ファイルに書き込まれます。

ううむ、文章を書くのは疲れますね。。。
スクリプト書くのは疲れないのに。。笑)

さて、あとは自分のやりたい処理を書き加えていくだけです。
関数、クラスなどを使って実装していきます。
今回作成したスクリプトは、800行弱でした。

複数のファイルを使って1つのプラグインを作る方法
も本家サイトに紹介されているようなので、
独自クラスなどは別スクリプトにしたり、UIはgladeを使用する
ことで、すっきりした構成になると思いますが、それはまた別の機会に
しようと思います。(新しい機能の追加したくなったときとか)

今回作成したスクリプトはポケット倉庫@wikiに置いておくので
興味のある方はご覧になってください。

「ここ、どうなってる?」とか「こっちのほうがいいよ」など
ありましたら、どんどんコメントしてください。