バグ #1169
完了
最初のアカウントを登録する時、1度目のアカウント登録が正しく行われない
toshi_a 初音 さんがほぼ7年前に追加.
6年以上前に更新.
再現手順
- チュートリアルを開始
- Worldウィザードを開く
- 任意のWorld(twitter, slack, worldonで再現)を選び、手順に従ってアカウントを登録する
- 最後の確認画面でOKボタンを押すとダイアログが閉じる。アカウントの登録は行われず、チュートリアルは進行しない
- 再度Worldウィザードを開き全く同じ手順を行うとアカウントが登録でき、チュートリアルが進行する
発生状況確認¶
ておくれLiveImageを NetBSD 7.1.2 + mikutter 3.6.5版に更新したので、
「mikutterを新規起動しつつ、 ~/.mikutter 以下を git 登録して
git status しながらチュートリアルを進める」
という方法で調べてみました。
調査結果結論¶
最初のアカウントの登録が完了した瞬間に register_account の実績登録が行われるために問題が発生しているように見えます。
調査結果詳細¶
チュートリアルを進めて起動後 1回目のWorld登録が完了すると
~/.mikutter/settings/settings.yml
に
UserConfig::achievement_took:
- :register_account
の実績を書き込みだけが発生しています。
2回目のWorld登録の終了時にはチュートリアル終了の
Plugin::guide_guide_sequence: :hello_world
や
UserConfig::account_crypt_key: !binary |-
XXXXXXXXXX
等のアカウント登録成功の書き込み、タブの追加の書き込み、トークン登録等が行われます。
上記動作から「アカウント登録の実績の書き込みが原因」と推測して、試しに
mikutter 初回起動後のチュートリアル開始前に setting.yml に
UserConfig::achievement_took:
- :register_account
を事前に書き込んでおくと、1回目のアカウント登録でちゃんとTwitterのタブ作成・ツイート取得まで進みます。
追加で検証してみました。
- plugin/achievement.rb で register_account の実績を on_world_create から on_open_setting に書き換える
- ~/.mikutter がない状態で mikutter 起動して World 追加して Twitter 認証
- →認証後 Twitter の TL, リプライ, 検索, dm のタブが表示される
(そのかわりアカウント登録のチュートリアルの続きは出ない)
なので、 achievement.rb の UserConfig の書き込みがよろしくない雰囲気です。
- ステータス を 新規 から レビュー待ち に変更
- 担当者 を toshi_a 初音 から Izumi Tsutsui に変更
- ブランチ を topic/1169-account-registration-issue にセット
World情報を読み出すタイミングの問題だということがわかりました。
world_create
イベントは、これを受け取ってWorldプラグインがWorldを管理下に置くため、リスナの登録のタイミングによってはWorldが管理下に置かれる前に呼び出される可能性があります。今回問題になったguideプラグインもWorldより先に呼び出されてしまっていて、登録されたWorldが worlds
フィルタによって見つけられない状態でした。
これは他の場所でも潜在的な問題になるため、WorldプラグインがWorldを管理下に置いた後に world_after_created
イベントを発生させるようにして、 world_create
イベントをlistenしなければいけないプラグインを除いて、全てこちらを利用するようにしました( world_create
の実装には手を加えていないため、このイベントをlistenしているサードパーティプラグインに互換性の問題が起こることはありません)。
これで、新規プロファイルでチュートリアルに従ってWorldを登録したとき、本件の問題は発生しなくなったと思います。一応確認お願いできますか。
- ステータス を レビュー待ち から マージ待ち に変更
- 担当者 を Izumi Tsutsui から toshi_a 初音 に変更
他の形式にエクスポート: Atom
PDF