バグ #670
closed初回起動時にチュートリアルが表示されない場合がある
Description
NetBSD/i386 6.1.4 + pkgsrc-2014Q1 で
mikutter-3.0.0-alpha2 のオレオレ作成パッケージ
という「とか環境」ですが、
(ruby-2.0.0p451 + ruby-gnome2-2.2.0)
~/.mikutter が無い状態からのスタートで
% mkdir .mikutter .mikutter/plugin
% touch .mikutter/plugin/display_requirements.rb
と先走ってDRキャンセルのプラグインを入れた状態で
mikutter-3.0.0-alpha2 を起動すると、
最初のチュートリアルが表示されません。
(添付の no-tutorial.png)
設定→アカウント情報→追加 で手動でアカウントを追加して、
アカウント登録の実績解除の表示がされると
その直前にチュートリアルが表示されます。
(添付の tutorial_register.png)
上記で
touch .mikutter/plugin/display_requirements.rb
する代わりに、
mikutter/core/plugin/display_requirements/display_requirements.rb を
~/.mikutter/plugin/ 以下にコピーして、
# アイコン上のボタンの数の変更 def _schemer {x_count: 1, y_count: 1} end
の3行をコメントアウトすると、この場合もチュートリアルが出なくなります。
チュートリアルが出ないというよりは、TL表示が開始されていないようにも見えますが、
そもそもチュートリアルが開始される条件は何なのでしょう?
Files
Updated by toshi_a 初音 over 10 years ago
- Assignee set to toshi_a 初音
チュートリアルは実績「tutorial」が解除されていない状態で必ず発生します。なんでしょうね
Updated by toshi_a 初音 over 10 years ago
- Status changed from 新規 to 実装待ち
確かに、タイムラインの上のほうに真っ白なツイートがあるようで、クリックするとそれを選択出来ました(標準リストビューの選択色になりました)。
また、デバッグモードで起動すると原因不明のクラッシュを引き起こしているようです。
Updated by Izumi Tsutsui over 10 years ago
デバッグモードで起動すると無言で終了してしまうのは
core/mui/cairo_cell_renderer_message.rb
の
if Mopt.debug raise e end
http://dev.mikutter.hachune.net/projects/mikutter/repository/revisions/bb6cd76e9ac8855073a91e0c130265c8e720fb0e/entry/core/mui/cairo_cell_renderer_message.rb#L135
で終了してるっぽいです。上記2行をコメントアウトするとデバッグモードでも継続します。
で、notfoundが原因なんですかね。
Updated by Izumi Tsutsui over 10 years ago
上記の cairo_cell_renderer_message.rb の exception を notice で表示してみたところ
notice: {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_cell_renderer_message.rb:136:in `rescue in message_id=': undefined method `user_obj' for nil:NilClass from {MIKUTTER_DIR}/tsutsui/mikutter/core/message.rb:303:in `retweeted?' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:196:in `iob_icon_pixbuf_off' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:51:in `block (3 levels) in render_icon_over_button' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:48:in `times' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:48:in `block (2 levels) in render_icon_over_button' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:47:in `times' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:47:in `block in render_icon_over_button' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:45:in `save' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_icon_over_button.rb:45:in `render_icon_over_button' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:387:in `render_main_icon' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:369:in `render_to_context' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:341:in `gen_pixmap' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:347:in `gen_pixbuf' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_miracle_painter.rb:122:in `pixbuf' from {MIKUTTER_DIR}/tsutsui/mikutter/core/lib/uithreadonly.rb:22:in `block (2 levels) in singleton class' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_cell_renderer_message.rb:153:in `render_message' from {MIKUTTER_DIR}/tsutsui/mikutter/core/mui/cairo_cell_renderer_message.rb:132:in `message_id=' from {MIKUTTER_DIR}/tsutsui/mikutter/core/plugin/gtk/mainloop.rb:10:in `main' from {MIKUTTER_DIR}/tsutsui/mikutter/core/plugin/gtk/mainloop.rb:10:in `mainloop' from mikutter/mikutter.rb:62:in `boot!' from mikutter/mikutter.rb:80:in `<main>'
ということで、認証していないのに retweet (とふぁぼられ?)のステータスを見に行って
失敗しているんでしょうか。
認証していない状態でも表示されるmikutter_botさんに対しては
右クリックメニューでツイート関連操作が抑制されるのと同様に
マウスオーバーアイコンを出さないという仕様にするのがよい
という気もします。
(アイコンが表示されていない状態でも適当にふぁぼやRT部分のあたりを
クリックすると落ちる)
全然関係ありませんが、ログの {MIKUTTER_DIR} のプライバシー保護(?)機能が
ちゃんと働いていないような……。
元の起動ディレクトリが /home/tsutsui/mikutter/mikutter.rb なので
親ディレクトリの先頭しか置き換えていないとか?
Updated by Izumi Tsutsui over 10 years ago
添付のパッチのように適当にいじって
system message の場合は render_icon_over_button() を呼ばないようにすると
一応DRキャンセルプラグイン有効でもチュートリアルの表示は出て認証まで行けました。
が、表示しないだけでふぁぼやRTボタン自体は有効のままっぽいので、
認証前にmikutter_botさんアイコンのふぁぼやRTに相当する部分を押すと落ちます。
また、リプライ部分を押すとリプライ入力ができてしまいます。
(試してませんがそのまま投稿すると落ちる?)
どうしたもんでしょう。
Updated by toshi_a 初音 over 10 years ago
ありがとうございます!コメント3の件は、どこで死んでいるのか原因が分からなかったのですが、これで漸くわかりました。Serviceが無いことを考えていないコードが、DRプラグインで隠れていたんですね。
頂いたパッチについては、コアの方でServiceが無い時の現在の動作は明らかに間違いなので、そちらがどういう挙動をすべきか検討して実装します。
Updated by toshi_a 初音 over 10 years ago
- Status changed from 実装待ち to レビュー待ち
- Assignee changed from toshi_a 初音 to Izumi Tsutsui
対応しました。
Message#retweeted? と Message.favorited? が、アカウントがない時に常にfalseを返すようにしてクラッシュしないようにしました。
また、システムメッセージにはアイコンオーバボタンを表示しないという件については、確かにシステムメッセージにこれを表示する意味はないので、頂いたパッチを基に表示しないようにしました(c7f0b820)。
Updated by Izumi Tsutsui over 10 years ago
- Status changed from レビュー待ち to 解決
1d3e7979 相当で確認してDR無効プラグインありで認証まで通るのを確認しました。
ありがとうございます。