OSDN Git Service

d901ecf8d779303525867e7ad3869c5869e891f2
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / saccubus_adapter / NicoBrowserAdapter.java
1 package yukihane.inqubus.saccubus_adapter;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7 import nicobrowser.GetFlvResult;
8 import nicobrowser.NicoHttpClient;
9 import nicobrowser.ProgressListener;
10 import nicobrowser.WayBackInfo;
11 import saccubus.ConvertStopFlag;
12 import saccubus.net.CommentInfo;
13 import saccubus.net.NicoClient;
14 import saccubus.net.TextProgressListener;
15 import saccubus.net.VideoInfo;
16 import saccubus.util.FileUtil;
17
18 /**
19  * NicoBrowserのニコニコ動画サービスアクセス機能をいんきゅばすから使用するためのアダプタ.
20  * @author yuki
21  */
22 public class NicoBrowserAdapter implements NicoClient {
23
24     private static final Logger logger = Logger.getLogger(NicoBrowserAdapter.class.getName());
25     private final NicoHttpClient client;
26     private final boolean hasLogin;
27     private final ConvertStopFlag stopFlag;
28     private nicobrowser.VideoInfo nicoBrowserVi;
29
30     public NicoBrowserAdapter(final String mail, final String pass,
31             final ConvertStopFlag flag, final String proxyHost, final int proxyPort) {
32
33         if (proxyHost != null && proxyHost.length() > 0 && proxyPort >= 0 && proxyPort <= 65535) {
34             this.client = new NicoHttpClient(proxyHost, proxyPort);
35         } else {
36             this.client = new NicoHttpClient();
37         }
38
39         // ログイン
40         boolean loginned = false;
41         try {
42             loginned = client.login(mail, pass);
43         } catch (Exception ex) {
44             logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
45         }
46         this.hasLogin = loginned;
47
48         this.stopFlag = flag;
49
50     }
51
52     @Override
53     public VideoInfo getVideoInfo(String videoId) throws IOException {
54         nicoBrowserVi = client.getVideoInfo(videoId);
55         final nicobrowser.VideoInfo vi = nicoBrowserVi;
56
57         final VideoInfo.OfficialOption oo =
58                 new VideoInfo.OfficialOption(vi.getKeyMap().get("threadkey"), vi.getKeyMap().get("force_184"));
59
60         return new VideoInfo(FileUtil.safeFileName(vi.getTitleInWatchPage()), vi.getThreadId(), vi.getVideoUrl().
61                 toString(), vi.getMessageUrl().toString(), vi.getUserId(), vi.getVideoLength(), oo);
62     }
63
64     @Override
65     public String getWayBackKey(VideoInfo vi) throws IOException {
66         return client.getWayBackKey(nicoBrowserVi);
67     }
68
69     @Override
70     public File getComment(VideoInfo videoInfo, CommentInfo commentInfo, File file, TextProgressListener listener,
71             String com) {
72         try {
73             WayBackInfo wbi = new WayBackInfo(commentInfo.getWayBackKey(), commentInfo.getWayBackTime());
74             return client.getCommentFile(nicoBrowserVi, file.getPath(), wbi);
75         } catch (Exception ex) {
76             logger.log(Level.SEVERE, "コメント取得失敗", ex);
77         }
78         return null;
79     }
80
81     @Override
82     public File getTcomment(VideoInfo videoInfo, File file, TextProgressListener listener) {
83         try {
84             return client.getTCommentFile(nicoBrowserVi, file.getParent());
85         } catch (Exception ex) {
86             logger.log(Level.SEVERE, "投稿者コメント取得失敗", ex);
87         }
88         return null;
89     }
90
91     @Override
92     public File getVideo(final VideoInfo videoInfo, File file, final TextProgressListener listener) {
93         try {
94             GetFlvResult res = client.getFlvFile(nicoBrowserVi, file.getPath(), new ProgressListener() {
95
96                 @Override
97                 public void progress(long fileSize, long downloadSize) {
98                     final double p = ((double) downloadSize / fileSize) * 100.0;
99                     final String msg = "動画ダウンロード:" + p + "パーセント完了";
100                     listener.setText(msg);
101                 }
102
103                 @Override
104                 public boolean getCancel() {
105                     return stopFlag.needStop();
106                 }
107             });
108
109             return res.getFile();
110         } catch (Exception ex) {
111             logger.log(Level.SEVERE, null, ex);
112         }
113         return null;
114     }
115
116     @Override
117     public boolean isLoggedIn() {
118         return hasLogin;
119     }
120 }