バグ #1042
完了
MessageMixinの:descriptionを書き換えても、本文の表示が変化しない
Satoshi Okuno さんが7年以上前に追加.
6年以上前に更新.
説明
MastodonにはCW(閲覧注意)と言う機能があって、初期状態ではメッセージの一部が隠れており、ボタンを押すことで全文が表示されるメッセージが作れます。
そんな感じの挙動をmikutterでも実現すべく、SubpartsIntractiveつきのメッセージを作って、ボタンを押すと本文が書き換わる感じの処理を作ろうとしました。
しかしながら、MessageMixinの:descriptionを書き換えてPlugin.call(:modify_message)しても、本文の表示が変化しませんでした。
調べると、MessageMixin::to_show()がメッセージ(から生成したPangoオブジェクト)をキャッシュしているのが原因とわかりました。
:descriptionに変化があったら、キャッシュを更新するようにしてみました。
マージご検討ください。
petitsurume
ファイル
MessageMixin#to_showは、キャッシュとアンエスケープを行ってるんですね。両方とも完全にTwitterの都合なので、to_showをdescriptionのエイリアスにして、Message#to_showにこのような実装を入れるほうが良いと思います。
キャッシュについても、一度行われた投稿の本文は決して変わらないという前提が成立するサービスのほうが少ないと思うので、MessageMixinでは行わないほうが良いかと思います。
コメントありがとうございます。
to_show()はdescriptionを返すのみに見直しました。
必要あれば子クラスでオーバーライドしてもらう感じで。
これだと、ツイートに<>&などが含まれているとエスケープされた状態で表示されてしまうので、Message#to_showを実装する必要がありますね
#moguno中のレビューありがとうございます。
Twitterにはエスケープが必要なのは了解です。
下記の認識なのですが、齟齬あればご教示頂ければ。
MessageはMessageMixinをmixinしていないので、両者は無関係。
すなわち、Message::to_show()とMessageMixin::to_show()は別物(同じ実装がコピペされている状態)
そのため今回のパッチはMessageMixin::to_show()のみを処置して、Twitter側(Message)のエスケープ処理に影響を与えない感じにしてます。
- ステータス を 新規 から レビュー待ち に変更
- 担当者 を Satoshi Okuno にセット
すみません、確認し直しました。
問題なさそうなのでmasterとmergeしてブランチ topic/1042-message-mixin-to_show-no-longer-cache-value を作成しました。一応このブランチで確認してもらっていいですか。
本件大変遅くなりました。
Mastodonで会話した通り、少なくともmikutter 3.7ではdescriptionは更新されない前提と言うことで了解しました。
すみませんが、本チケットはクローズさせてください。
他の形式にエクスポート: Atom
PDF