Project

General

Profile

Actions

機能 #1164

closed

Score

Added by toshi_a 初音 over 6 years ago. Updated over 6 years ago.

Status:
終了
Priority:
通常
Assignee:
-
Target version:
Start date:
2018-02-07
Due date:
% Done:

0%

プラグイン名:

Description

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


Files


Related issues

Related to 提案 #1241: Scoreの初期値をModelが提供できるようにするtoshi_aの判断待ちActions
Actions #1

Updated by cob odo over 6 years ago

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

Updated by cob odo over 6 years ago

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

Actions #3

Updated by toshi_a 初音 over 6 years ago

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

Actions #4

Updated by cob odo over 6 years ago

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

Actions #5

Updated by cob odo over 6 years ago

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

Actions #6

Updated by toshi_a 初音 over 6 years ago

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

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

saveブロック

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

Actions #7

Updated by cob odo over 6 years ago

saveブロック

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

なるほど。

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

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

Actions #8

Updated by toshi_a 初音 over 6 years ago

  • Subject changed from Entity to Score
Actions #9

Updated by toshi_a 初音 over 6 years ago

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

金具さんの

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

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

Actions #10

Updated by cob odo over 6 years ago

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

Actions #11

Updated by cob odo over 6 years ago

  • File deleted (スクリーンショット 2018-04-28 19.58.48.png)
Actions #13

Updated by toshi_a 初音 over 6 years ago

  • Status changed from 新規 to 終了

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

Actions #14

Updated by cob odo over 6 years ago

  • Related to 提案 #1241: Scoreの初期値をModelが提供できるようにする added
Actions

Also available in: Atom PDF