マルチポストプラグインがportalに対応
mikutter マルチポストプラグイン - cobodoのブログ
GitHub - cobodo/mikutter-multiposter
portalを選択している場合、ダイアログを出さずにportalのPrimaryとSecondaryに投稿するコマンドを追加しました。
また、Secondaryのみに投稿するコマンドも追加しました。Alt+EnterでSecondaryに、Ctrl+Alt+Enterで両方に投稿するようにショートカットキーを設定すると、デフォルトのCtrl+Enterでの投稿と合わせて、わりと直感的に投稿先を切り替えられるようになります。
xkcdの画像をPhotoModelで開けるようにするプラグイン
defimageopener('xkcd', %r<\Ahttps?://xkcd\.com/[0-9]+>) do |display_url| connection = HTTPClient.new page = connection.get_content(display_url) next nil if page.empty? doc = Nokogiri::HTML(page) result = doc.css('#comic > img').first src = result.attribute('srcset').to_s.split(' ').first if src.start_with?('//') src = Diva::URI.new(display_url).scheme + ':' + src end open(src) end
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内部では使わない機能なので、もうちょっと詳しく話を聞いたり仕様を考えたりした方がよかったかもしれない。
mikutter BurntToastプラグイン
GitHub - cobodo/mikutter-burnt-toast
WSL上のmikutterからWindows10へ通知を送るプラグインです。タスクバーにあるフキダシのアレです。
できそうだったので勢いで作ってしまいました。
imgur.com の画像をPhotoModelで開けるようにするプラグイン
Plugin.create(:imgur) do defimageopener('imgur', %r<\Ahttps?://imgur\.com/[a-zA-Z0-9]+>) do |display_url| connection = HTTPClient.new page = connection.get_content(display_url) next nil if page.empty? doc = Nokogiri::HTML(page) result = doc.css('link[rel="image_src"]').first open(result.attribute('href').to_s) end end
WSLで通知を出すメモ
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Feature Request: Desktop Notifications · Issue #2466 · Microsoft/WSL · GitHub
> Install-Module -Name BurntToast
$ powershell.exe -command New-BurntToastNotification -Text ふぁぼっ # Windowsから通知が出る
BurntToastのオプションを調べて core/plugin/libnotify/notify-send.rb を改造する。 GitHub - Windos/BurntToast: Module for creating and displaying Toast Notifications on Microsoft Windows 10.
worldonに非互換な変更
どうやらWorldクラスのslugはそのプラグインのslugと一致していなければならなかったらしく、その修正が入りました。
world slugはplugin slugと一致していなければならない · Issue #15 · cobodo/mikutter-worldon · GitHub
この影響で、現在のmasterは過去にmikutterへ登録したアカウント情報と互換性がなくなっており、プラグインを更新してからmikutterを起動すると、登録されていたアカウントが除去されます*1。この場合、再度mikutter上でアカウント登録してください。datasource slug等はそのままなので、抽出タブの再設定などは必要ありません。アカウントを登録し直すだけでOKのはずです。
今までも微妙に非互換な変更は入れていましたが、アカウントが消えるというのは大きいと思ったので、こういった大きな変更があった時はGitHub wikiに更新履歴を記録することにしました。
Home · cobodo/mikutter-worldon Wiki · GitHub
細かい変更までいちいち書くことはしないので、気になる場合はコミットログを参照してください。
このことで困る人は現状ではほとんどいないと思います。思います。