機能 #1164
完了Score
0%
説明
現在、TwitterのExtended Entityを参考にした本文の部分文字列にリンクを貼るための仕組みがあり、IntelligentTextViewやMiraclePainterが利用している。これを現在のEntityの反省を踏まえてSlackやMastodonなどのモダンなWorldでの利用に耐えるような機能拡充を行う。
解決したい問題¶
Entityの各項目がHashで記録されており、各値の意味が明確でない¶
Hashにリンク先のURLなどを含んでいるが、TwitterはなんとかURLみたいなフィールドをいくつも返してくるうえ、mikutterも用途が曖昧なフィールドをいくつも追加している。適用位置、表示文字列、リンク先URLの3つさえあれば良いはずなので、ほとんどのフィールドが利用されていない。
プラグインシステムと親和性が低く、拡張性がない¶
DivaにEntity機能をモンキーパッチして埋め込んでいる。
また、そのModelを定義しているプラグインがEntityまで考慮しなければならなくなっている。例えば「ツイートに "@toshi_a@social.mikutter.hachune.net" というフレーズがあればMastodonのユーザページへのリンクとして扱う」というプラグインを書くことができない。
更に、Entityは特別なオブジェクトとして一部のMessage Modelで提供しているだけなので、Entityによって改変された本文を得る方法が複雑になっていて、標準プラグインでもActivityプラグインなどはこれを利用できていない。
たんなる装飾、画像埋め込みに転用できない¶
Entityは単純に文字列の特定の位置が外部URLへのリンクであることを示すためのものだが、SlackやMastodonのカスタム絵文字を新たに実装してしまうと既存のEntityの仕組みと衝突する。
添付ファイルとの関係が曖昧で、扱い難い¶
現在mikutterのMessage Modelには添付ファイルを示すための共通の概念はないが、Twitterのようにツイートの中に添付ファイルのURLが入っているWorldは稀なので、これにアクセスする手段を提供できない場合がある。
一方でMastodonは画像を添付して専用のフィールドで表現した上で本文にも画像URLが入っていることが多く、 https://d250g2.com/ などの糞サイトやOpen Graph対応サイトの埋め込みなども考えると、厳密には添付ファイルとEntityの区別は曖昧なものである。Entityを作り直すにあたって、添付ファイルの問題の解決も視野に入れる。
ファイル
関連するチケット
cob odo さんが6年以上前に更新
- ファイル 1164-score.patch 1164-score.patch を追加
topic/1164-scoreブランチを使ってみました。既知のこともあると思いますが、気づいたことを並べてみます。
- 添付のパッチとworldon scoreブランチ( https://github.com/cobodo/mikutter-worldon/tree/score )で絵文字が正規の位置に表示される。
- TextNoteが1個だけ入った(要するに何も変えてない)Scoreを返すscore_filterを作ると無限再帰してハマってしまったので、Scoreに含まれるNoteが1個だけだったら再帰せずそのまま返してほしい。
- 本文がHyperLinkNoteのみからなるscoreをscore_filterで返したところ、score_of DSLでTextNoteになってしまった(どこかにTextNoteのみからなるscoreを返すものがいて、min_allで順序が変わらず負けてしまった?)ので、Noteの数が1個だけだった場合はTextNote以外を優先してほしい。
- max_allとmin_allの名前、逆では?
- CWでの本文表示やNSFWの画像など、表示を変更できる仕組みがあるとうれしい。
- 引用表示・リプライ表示もこれでできるとうれしい。
- 添付画像もこれでできるとうれしい。
toshi_a 初音 さんが6年以上前に更新
添付のパッチとworldon scoreブランチ( https://github.com/cobodo/mikutter-worldon/tree/score )で絵文字が正規の位置に表示される。
ありがとうございます。未実装だったので、ありがたく頂戴しておきます。
TextNoteが1個だけ入った(要するに何も変えてない)Scoreを返すscore_filterを作ると無限再帰してハマってしまったので、Scoreに含まれるNoteが1個だけだったら再帰せずそのまま返してほしい。
これは仕様のつもりでしたが、確かにプラグイン開発で嵌りそうなので簡単に対策できるならそうしたいところですね。
本文がHyperLinkNoteのみからなるscoreをscore_filterで返したところ、score_of DSLでTextNoteになってしまった(どこかにTextNoteのみからなるscoreを返すものがいて、min_allで順序が変わらず負けてしまった?)ので、Noteの数が1個だけだった場合はTextNote以外を優先してほしい。
このあたりのルールについてはまだ詰めきれてなくて、直感に反する物が選ばれてしまうケースがありますね。
max_allとmin_allの名前、逆では?
オッ
CWでの本文表示やNSFWの画像など、表示を変更できる仕組みがあるとうれしい。
これはMiraclePainter側が考慮すべきことですね。やることが多すぎるので、このチケットでは絵文字を除いてはEntityと同等以上の機能を提供するのを目標にするのが良いかなと思っています。
一旦はその路線でScoreプラグインを完成させて、その後でこういった話を改めて提案してもらえたらと思います。
引用表示・リプライ表示もこれでできるとうれしい。
添付画像もこれでできるとうれしい。
これらについては3.8以降で考えてます。3.7では実装しません。
cob odo さんが6年以上前に更新
CWでの本文表示やNSFWの画像など、表示を変更できる仕組みがあるとうれしい。
これはMiraclePainter側が考慮すべきことですね。やることが多すぎるので、このチケットでは絵文字を除いてはEntityと同等以上の機能を提供するのを目標にするのが良いかなと思っています。
一旦はその路線でScoreプラグインを完成させて、その後でこういった話を改めて提案してもらえたらと思います。引用表示・リプライ表示もこれでできるとうれしい。
添付画像もこれでできるとうれしい。これらについては3.8以降で考えてます。3.7では実装しません。
了解しました。
それで、新しいのが来たので
https://social.mikutter.hachune.net/@toshi_a/99900287599926847
合わせました。
toshi_a 初音 さんが6年以上前に更新
なんだこの速さ、たまげたなぁ…
今見直して気づきましたが、絵文字の描画位置のパッチが入ってませんね。俺の方はしばらく手がつけられないので、余力があればtopic/1164-scoreにpushしちゃってください。
saveブロック
呼び出し元がContextのsaveを行っているようです。
toshi_a 初音 さんが6年以上前に更新
パッチのmergeありがとうございます。
金具さんの
本文がHyperLinkNoteのみからなるscoreをscore_filterで返したところ、score_of DSLでTextNoteになってしまった(どこかにTextNoteのみからなるscoreを返すものがいて、min_allで順序が変わらず負けてしまった?)ので、Noteの数が1個だけだった場合はTextNote以外を優先してほしい。
これは修正しました。ほか改行も反映されるようになったので、これでほぼ完了だと思うんですが、他に気づいたことありましたか
cob odo さんが6年以上前に更新
- ファイル スクリーンショット 2018-04-28 19.58.48.png スクリーンショット 2018-04-28 19.58.48.png を追加
- ファイル スクリーンショット 2018-04-28 19.58.48.png を追加
先日書いたtwemojiプラグインで、添付画像のようなケースを見付けました。
画像置き換えによって本来の幅を上回り、行数を増やさなければならないようなケースでは、改行できずにそのままはみ出していってしまう、という感じですね。
描画幅を越えたら改行を挿入する、といったようなことができれば回避できるんでしょうか?
toshi_a 初音 さんが6年以上前に更新
- ステータス を 新規 から 終了 に変更
Pango::AttrShapeの扱いは難しいですね。別件で格闘してましたがよく分かりませんでした。
それ以外の部分については、3.7リリースぶんに含むことができる程度になったと思うので、developにmergeしました。
#1164-11 が気になるところではありますが、引き続き再現するようなら別のチケットとして立ててもらいたいです。