speg03の雑記帳

主に未来の自分のために試したことなどを記録しています

Termtterにfavoritesコマンドを追加

見当たらなかったのでないと思うのだけど,指定したユーザのfavoritesを表示するfavoritesコマンドを追加した.

ついでに,favoriteに限ったことではないのだけど,ユーザ名を指定する場合,@をつける必要があるのかないのかどっちでもいいのかわかりにくい.

とりあえず,favoriteは@が必要なのでHELPにそうわかるように@をつけておいた.

lib/plugin/favorite.rb

diff --git a/lib/plugin/favorite.rb b/lib/plugin/favorite.rb
index 6a45f01..27bf0c8 100644
--- a/lib/plugin/favorite.rb
+++ b/lib/plugin/favorite.rb
@@ -19,7 +19,7 @@ module Termtter::Client
     end
   end

-  add_help 'favorite,fav USER', 'Favorite last status on the user'
+  add_help 'favorite,fav @USER', 'Favorite last status on the user'

   add_command %r{^(?:favorite|fav)\s+@(.+)\s*$} do |m, t|
     user = m[1].strip
@@ -70,6 +70,19 @@ module Termtter::Client
       %w(favorite).grep(/^#{Regexp.quote input}/)
     end
   end
+
+  register_command(
+    :name => :favorites, :aliases => [],
+    :exec_proc => lambda {|arg|
+      if arg =~ /^@(\w+)/
+        call_hooks(Termtter::API.twitter.favorites($1), :favorites)
+      end
+    },
+    :completion_proc => lambda {|cmd, args|
+      find_user_candidates args, "#{cmd} %s"
+    },
+    :help => ['favorites @USER', 'List the USER\'s favorite posts']
+  )
 end

 module Termtter
@@ -81,5 +94,9 @@ module Termtter
         http.request(post_request(uri))
       end
     end
+
+    def favorites(id)
+      return get_timeline(url_for("/favorites/#{id}.json"))
+    end
   end
 end

lib/plugin/stdout.rb

diff --git a/lib/plugin/stdout.rb b/lib/plugin/stdout.rb
index 384975c..ca25b2a 100644
--- a/lib/plugin/stdout.rb
+++ b/lib/plugin/stdout.rb
@@ -49,7 +49,7 @@ module Termtter::Client
     case event
     when :update_friends_timeline, :list_friends_timeline
       print_statuses(statuses)
-    when :search, :list_user_timeline, :show, :replies
+    when :search, :list_user_timeline, :show, :replies, :favorites
       print_statuses_with_date(statuses)
     end
   end