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