OSDN Git Service

サムネイル表示情報を再考
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / thumbnail / Repository.java
index adc9370..c0a89c1 100644 (file)
@@ -1,6 +1,7 @@
 package yukihane.inqubus.thumbnail;
 
 import java.awt.image.BufferedImage;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -9,7 +10,6 @@ import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import javax.imageio.ImageIO;
-import javax.swing.ImageIcon;
 import nicobrowser.NicoHttpClient;
 import nicobrowser.util.RssContent;
 import nicobrowser.util.RssContentParser;
@@ -27,7 +27,7 @@ public class Repository {
     private final ExecutorService executorService = Executors.newCachedThreadPool();
     private final Map<String, Thumbnail> thumbnailMap = new HashMap<>();
 
-    public void request(ProxyProfile proxy, String videoId) {
+    public void request(ProxyProfile proxy, File tempDir, String videoId) {
         synchronized (thumbnailMap) {
             final Thumbnail value = thumbnailMap.get(videoId);
             if (value != null) {
@@ -35,7 +35,7 @@ public class Repository {
             }
         }
 
-        executorService.execute(new ThumnailFetchWorker(proxy, videoId));
+        executorService.execute(new ThumnailFetchWorker(proxy, tempDir, videoId));
     }
 
     public Thumbnail getThumnail(String videoId) {
@@ -48,10 +48,12 @@ public class Repository {
 
         private final ProxyProfile proxy;
         private final String videoId;
+        private final File tempDir;
 
-        private ThumnailFetchWorker(ProxyProfile proxy, String videoId) {
+        private ThumnailFetchWorker(ProxyProfile proxy, File tempDir, String videoId) {
             this.proxy = proxy;
             this.videoId = videoId;
+            this.tempDir = tempDir;
         }
 
         @Override
@@ -66,12 +68,14 @@ public class Repository {
                 final RssContent cont = new RssContentParser().parse(is);
                 final URL thumbUrl = new URL(cont.getThumbnail_url());
 
-                ImageIcon icon;
+                final File imageFile;
                 try (InputStream imageStream = client.get(thumbUrl)) {
                     final BufferedImage image = ImageIO.read(imageStream);
-                    icon = new ImageIcon(image);
+                    imageFile = File.createTempFile("thumb", ".jpg", tempDir);
+                    imageFile.deleteOnExit();
+                    ImageIO.write(image, "jpeg", imageFile);
                 }
-                final Thumbnail thumb = new Thumbnail(cont.getTitle(), icon);
+                final Thumbnail thumb = new Thumbnail(cont.getTitle(), cont.getLength(), imageFile);
 
                 synchronized (thumbnailMap) {
                     thumbnailMap.put(videoId, thumb);