OSDN Git Service

設定画面はJFrameでなくJDialogで
[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 import yukihane.saccubus.converter.profile.CommentProfile;
18 import yukihane.saccubus.converter.profile.LoinProfile;
19 import yukihane.saccubus.converter.profile.ProxyProfile;
20
21 /**
22  * NicoBrowserのニコニコ動画サービスアクセス機能をいんきゅばすから使用するためのアダプタ.
23  * @author yuki
24  */
25 public class NicoBrowserAdapter implements NicoClient {
26
27     private static final Logger logger = Logger.getLogger(NicoBrowserAdapter.class.getName());
28     private final NicoHttpClient client;
29     private final boolean hasLogin;
30     private final ConvertStopFlag stopFlag;
31     private nicobrowser.VideoInfo nicoBrowserVi;
32
33     public NicoBrowserAdapter(final String mail, final String pass,
34             final ConvertStopFlag flag, final String proxyHost, final int proxyPort) {
35
36         if (proxyHost != null && proxyHost.length() > 0 && proxyPort >= 0 && proxyPort <= 65535) {
37             this.client = new NicoHttpClient(proxyHost, proxyPort);
38         } else {
39             this.client = new NicoHttpClient();
40         }
41
42         // ログイン
43         boolean loginned = false;
44         try {
45             loginned = client.login(mail, pass);
46         } catch (Exception ex) {
47             logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
48         }
49         this.hasLogin = loginned;
50
51         this.stopFlag = flag;
52
53     }
54
55     public NicoBrowserAdapter(LoinProfile loginInfo, ProxyProfile proxy, ConvertStopFlag flag) {
56         if (proxy.use()) {
57             this.client = new NicoHttpClient(proxy.getHost(), proxy.getPort());
58         } else {
59             this.client = new NicoHttpClient();
60         }
61
62         // ログイン
63         boolean loginned = false;
64         try {
65             loginned = client.login(loginInfo.getMail(), loginInfo.getPass());
66         } catch (Exception ex) {
67             logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
68         }
69         this.hasLogin = loginned;
70
71         this.stopFlag = flag;
72     }
73
74     @Override
75     public VideoInfo getVideoInfo(String videoId) throws IOException {
76         nicoBrowserVi = client.getVideoInfo(videoId);
77         final nicobrowser.VideoInfo vi = nicoBrowserVi;
78
79         final VideoInfo.OfficialOption oo =
80                 new VideoInfo.OfficialOption(vi.getKeyMap().get("threadkey"), vi.getKeyMap().get("force_184"));
81
82         return new VideoInfo(FileUtil.safeFileName(vi.getTitleInWatchPage()), vi.getThreadId(), vi.getVideoUrl().
83                 toString(), vi.getMessageUrl().toString(), vi.getUserId(), vi.getVideoLength(), oo);
84     }
85
86     @Override
87     public String getWayBackKey(VideoInfo vi) throws IOException {
88         return client.getWayBackKey(nicoBrowserVi);
89     }
90
91     @Override
92     public File getComment(VideoInfo videoInfo, CommentInfo commentInfo, File file, TextProgressListener listener,
93             int commentNum, boolean reduceComment) {
94         try {
95             final WayBackInfo wbi = (commentInfo != null) ? new WayBackInfo(commentInfo.getWayBackKey(), commentInfo.
96                     getWayBackTime()) : null;
97             return client.getCommentFile(nicoBrowserVi, file.getPath(), wbi, commentNum, reduceComment);
98         } catch (Exception ex) {
99             logger.log(Level.SEVERE, "コメント取得失敗", ex);
100         }
101         return null;
102     }
103
104     @Override
105     public File getTcomment(VideoInfo videoInfo, File file, TextProgressListener listener) {
106         try {
107             return client.getTCommentFile(nicoBrowserVi, file.getPath());
108         } catch (Exception ex) {
109             logger.log(Level.SEVERE, "投稿者コメント取得失敗", ex);
110         }
111         return null;
112     }
113
114     @Override
115     public File getVideo(final VideoInfo videoInfo, File file, final TextProgressListener listener) {
116         try {
117             final String fileName = FileUtil.removeExtension(file.getPath());
118             GetFlvResult res = client.getFlvFile(nicoBrowserVi, fileName, new ProgressListener() {
119
120                 @Override
121                 public void progress(long fileSize, long downloadSize) {
122                     final double p = ((double) downloadSize / fileSize) * 100.0;
123                     final String msg = String.format("動画ダウンロード:%.2fパーセント完了", p);
124                     listener.setText(msg);
125                 }
126
127                 @Override
128                 public boolean getCancel() {
129                     return stopFlag.needStop();
130                 }
131             });
132
133             return res.getFile();
134         } catch (Exception ex) {
135             logger.log(Level.SEVERE, null, ex);
136         }
137         return null;
138     }
139
140     @Override
141     public boolean isLoggedIn() {
142         return hasLogin;
143     }
144 }