OSDN Git Service

特定の人の発言を別タブで表示できるようにする
authorspark_xp <spark_xp@d8c9ecd3-d47d-4367-8645-de82c00e513f>
Sat, 18 Sep 2010 18:47:12 +0000 (18:47 +0000)
committerspark_xp <spark_xp@d8c9ecd3-d47d-4367-8645-de82c00e513f>
Sat, 18 Sep 2010 18:47:12 +0000 (18:47 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/nt-manager/NishioTweetManager/trunk@78 d8c9ecd3-d47d-4367-8645-de82c00e513f

src/twitter/action/TweetUserTimelineGetter.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/TweetUserTimelineGetter.java b/src/twitter/action/TweetUserTimelineGetter.java
new file mode 100644 (file)
index 0000000..d795b2f
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * 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 TweetUserTimelineGetter implements TweetGetter{
+
+    //tweet管理用
+    private TweetManager tweetManager;
+    //検索したいユーザ
+    private int userID;
+    //sinceid
+    private long sinceID;
+
+    /**
+     *
+     * @param tweetManager
+     * @param userID
+     */
+    public TweetUserTimelineGetter(TweetManager tweetManager, int userID) {
+        this.tweetManager = tweetManager;
+        this.userID = userID;
+    }
+
+    /**
+     * 指定した人のツイートを指定した数だけ取得
+     * @param num
+     * @return
+     */
+    @Override
+    public List<Status> getTweetData(int num) {
+        List<Status> status = null;
+        try {
+            status = tweetManager.getUserTimeline(num, userID);
+        } catch (TwitterException ex) {
+            Logger.getLogger(TweetUserTimelineGetter.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() {
+        List<Status> status = null;
+        try {
+            status = tweetManager.getNewUserTimeline(userID, sinceID);
+        } catch (TwitterException ex) {
+            Logger.getLogger(TweetUserTimelineGetter.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;
+    }
+
+}
\ No newline at end of file
index 19a89af..9c61fb7 100644 (file)
@@ -1,13 +1,11 @@
 package twitter.gui.action;
 
 import java.awt.Color;
-import java.awt.Component;
 import java.awt.Desktop;
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.Point;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -35,7 +33,6 @@ import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JTextPane;
@@ -52,6 +49,7 @@ import twitter.action.TweetMentionGetter;
 import twitter.action.TweetSearchResultGetter;
 import twitter.action.TweetSendDirectMessageGetter;
 import twitter.action.TweetTimelineGetter;
+import twitter.action.TweetUserTimelineGetter;
 import twitter.gui.component.DnDTabbedPane;
 
 import twitter.gui.component.TweetTabbedTable;
@@ -550,6 +548,27 @@ public class TweetMainAction {
     }
 
     /**
+     * 指定したユーザの発言を表示
+     * @param username タブのタイトルにつけるユーザ名
+     * @param userID ユーザID
+     * @param period 更新周期[sec]
+     */
+    public void actionAddUserTimelineTab(String username, int userID, int period) {
+        TimerID timerID = TimerID.getInstance();
+        String id = TimerID.createUserTimelineID(userID);
+        try {
+            //既にIDが存在していたらここで例外発生
+            timerID.addID(id);
+            //検索結果を表示するタブを生成
+            actionAddTab(id, period, new TweetUserTimelineGetter(tweetManager, userID),
+                    username + "の発言");
+        } catch (ExistTimerIDException ex) {
+            JOptionPane.showMessageDialog(null, "そのタブは既に存在しています",
+                    "Error", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
      * タイムラインタブが存在しているか
      * @return
      */
@@ -956,6 +975,22 @@ public class TweetMainAction {
     }
 
     /**
+     * 選択したユーザの発言を開く
+     */
+    public void actionSelectedUserTimeline() {
+        Status status = null;
+        if( this.getCurrentStatus().isRetweet() ) {
+            status = this.getCurrentStatus().getRetweetedStatus();
+        }else {
+            status = this.getCurrentStatus();
+        }
+        String username = status.getUser().getScreenName();
+        int userID = status.getUser().getId();
+        //ユーザ
+        actionAddUserTimelineTab(username, userID, this.getGetTimelinePeriod());
+    }
+
+    /**
      * 選択しているツイートをお気に入りに追加
      */
     public void actionCreateFavorite() {
index 0ff7a2e..147332b 100644 (file)
@@ -363,6 +363,17 @@ public class TweetTabbedTable {
                 mainAction.actionOpenStatusURL();
             }
         });
+
+        JMenuItem userMenuItem = new JMenuItem("この人の発言を別タブで開く(U)");
+        userMenuItem.setMnemonic('U');
+        userMenuItem.addActionListener(new java.awt.event.ActionListener() {
+
+            @Override
+            public void actionPerformed(java.awt.event.ActionEvent e) {
+                // 指定した人の発言を開く
+                mainAction.actionSelectedUserTimeline();
+            }
+        });
         
         JMenuItem createFavMenuItem = new JMenuItem(
                 "この発言をお気に入りに追加(F)");
@@ -394,7 +405,7 @@ public class TweetTabbedTable {
             Status st = mainAction.getTweetTableInformation(table, table.getModel());
 
             JMenuItem openBrowserUserInformationMenuItem = new JMenuItem(
-                    "この人のTimelineをブラウザで開く(B)");
+                    "この人の発言をブラウザで開く(B)");
             openBrowserUserInformationMenuItem.setMnemonic('B');
             openBrowserUserInformationMenuItem.addActionListener(new java.awt.event.ActionListener() {
 
@@ -432,6 +443,8 @@ public class TweetTabbedTable {
             rightClickPopup.add(directMessageMenuItem);
             //発言をブラウザで開く
             rightClickPopup.add(statusBrowserMenuItem);
+            //この人の発言を別タブで開く
+            rightClickPopup.add(userMenuItem);
             //この人のtimelineを開く
             rightClickPopup.add(openBrowserUserInformationMenuItem);
             //この人のfavを開く
index add44d9..2df01d0 100644 (file)
@@ -731,6 +731,47 @@ public class TweetManager {
     }
 
     /**
+     * 指定したユーザの発言を取得
+     * @param num
+     * @param userID
+     * @return
+     * @throws TwitterException
+     */
+    public List<Status> getUserTimeline(int num, int userID) throws TwitterException {
+        List<Status> statuses = twitter.getUserTimeline(userID, new Paging(1, num));
+
+        //tweet逆転
+        if (statuses != null && statuses.size() > 0) {
+            Collections.reverse(statuses);
+        }
+        
+        return statuses;
+    }
+
+    /**
+     * 指定したユーザの最新の発言を取得
+     * @param userID
+     * @param sinceID
+     * @return
+     * @throws TwitterException
+     */
+    public List<Status> getNewUserTimeline(int userID, long sinceID) throws TwitterException {
+        // 一度もデータを取得していないとき
+        if (sinceID == 0) {
+            return getUserTimeline(MAX_TWEET_NUM, userID);
+        }
+
+        List<Status> statuses = twitter.getUserTimeline(userID, new Paging(sinceID));
+
+        //tweet逆転
+        if (statuses != null && statuses.size() > 0) {
+            Collections.reverse(statuses);
+        }
+
+        return statuses;
+    }
+
+    /**
      * Twitterへログイン
      */
     public void loginTwitter() throws FileNotFoundException, IOException {
index 26fedb9..fe8418a 100644 (file)
@@ -118,4 +118,13 @@ public class TimerID {
     public static String createSendDirectMessageID() {
         return "SENDDIRECTMESSAGE";
     }
+
+    /**
+     * ユーザのタイムラインIDを生成
+     * @param userID
+     * @return
+     */
+    public static String createUserTimelineID(long userID) {
+        return "USERTIMELINE:" + userID;
+    }
 }