プロジェクト

全般

プロフィール

機能 #1164

Score

toshi_a 初音8ヶ月前に追加. 5ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
開始日:
2018-02-07
期日:
進捗率:

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を作り直すにあたって、添付ファイルの問題の解決も視野に入れる。


関連するチケット

関連している 提案 #1241: Scoreの初期値をModelが提供できるようにするtoshi_aの判断待ち

履歴

#1 cob odo5ヶ月前に更新

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の画像など、表示を変更できる仕組みがあるとうれしい。
  • 引用表示・リプライ表示もこれでできるとうれしい。
  • 添付画像もこれでできるとうれしい。

#2 cob odo5ヶ月前に更新

本質的ではないですが、EmojiNoteはshortcodeがtooltipで表示できるとよりよさそうかなと思いました(感想)。

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

添付のパッチと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では実装しません。

#4 cob odo5ヶ月前に更新

CWでの本文表示やNSFWの画像など、表示を変更できる仕組みがあるとうれしい。

これはMiraclePainter側が考慮すべきことですね。やることが多すぎるので、このチケットでは絵文字を除いてはEntityと同等以上の機能を提供するのを目標にするのが良いかなと思っています。
一旦はその路線でScoreプラグインを完成させて、その後でこういった話を改めて提案してもらえたらと思います。

引用表示・リプライ表示もこれでできるとうれしい。
添付画像もこれでできるとうれしい。

これらについては3.8以降で考えてます。3.7では実装しません。

了解しました。

それで、新しいのが来たので

https://social.mikutter.hachune.net/@toshi_a/99900287599926847

合わせました。

https://github.com/cobodo/mikutter-worldon/commits/score

#5 cob odo5ヶ月前に更新

#1164-1 で添付したパッチの c.save ブロックを外してみましたが、複数のemojiに対しても特に問題なく動いていました。set_shape_rendererのブロックに渡されるcontextは互いに全く無関係ってことなんですかね……

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

なんだこの速さ、たまげたなぁ…

今見直して気づきましたが、絵文字の描画位置のパッチが入ってませんね。俺の方はしばらく手がつけられないので、余力があればtopic/1164-scoreにpushしちゃってください。

saveブロック

呼び出し元がContextのsaveを行っているようです。

#7 cob odo5ヶ月前に更新

saveブロック

呼び出し元がContextのsaveを行っているようです。

なるほど。

今見直して気づきましたが、絵文字の描画位置のパッチが入ってませんね。俺の方はしばらく手がつけられないので、余力があればtopic/1164-scoreにpushしちゃってください。

saveブロックを外して(一応動かしてみて)pushしました。

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

  • 題名Entity から Score に変更

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

パッチのmergeありがとうございます。

金具さんの

本文がHyperLinkNoteのみからなるscoreをscore_filterで返したところ、score_of DSLでTextNoteになってしまった(どこかにTextNoteのみからなるscoreを返すものがいて、min_allで順序が変わらず負けてしまった?)ので、Noteの数が1個だけだった場合はTextNote以外を優先してほしい。

これは修正しました。ほか改行も反映されるようになったので、これでほぼ完了だと思うんですが、他に気づいたことありましたか

#10 cob odo5ヶ月前に更新

先日書いたtwemojiプラグインで、添付画像のようなケースを見付けました。
画像置き換えによって本来の幅を上回り、行数を増やさなければならないようなケースでは、改行できずにそのままはみ出していってしまう、という感じですね。
描画幅を越えたら改行を挿入する、といったようなことができれば回避できるんでしょうか?

#11 cob odo5ヶ月前に更新

  • ファイル を削除 (スクリーンショット 2018-04-28 19.58.48.png)

#12 cob odo5ヶ月前に更新

添付画像を間違えたので再送信

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

  • ステータス新規 から 終了 に変更

Pango::AttrShapeの扱いは難しいですね。別件で格闘してましたがよく分かりませんでした。
それ以外の部分については、3.7リリースぶんに含むことができる程度になったと思うので、developにmergeしました。
#1164-11 が気になるところではありますが、引き続き再現するようなら別のチケットとして立ててもらいたいです。

#14 cob odo4ヶ月前に更新

  • 関連している 提案 #1241: Scoreの初期値をModelが提供できるようにする を追加

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