Project

General

Profile

バグ #1042

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

Added by Satoshi Okuno about 3 years ago. Updated over 2 years ago.

Status:
却下
Priority:
通常
Assignee:
Target version:
プラグイン名:
MessageMixin
ブランチ:
クラッシュする:
No

Description

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

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

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

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

petitsurume


Files

#1

Updated by toshi_a 初音 about 3 years ago

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

#2

Updated by Satoshi Okuno about 3 years ago

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

#3

Updated by toshi_a 初音 about 3 years ago

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

#4

Updated by Satoshi Okuno about 3 years ago

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

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

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

#5

Updated by toshi_a 初音 about 3 years ago

  • Status changed from 新規 to レビュー待ち
  • Assignee set to Satoshi Okuno

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

#6

Updated by Satoshi Okuno over 2 years ago

  • Status changed from レビュー待ち to 却下

本件大変遅くなりました。

Mastodonで会話した通り、少なくともmikutter 3.7ではdescriptionは更新されない前提と言うことで了解しました。

すみませんが、本チケットはクローズさせてください。

Also available in: Atom PDF