Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ピン留め or 履歴に表示されるカスタム絵文字がサーバから削除されるとリアクションが出来なくなる #13485

Closed
1 task done
samunohito opened this issue Mar 1, 2024 · 15 comments · Fixed by #13486
Assignees
Labels
🐛Bug Unexpected behavior 🔥high priority packages/frontend Client side specific issue/PR

Comments

@samunohito
Copy link
Member

samunohito commented Mar 1, 2024

💡 Summary

ピン留めに登録されているカスタム絵文字がコントロールパネルから削除され、その後にリアクションしようとすると何も表示されなくなります(コンソールを見るとエラーが出ている)。
一部処理にて「サーバにはないがピン留めには存在する」という状態を考慮しきれておらず、意図せぬundefinedが返るようになっており、undefinedを想定していない後続処理でエラーとなり…という状態に陥っていました。これをundefinedではなく絵文字名を返すようにし、後続処理に繋がるようにします(後続処理はstringが想定されている)

🥰 Expected Behavior

エラーが出ずにレンダリングされること

🤬 Actual Behavior

エラーが出てレンダリングが途中で止まり操作に支障が出る

📝 Steps to Reproduce

  1. ピン留め(リアクション/全般)に任意のカスタム絵文字(Unicode絵文字ではない)が登録されている状態である
  2. コントロールパネルから1の絵文字を削除
  3. リロード
  4. +ボタンからリアクションしようとする(TLや通知の状態によってはこの段階でエラーが出ていることもある)
  5. wow

💻 Frontend Environment

* Model and OS of the device(s): Any
* Browser: Any
* Server URL: Any
* Misskey: 2024.3.0

🛰 Backend Environment (for server admin)

-

Do you want to address this bug yourself?

  • Yes, I will patch the bug myself and send a pull request
@samunohito samunohito added 🐛Bug Unexpected behavior packages/frontend Client side specific issue/PR labels Mar 1, 2024
@samunohito samunohito self-assigned this Mar 1, 2024
@tamaina
Copy link
Contributor

tamaina commented Mar 1, 2024

#13484 とは別?

@samunohito
Copy link
Member Author

同件っぽいです

@samunohito
Copy link
Member Author

Duplicate of #13484

@samunohito samunohito marked this as a duplicate of #13484 Mar 1, 2024
@samunohito samunohito closed this as not planned Won't fix, can't repro, duplicate, stale Mar 1, 2024
@samunohito

This comment was marked as off-topic.

@tamaina

This comment was marked as off-topic.

@samunohito

This comment was marked as off-topic.

@tamaina

This comment was marked as off-topic.

@Sayamame-beans
Copy link
Collaborator

#13484 ではIndexedDBのpizzax::baseを消したら直るとされていますが、ピン留めはサーバー側で保持しているアカウント単位情報なので不可解です。
また、ブラウザによって発生したりしなかったりするユーザーを複数人観測しています。(IndexedDBの削除で解決します)
そのため、IndexedDBのpizzax::baseに保存されているクライアント単位情報である、リアクション履歴においても同様の現状が発生している可能性があるのではないかと推測しています(要検証)

@Hoto-Cocoa
Copy link
Contributor

きっと最近使った絵文字についても同じだと思いますが、ちょうどサーバーから何も絵文字が消えていないのに同じ問題が発生することがありました。 (もともとIndexedDBにあったカスタム絵文字もすべてサーバーに残っていました)
いろいろ試してみましたがうまくいかなかったのでIndexedDBでkeyを消す方法で解決しましたが再発しました。

@u1-liquid
Copy link
Sponsor Contributor

@Hoto-Cocoa
Copy link
Contributor

"❓" これを使って以来、いつも開かれなくなりましたが、ioの488番PRが同じ問題を解決しているようです。

@samunohito
Copy link
Member Author

Unicode絵文字もアカンかったか…

@u1-liquid @Hoto-Cocoa
情報提供ありがとうございます

@samunohito samunohito changed the title ピン留めに登録されているカスタム絵文字がサーバから削除されるとリアクションが出来なくなる ピン留め or 履歴に表示されるカスタム絵文字がサーバから削除されるとリアクションが出来なくなる Mar 1, 2024
@samunohito
Copy link
Member Author

@Sayamame-beans
発見した際の操作がピン留めだったので、ピン留めで起票してました。仰る通り、履歴でも同様の現象が起こると思います。
原因はキャッシュしている絵文字一覧の中にピン留めor履歴の絵文字が存在しないケースのハンドリングが甘かったことなので…

また、ブラウザによって発生したりしなかったりするユーザーを複数人観測しています

以下は自分が実際に検知した例です。他にもパターンはあるかもしれませんが、把握してる限りでは何れもプルリクで修正している範囲に落ち着くと考えています。

絵文字削除のタイミングと、ユーザさんがMisskeyを開いていたタイミングによって発生する・しないがあるようです。

  • 絵文字削除時にMisskeyを開いている
    →WebSocket経由で絵文字の削除イベントが配信され、ローカルのキャッシュから絵文字が消える →現象発生
  • 開いていない
    • キャッシュの有効期限内
      →削除イベントを受け取っていないのでキャッシュに残っている →現象は発生しない(リアクションに使うと❤にフォールバックされる)
    • キャッシュの有効期限外
      →新しくバックエンドから取り直しキャッシュを更新 →現象発生

@samunohito
Copy link
Member Author

テキストスタイル絵文字とカラースタイル絵文字(U+FE0Fが後ろにつくやつ)と、絵文字の辞書ファイルとして使用されているemojilist.jsonまわりの処理が噛み合っていなかったようでした。
emojilist.jsonにはカラースタイル化された絵文字が記載されておらず、MapからのUnicode絵文字情報取得に失敗→undefinedが返る→カスタム絵文字と同じ状況になっていたようです。

ひとまず、カラースタイル絵文字が見つからない場合はテキストスタイル絵文字でMapを検索するようにフォールバック処理を追加しました(プルリク参照)

@samunohito
Copy link
Member Author

随所で不具合報告あがってるので強火(これだけでもリリースしたい気持ちが強い)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛Bug Unexpected behavior 🔥high priority packages/frontend Client side specific issue/PR
Projects
None yet
5 participants