Closed shibafu528 closed 4 years ago
おそらく、 core/userconfig.rb において初期値が定義されていた設定について、参照すべき初期値がなくなったからと思われます。
UserConfig を使ってるプラグインをみようみまねで脳死コピーするととりあえず動いてるっぽいです。
From 69f087e1733b81170be5aa057be68383850829b5 Mon Sep 17 00:00:00 2001
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Date: Sat, 7 Mar 2020 17:16:20 +0900
Subject: [PATCH] Add default UserConfig values of intervals and counts to
fetch timelines.
---
rest.rb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/rest.rb b/rest.rb
index 9fcb742..455cbf1 100644
--- a/rest.rb
+++ b/rest.rb
@@ -2,6 +2,10 @@
# Rest API で定期的にタイムラインを更新するプラグイン
Plugin.create :rest do
+ UserConfig[:retrieve_interval_friendtl] ||= 1
+ UserConfig[:retrieve_interval_mention] ||= 20
+ UserConfig[:retrieve_count_friendtl] ||= 20
+ UserConfig[:retrieve_count_mention] ||= 20
def self.define_periodical_executer(api, interval, count, &success)
counter = UserConfig[interval]
--
2.24.1
rest 以外にも 保存した検索の間隔 follow/followerの取得間隔 DMの更新間隔 リストの更新間隔 があったはずですが、そこらへんは対処しなくても動いてるのが謎(コードを見ていない)
UserConfig[:retrieve_interval_friendtl] ||= 1
で放置してると複数起動であっという間に規制されてしまうようなので
5分くらいにすべきですね……
よくよく見たら、 https://github.com/mikutter/twitter_settings/blob/master/twitter_settings.rb にデフォルト値入ってました。 単に依存関係記述の問題なんでしょうか。
.mikutter.yml に明示的に依存関係書けば解決しましたがこれでいいんですかね。 (どのみち識別用にバージョンも上げるべきか)
同様に interval の値を参照している following_control と saved_search の .mikutter.yml にも同様に記載すべき?
From 0fdb90efca6d9e9f6b784521556946c78440b31a Mon Sep 17 00:00:00 2001
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Date: Sun, 8 Mar 2020 10:33:37 +0900
Subject: [PATCH] Explicitly depend on 'twitter_settings' to pull UserConfig
values.
---
.mikutter.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.mikutter.yml b/.mikutter.yml
index 30c88de..3cb7cda 100644
--- a/.mikutter.yml
+++ b/.mikutter.yml
@@ -4,6 +4,7 @@ depends:
mikutter: '0.2'
plugin:
- twitter
+ - twitter_settings
version: '1.0'
author: toshi_a
name: REST
--
2.24.1
元々は各プラグインがロードされる前に初期化されていて、その前提で動いていたものになるので、一番早い段階でロードされるはずのtwitterプラグインが初期値を握っていてもいいような気がします。
twitter_settingsに明示的に依存してしまうと、間接的にguiに依存してしまいますので。
(とはいえ、たくさんリポジトリ散っていると手を入れるのが面倒ですね……!)
UserConfig できることと 設定画面で変更できることと その初期値を誰が設定するかということとが それぞれ独立であるとすると、 初期値の定義だけを各プラグインに移動するのがいいんですかねえ。
個別に変更したときに twitter_settings の修正を絶対に忘れるという気もしますが、 確かに GUI には依存したくないですね。
なるほど。この場合は、twitter_settingはそのままで、 https://github.com/mikutter/rest/issues/1#issuecomment-596061020 のパッチを適用するのが良いと思います。
twitter_settingは、 UserConfig[:retrieve_interval_friendtl]
に必ず数値が入っていなければいけません。
一方、restも UserConfig[:retrieve_interval_friendtl]
に必ず数値が入っていなければいけません。
そして、twitter_settingとrestに依存関係はないので、片方だけをインストールしても正しく動作するようにすべきです。
したがって、これを実現する方法はrestとtwitter_setting両方でデフォルト値を入れる処理を書くしかありません。
2つのプラグインが同じキーに別々のデフォルト値を提案した場合、先にロードされたほうが採用されてしまうため初期値が予測できなくなります。そのため、2つのプラグインで設定値は同じ値にしておいたほうがいいかもしれません。
なるほど。この場合は、twitter_settingはそのままで、 #1 (comment) のパッチを適用するのが良いと思います。
初期値を足すプルリクエストを
rest および
https://github.com/mikutter/saved_search
https://github.com/mikutter/followingcontrol
https://github.com/mikutter/direct_message
https://github.com/mikutter/list
それぞれに出せばいいですかね。
それぞれタグを打つなら .mikutter.yml
のバージョン記述も上げないといけない? とか考え出すとエンドレスですが。
if 0 == count % UserConfig["retrieve_interval_followings"]
みたいな参照の場合にエラーになるのかどうかよくわかっていません。
初期値を足すプルリクエストを rest および https://github.com/mikutter/saved_search https://github.com/mikutter/followingcontrol https://github.com/mikutter/direct_message https://github.com/mikutter/list それぞれに出せばいいですかね。
そうなります
バージョンあげるくらいは私がやります。pull-reqでやるべきではないと思うので。
direct_message だけはなぜか
Reserver.new([60, (UserConfig[:retrieve_interval_direct_messages] || 1).to_i * 60].max, thread: Delayer) do
と || 1
になってたのでそのままにしておきます
遅くなりましたが 1.1 で初回起動でも TL表示まで進むことを確認しました。 クローズでよいと思います
thx
プラグイン導入後の初回起動時にクラッシュします。しかし、2回目以降は問題なく動作します。
おそらく、 core/userconfig.rb において初期値が定義されていた設定について、参照すべき初期値がなくなったからと思われます。
この辺ですかね。
https://github.com/mikutter/rest/blob/a4bcd033aa40a0240004c8fe55b093f8a5cc0cf0/rest.rb#L6-L9
stacktrace