1 package yukihane.inqubus.saccubus_adapter;
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 saccubus.ConvertStopFlag;
11 import saccubus.net.CommentInfo;
12 import saccubus.net.NicoClient;
13 import saccubus.net.TextProgressListener;
14 import saccubus.net.VideoInfo;
15 import saccubus.util.FileUtil;
21 public class NicoBrowserAdapter implements NicoClient {
23 private static final Logger logger = Logger.getLogger(NicoBrowserAdapter.class.getName());
24 private final NicoHttpClient client;
25 private final boolean hasLogin;
26 private final ConvertStopFlag stopFlag;
27 private nicobrowser.VideoInfo nicoBrowserVi;
29 public NicoBrowserAdapter(final String mail, final String pass,
30 final ConvertStopFlag flag, final String proxyHost, final int proxyPort) {
32 if (proxyHost != null && proxyHost.length() > 0 && proxyPort >= 0 && proxyPort <= 65535) {
33 this.client = new NicoHttpClient(proxyHost, proxyPort);
35 this.client = new NicoHttpClient();
39 boolean loginned = false;
41 loginned = client.login(mail, pass);
42 } catch (Exception ex) {
43 logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
45 this.hasLogin = loginned;
52 public VideoInfo getVideoInfo(String videoId) throws IOException {
53 nicoBrowserVi = client.getVideoInfo(videoId);
54 final nicobrowser.VideoInfo vi = nicoBrowserVi;
56 final VideoInfo.OfficialOption oo =
57 new VideoInfo.OfficialOption(vi.getKeyMap().get("threadkey"), vi.getKeyMap().get("force_184"));
59 return new VideoInfo(FileUtil.safeFileName(vi.getTitleInWatchPage()), vi.getThreadId(), vi.getVideoUrl().
60 toString(), vi.getMessageUrl().toString(), vi.getUserId(), vi.getVideoLength(), oo);
64 public String getWayBackKey(VideoInfo vi) throws IOException {
65 return client.getWayBackKey(nicoBrowserVi);
69 public File getComment(VideoInfo videoInfo, CommentInfo commentInfo, File file, TextProgressListener listener,
72 // TODO CommentInfo を使用するようにしなければ
73 return client.getCommentFile(nicoBrowserVi, file.getPath());
74 } catch (Exception ex) {
75 logger.log(Level.SEVERE, "コメント取得失敗", ex);
82 public File getTcomment(VideoInfo videoInfo, File file, TextProgressListener listener) {
84 return client.getTCommentFile(nicoBrowserVi, file.getParent());
85 } catch (Exception ex) {
86 logger.log(Level.SEVERE, "投稿者コメント取得失敗", ex);
93 public File getVideo(final VideoInfo videoInfo, File file, final TextProgressListener listener) {
95 GetFlvResult res = client.getFlvFile(nicoBrowserVi, file.getPath(), new ProgressListener() {
98 public void progress(long fileSize, long downloadSize) {
99 final double p = ((double) downloadSize / fileSize) * 100.0;
100 final String msg = "動画ダウンロード:" + p + "パーセント完了";
101 listener.setText(msg);
105 public boolean getCancel() {
106 return stopFlag.needStop();
110 return res.getFile();
111 } catch (Exception ex) {
112 logger.log(Level.SEVERE, null, ex);
119 public boolean isLoggedIn() {