Worldon: Photo Modelを引数に取るcompose spellを追加
↓こういう話があったので
金具✅: "確かに他のプラグインから使うことを考えるとphoto modelを受け取るcompose spel…" - 金具 *1
↓こういったものを追加した。
具体的に何をしようとしているのかわからないけど、もしかしたら、Plugin::Worldon::API.call()
の引数で直接PhotoModelを受け取りたいということなのかもしれない。
API.call()
はMikuTwitter::ApiCallSupport
とは違い、httpclient
の薄いラッパとして作っている*2*3。PhotoModelを受け取る場合、file_keysの処理を拡張するのがいいかもしれない。つまりパラメータに普通にPhotoModelのオブジェクトを入れてもらって、特別扱いする。
この❝特別扱い❞にはいくつかやり方が考えられる。
httpclientのドキュメントには、
When the given method is 'POST' and the given body contains a file as a value, it will be posted as a multipart/form-data. www.rubydoc.info
とあるので、Photo Modelが持っているキャッシュファイルが取り出せるなら、その方がよさそう。
実は'file'ではなくIO
が要件であるなら、photo.blob
をStringIO
か何かでwrapしてしまうという手もある。
httpclientで明示的にmultipart/form-data
を指定できるなら、それをやった上で、そのキーにphoto.blob
を渡してやればよい。
今回のspellでは、core/plugin/libnotify/notify-send.rb
で行われているように、mikutterのTMPDIRに一旦書き出してから渡すという方法をパクっとっている。これをAPI.call()
側でやればいいじゃないか、とも思う。
別の話題として、Mastodonは4つまで画像を添付できるので、spellも複数のPhoto Modelを受け取れるべきかもしれない。しかし、spellの引数はmodel slugのみをSet
に入れて比較するようなので、複数個指定しても1個のものと区別できない気がする。:photo_model_list
みたいな名前のPhoto Modelを複数内包するモデルを作って、それを引数に取るとか、あるいはspellの判定の方を拡張してdefspellで[:photo]
と渡されたら:photo
のArray
であると認識するようにするとか、そういうことがあるなら話は別だけど、いずれもコアプラグインの範疇なので、こちらだけで考えていても仕方ない。
適当に実装してしまったけど、Worldon内部では使わない機能なので、もうちょっと詳しく話を聞いたり仕様を考えたりした方がよかったかもしれない。