OSDN Git Service

ユーザのイメージファイル取得に時間が掛かっていた問題を解決。画像ファイルを予めダウンロードしておき、キャッシュとして保存しておく。この修正によりソフトウェアの動作が早くな...
[nt-manager/nt-manager.git] / src / twitter / gui / component / TweetTableModel.java
index 121366c..2bb0032 100644 (file)
@@ -4,6 +4,7 @@ import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
@@ -11,6 +12,7 @@ import java.util.List;
 import javax.swing.ImageIcon;
 import javax.swing.table.DefaultTableModel;
 
+import twitter.cache.TwitterImageCache;
 import twitter.util.HTMLEncode;
 import twitter4j.Status;
 
@@ -128,9 +130,12 @@ public class TweetTableModel extends DefaultTableModel {
                // 1:ユーザのイメージ
                // 2:ユーザのつぶやき
                // 3.つぶやいた時間,つぶやいたクライアントなど
+               
+               //イメージデータをキャッシュから取得
+               TwitterImageCache imageCache = TwitterImageCache.getInstance();
 
                Object[] obj = {
-                               new ImageIcon(t.getUser().getProfileImageURL()),
+                               imageCache.getProfileImage( t.getUser().getProfileImageURL().toString() ),
                                "<b>" + t.getUser().getScreenName() + "</b> "
                                                + HTMLEncode.encode(t.getText()),
                                tweetDateFormat.format(t.getCreatedAt()) + "<br> "
@@ -143,6 +148,42 @@ public class TweetTableModel extends DefaultTableModel {
                }
                // super.addRow(obj);
        }
+       
+       /**
+        * Tweetをテーブルに追加
+        * @param list
+        */
+       public void insertTweet(List<Status> list) {
+               //イメージデータをキャッシュから取得
+               TwitterImageCache imageCache = TwitterImageCache.getInstance();
+               
+               //イメージだけあらかじめ取得しておく
+               ImageIcon[] icons = new ImageIcon[ list.size() ];
+               int i=0;
+               for(Status t : list ) {
+                       icons[i] = imageCache.getProfileImage( t.getUser().getProfileImageURL().toString() );
+                       i++;
+               }
+               
+               int j=0;
+               for(Status t : list ) {
+                       //キャッシュを使ってイメージを取得
+                       Object[] obj = {
+                                       icons[j],
+                                       "<b>" + t.getUser().getScreenName() + "</b> "
+                                                       + HTMLEncode.encode(t.getText()),
+                                       tweetDateFormat.format(t.getCreatedAt()) + "<br> "
+                                                       + t.getSource() + "から" };
+                       System.out.println( t.getUser().getProfileImageURL() );
+                       try {
+                               super.insertRow(0, obj);
+                               tweetStatus.add(0, t);
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                       }
+                       j++;
+               }
+       }
 
        /**
         * Tweetテーブルに存在する要素数