diff options
Diffstat (limited to 'core/addon/streaming.rb')
-rw-r--r-- | core/addon/streaming.rb | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/core/addon/streaming.rb b/core/addon/streaming.rb index f1149a86..18cf2a96 100644 --- a/core/addon/streaming.rb +++ b/core/addon/streaming.rb @@ -59,7 +59,7 @@ Module.new do yield(service, lock.synchronize{ data = events; events = Set.new; data.freeze }) } rescue => e error e - abort end } + Plugin.activity :error, e.to_s, :exception => e end } define_method("event_#{event_name}"){ |json| type_strict json => tcor(Array, Hash) service ||= @service @@ -68,7 +68,7 @@ Module.new do thread.wakeup else error "event_#{event_name}: event processing thread was dead." - abort end } end + thread.join end } end def start unless @thread and @thread.alive? @@ -96,16 +96,16 @@ Module.new do event_direct_message(json['direct_message']) when json['delete'] if Mopt.debug - Plugin.call(:update, nil, [Message.new(:message => YAML.dump(json), - :system => true)]) end + Plugin.activity :system, YAML.dump(json) end + when !json.has_key?('event') # thread_storage(:update).push(json) event_update(json) when Mopt.debug - Plugin.call(:update, nil, [Message.new(:message => YAML.dump(json), - :system => true)]) + Plugin.activity :system, YAML.dump(json) end rescue Exception => e + Plugin.activity :error, e.to_s, exception: e notice e end end @@ -127,7 +127,8 @@ Module.new do Plugin.call(event_name, service, data) } end define_together_event(:direct_message) do |service, data| - trigger_event(service, :direct_messages => data.map{ |datum| datum.symbolize }) end + trigger_event(service, :direct_messages => data.map{ |datum| + MikuTwitter::ApiCallSupport::Request::Parser.direct_message(datum.symbolize) }) end define_event(:favorite) do |service, json| by = MikuTwitter::ApiCallSupport::Request::Parser.user(json['source'].symbolize) @@ -149,6 +150,22 @@ Module.new do elsif(source.is_me?) Plugin.call(:followings_created, service, [target]) end end + define_event(:list_member_added) do |service, json| + target_user = MikuTwitter::ApiCallSupport::Request::Parser.user(json['target'].symbolize) # リストに追加されたユーザ + list = MikuTwitter::ApiCallSupport::Request::Parser.list(json['target_object'].symbolize) # リスト + source_user = MikuTwitter::ApiCallSupport::Request::Parser.user(json['source'].symbolize) # 追加したユーザ + list.add_member(target_user) + Plugin.call(:list_member_added, service, target_user, list, source_user) + end + + define_event(:list_member_removed) do |service, json| + target_user = MikuTwitter::ApiCallSupport::Request::Parser.user(json['target'].symbolize) # リストに追加されたユーザ + list = MikuTwitter::ApiCallSupport::Request::Parser.list(json['target_object'].symbolize) # リスト + source_user = MikuTwitter::ApiCallSupport::Request::Parser.user(json['source'].symbolize) # 追加したユーザ + list.remove_member(target_user) + Plugin.call(:list_member_removed, service, target_user, list, source_user) + end + def start_streaming(&proc) begin Plugin.call(:rewindstatus, 'UserStream: start') |