プロジェクト

全般

プロフィール

バグ #1169

最初のアカウントを登録する時、1度目のアカウント登録が正しく行われない

toshi_a 初音4ヶ月前に追加. 約1ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
ブランチ:
topic/1169-account-registration-issue
クラッシュする:
いいえ

再現手順

  1. チュートリアルを開始
  2. Worldウィザードを開く
  3. 任意のWorld(twitter, slack, worldonで再現)を選び、手順に従ってアカウントを登録する
  4. 最後の確認画面でOKボタンを押すとダイアログが閉じる。アカウントの登録は行われず、チュートリアルは進行しない
  5. 再度Worldウィザードを開き全く同じ手順を行うとアカウントが登録でき、チュートリアルが進行する

関係しているリビジョン

リビジョン 70b2dd95 (差分)
toshi_a 初音約1ヶ月前に追加

Worldが作成された後に呼ばれるイベントを追加し、必要な箇所ではそれをlistenする refs #1169

履歴

#1 Izumi Tsutsui3ヶ月前に更新

Live Image で発生していた時の手順 toot をまとめてもらっていたということを思い出したのでとりあえず貼っておきます
(他の環境でも再現することが判明しているのであまり意味ないですが……)
http://maud.io/mstdn-picker/?instance=social.mikutter.hachune.net&since_id=99341966499248371&max_id=99343498197300797&filter=tsutsuii

#2 Izumi Tsutsui2ヶ月前に更新

発生状況確認

ておくれ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のタブ作成・ツイート取得まで進みます。

#3 Izumi Tsutsui約2ヶ月前に更新

追加で検証してみました。

  • plugin/achievement.rb で register_account の実績を on_world_create から on_open_setting に書き換える
  • ~/.mikutter がない状態で mikutter 起動して World 追加して Twitter 認証
    • →認証後 Twitter の TL, リプライ, 検索, dm のタブが表示される
      (そのかわりアカウント登録のチュートリアルの続きは出ない)

なので、 achievement.rb の UserConfig の書き込みがよろしくない雰囲気です。

#4 toshi_a 初音約1ヶ月前に更新

  • ステータス新規 から レビュー待ち に変更
  • 担当者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を登録したとき、本件の問題は発生しなくなったと思います。一応確認お願いできますか。

#5 Izumi Tsutsui約1ヶ月前に更新

  • ステータスレビュー待ち から マージ待ち に変更
  • 担当者Izumi Tsutsui から toshi_a 初音 に変更

topic/1169-account-registration-issue を checkout して --confroot で新規登録してみました。
問題なく動いているようです。
https://social.mikutter.hachune.net/@tsutsuii/99881051390507529

ありがとうございます。

#6 toshi_a 初音約1ヶ月前に更新

  • ステータスマージ待ち から 終了 に変更

masterにmergeしました

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