プロジェクト

全般

プロフィール

バグ #1042

MessageMixinの:descriptionを書き換えても、本文の表示が変化しない

Satoshi Okuno7ヶ月前に追加. 6ヶ月前に更新.

ステータス:
レビュー待ち
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
MessageMixin

説明

MastodonにはCW(閲覧注意)と言う機能があって、初期状態ではメッセージの一部が隠れており、ボタンを押すことで全文が表示されるメッセージが作れます。

そんな感じの挙動をmikutterでも実現すべく、SubpartsIntractiveつきのメッセージを作って、ボタンを押すと本文が書き換わる感じの処理を作ろうとしました。
しかしながら、MessageMixinの:descriptionを書き換えてPlugin.call(:modify_message)しても、本文の表示が変化しませんでした。

調べると、MessageMixin::to_show()がメッセージ(から生成したPangoオブジェクト)をキャッシュしているのが原因とわかりました。

:descriptionに変化があったら、キャッシュを更新するようにしてみました。
マージご検討ください。

petitsurume

履歴

#1 toshi_a 初音7ヶ月前に更新

MessageMixin#to_showは、キャッシュとアンエスケープを行ってるんですね。両方とも完全にTwitterの都合なので、to_showをdescriptionのエイリアスにして、Message#to_showにこのような実装を入れるほうが良いと思います。
キャッシュについても、一度行われた投稿の本文は決して変わらないという前提が成立するサービスのほうが少ないと思うので、MessageMixinでは行わないほうが良いかと思います。

#2 Satoshi Okuno7ヶ月前に更新

コメントありがとうございます。
to_show()はdescriptionを返すのみに見直しました。
必要あれば子クラスでオーバーライドしてもらう感じで。

#3 toshi_a 初音7ヶ月前に更新

これだと、ツイートに<>&などが含まれているとエスケープされた状態で表示されてしまうので、Message#to_showを実装する必要がありますね

#4 Satoshi Okuno7ヶ月前に更新

#moguno中のレビューありがとうございます。

Twitterにはエスケープが必要なのは了解です。
下記の認識なのですが、齟齬あればご教示頂ければ。

MessageはMessageMixinをmixinしていないので、両者は無関係。
すなわち、Message::to_show()とMessageMixin::to_show()は別物(同じ実装がコピペされている状態)
そのため今回のパッチはMessageMixin::to_show()のみを処置して、Twitter側(Message)のエスケープ処理に影響を与えない感じにしてます。

#5 toshi_a 初音6ヶ月前に更新

  • ステータス新規 から レビュー待ち に変更
  • 担当者Satoshi Okuno にセット

すみません、確認し直しました。
問題なさそうなのでmasterとmergeしてブランチ topic/1042-message-mixin-to_show-no-longer-cache-value を作成しました。一応このブランチで確認してもらっていいですか。

他の形式にエクスポート: Atom PDF