OSDN Git Service

指定した人物のお気に入りを開けるようにした
authorspark_xp <spark_xp@d8c9ecd3-d47d-4367-8645-de82c00e513f>
Fri, 17 Sep 2010 15:46:41 +0000 (15:46 +0000)
committerspark_xp <spark_xp@d8c9ecd3-d47d-4367-8645-de82c00e513f>
Fri, 17 Sep 2010 15:46:41 +0000 (15:46 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/nt-manager/NishioTweetManager/trunk@62 d8c9ecd3-d47d-4367-8645-de82c00e513f

src/twitter/action/TweetFavoriteGetter.java [new file with mode: 0644]
src/twitter/gui/action/TweetMainAction.java
src/twitter/gui/component/TweetTabbedTable.java
src/twitter/manage/TweetManager.java
src/twitter/task/TimerID.java

diff --git a/src/twitter/action/TweetFavoriteGetter.java b/src/twitter/action/TweetFavoriteGetter.java
new file mode 100644 (file)
index 0000000..c7b88d3
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package twitter.action;
+
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import twitter.manage.TweetManager;
+import twitter4j.Status;
+import twitter4j.TwitterException;
+
+/**
+ *
+ * @author nishio
+ */
+public class TweetFavoriteGetter implements TweetGetter{
+
+    //tweet管理用
+    private TweetManager tweetManager;
+    //sinceid
+    private long sinceID;
+    //検索するユーザの名前
+    private String screenName = null;
+
+    /**
+     * 自分自身のお気に入りを取得
+     * @param tweetManager
+     */
+    public TweetFavoriteGetter(TweetManager tweetManager) {
+        this.tweetManager = tweetManager;
+    }
+
+    /**
+     * screenNameのお気に入りを取得
+     * @param tweetManager
+     */
+    public TweetFavoriteGetter(TweetManager tweetManager, String screenName) {
+        this.tweetManager = tweetManager;
+        this.screenName = screenName;
+    }
+
+    /**
+     * お気に入りを取得
+     * @param num この部分は無視される
+     * @return
+     */
+    @Override
+    public List<Status> getTweetData(int num) {
+        List<Status> status = null;
+        try {
+            status = tweetManager.getFavoritesTweet(screenName);
+        } catch (TwitterException ex) {
+            Logger.getLogger(TweetFavoriteGetter.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        if( status != null ) {
+            //一番最後のtweetのsinceIDを取得する
+            int lastnum = status.size();
+            if( lastnum > 0 ) {
+                sinceID = status.get(lastnum - 1).getId();
+            }
+        }
+        return status;
+    }
+
+    /**
+     * 指定したワードのツイートの新しく投稿されたものだけを取得
+     * @param sinceID
+     * @return
+     */
+    @Override
+    public List<Status> getNewTweetData() {
+        return getTweetData(0);
+    }
+
+}
\ No newline at end of file
index 127f494..05d2234 100644 (file)
@@ -44,6 +44,7 @@ import javax.swing.text.StyleConstants;
 import javax.swing.text.html.HTMLDocument;
 import javax.swing.text.html.StyleSheet;
 import twitter.action.TweetDirectMessageGetter;
+import twitter.action.TweetFavoriteGetter;
 import twitter.action.TweetGetter;
 import twitter.action.TweetMentionGetter;
 import twitter.action.TweetSearchResultGetter;
@@ -398,6 +399,31 @@ public class TweetMainAction {
     }
 
     /**
+     * お気に入りタブを追加
+     * @param screenName nullで自分自身を取得,指定するとscreenNameのFav取得
+     */
+    public void actionAddFavoriteTab(String screenName) {
+        TimerID timerID = TimerID.getInstance();
+        String id = TimerID.createFavoriteID(screenName);
+        try {
+            //既にIDが存在していたらここで例外発生
+            timerID.addID(id);
+            String favTitle;
+            if( screenName == null ) {
+                favTitle = "お気に入り";
+            }else {
+                favTitle = screenName + "のお気に入り";
+            }
+            //検索結果を表示するタブを生成
+            actionAddTab(id, Integer.MAX_VALUE, new TweetFavoriteGetter(tweetManager, screenName),
+                    favTitle);
+        } catch (ExistTimerIDException ex) {
+            JOptionPane.showMessageDialog(null, "そのタブは既に存在しています",
+                    "Error", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
      * timelineタブを追加する
      * @param period[sec]
      */
@@ -637,6 +663,22 @@ public class TweetMainAction {
     }
 
     /**
+     * 選択したユーザのFavを開く
+     */
+    public void actionOpenUserFav() {
+        try {
+            Status s = this.getCurrentStatus();
+            if( s.isRetweet() ) {
+                s = s.getRetweetedStatus();
+            }
+            String userName = s.getUser().getScreenName();
+            this.actionAddFavoriteTab(userName);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
      * 選択したユーザ情報をブラウザで開く
      */
     public void actionOpenUserURL() {
index db663a3..205bc86 100644 (file)
@@ -346,17 +346,6 @@ public class TweetTabbedTable {
                 mainAction.actionOpenStatusURL();
             }
         });
-
-        JMenuItem openBrowserUserInformationMenuItem = new JMenuItem(
-                "この人のTimelineをブラウザで開く");
-        openBrowserUserInformationMenuItem.addActionListener(new java.awt.event.ActionListener() {
-
-            @Override
-            public void actionPerformed(java.awt.event.ActionEvent e) {
-                // 選択したセルのユーザ情報をブラウザで開く
-                mainAction.actionOpenUserURL();
-            }
-        });
         
         JMenuItem createFavMenuItem = new JMenuItem(
                 "この発言をお気に入りに追加");
@@ -386,6 +375,37 @@ public class TweetTabbedTable {
         if (sc == 1 && table != null) {
             Status st = mainAction.getTweetTableInformation(table, table.getModel());
 
+            //発言した人のscreenName取得
+            String screenName = null;
+            if( st.isRetweet() ) {
+                screenName = st.getRetweetedStatus().getUser().getScreenName();
+            }else {
+                screenName = st.getUser().getScreenName();
+            }
+
+            JMenuItem openBrowserUserInformationMenuItem = new JMenuItem(
+                    screenName + "のTimelineをブラウザで開く");
+            openBrowserUserInformationMenuItem.addActionListener(new java.awt.event.ActionListener() {
+
+                @Override
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    // 選択したセルのユーザ情報をブラウザで開く
+                    mainAction.actionOpenUserURL();
+                }
+            });
+
+            JMenuItem openFavMenuItem = new JMenuItem(
+                    screenName + "のお気に入りを開く");
+            openFavMenuItem.addActionListener(new java.awt.event.ActionListener() {
+
+                @Override
+                public void actionPerformed(java.awt.event.ActionEvent e) {
+                    // 選択したセルのユーザ情報をブラウザで開く
+                    mainAction.actionOpenUserFav();
+                }
+            });
+
+
             //メニューアイテムを追加
             //返信
             rightClickPopup.add(replyMenuItem);
@@ -401,6 +421,8 @@ public class TweetTabbedTable {
             rightClickPopup.add(statusBrowserMenuItem);
             //この人のtimelineを開く
             rightClickPopup.add(openBrowserUserInformationMenuItem);
+            //この人のfavを開く
+            rightClickPopup.add(openFavMenuItem);
 
             if( st.isRetweet() ) {
                 //Retweetのときのみ表示するメニュー
index 832ea24..add44d9 100644 (file)
@@ -713,6 +713,24 @@ public class TweetManager {
     }
 
     /**
+     * 指定したユーザのお気に入りを取得
+     * @param screenName nullの場合,自分自身のお気に入りを取得
+     */
+    public List<Status> getFavoritesTweet(String screenName) throws TwitterException {
+        // getFriendsTimelineではRetweetは表示されないので注意
+        List<Status> statuses = null;
+        if( screenName == null ) {
+            //自分自身のお気に入り取得
+            statuses = twitter.getFavorites();
+        }else {
+            statuses = twitter.getFavorites(screenName);
+        }
+        //リスト逆転 一番あたらしいtweetを一番下に
+        Collections.reverse(statuses);
+        return statuses;
+    }
+
+    /**
      * Twitterへログイン
      */
     public void loginTwitter() throws FileNotFoundException, IOException {
index 683e3cb..26fedb9 100644 (file)
@@ -79,6 +79,15 @@ public class TimerID {
     }
 
     /**
+     * お気に入り取得の際に利用するタイマーID生成
+     * @param screenName
+     * @return
+     */
+    public static String createFavoriteID(String screenName) {
+        return "FAV:" + screenName;
+    }
+
+    /**
      * timelineのIDを生成
      * @return
      */