--- /dev/null
+/*
+ * 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
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;
}
/**
+ * お気に入りタブを追加
+ * @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]
*/
}
/**
+ * 選択したユーザの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() {
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(
"この発言をお気に入りに追加");
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);
rightClickPopup.add(statusBrowserMenuItem);
//この人のtimelineを開く
rightClickPopup.add(openBrowserUserInformationMenuItem);
+ //この人のfavを開く
+ rightClickPopup.add(openFavMenuItem);
if( st.isRetweet() ) {
//Retweetのときのみ表示するメニュー
}
/**
+ * 指定したユーザのお気に入りを取得
+ * @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 {
}
/**
+ * お気に入り取得の際に利用するタイマーID生成
+ * @param screenName
+ * @return
+ */
+ public static String createFavoriteID(String screenName) {
+ return "FAV:" + screenName;
+ }
+
+ /**
* timelineのIDを生成
* @return
*/