OSDN Git Service

Cookie関係情報をコンフィグから取得しプロファイルを作成する処理の実装
authoryukihane <yukihane.feather@gmail.com>
Sat, 17 Sep 2011 12:19:41 +0000 (21:19 +0900)
committeryukihane <yukihane.feather@gmail.com>
Sat, 17 Sep 2011 12:19:41 +0000 (21:19 +0900)
frontend/src/saccubus/worker/impl/download/Download.java
frontend/src/saccubus/worker/profile/LoginProfile.java
frontend/src/yukihane/inqubus/config/Config.java
frontend/src/yukihane/inqubus/config/ConfigLoginProfile.java
frontend/src/yukihane/inqubus/saccubus/prompt/DownloadProfileImpl.java

index 8a67234..898b7db 100644 (file)
@@ -102,7 +102,7 @@ public class Download extends Worker<DownloadResult, DownloadProgress> {
             final File file = new File(profile.getCommentProfile().getDir(), name);
 
             final EnumSet<DownloadCommentType> commentSet = EnumSet.of(DownloadCommentType.OWNER);
-            if(profile.getCommentProfile().isDisablePerMinComment()) {
+            if (profile.getCommentProfile().isDisablePerMinComment()) {
                 commentSet.add(DownloadCommentType.COMMENT_OLD);
             } else {
                 commentSet.add(DownloadCommentType.COMMENT);
@@ -149,10 +149,15 @@ public class Download extends Worker<DownloadResult, DownloadProgress> {
      */
     private NicoHttpClient createClientAndLogin() throws IOException, InterruptedException {
         final NicoHttpClient client = createClient(profile.getProxyProfile());
+        if (profile.getLoginProfile().needsLogin()) {
 
-        final boolean hasLogin = client.login(profile.getLoginProfile().getMail(), profile.getLoginProfile().getPassword());
-        if (!hasLogin) {
-            throw new IOException("login fail");
+            final boolean hasLogin = client.login(profile.getLoginProfile().getMail(), profile.getLoginProfile().
+                    getPassword());
+            if (!hasLogin) {
+                throw new IOException("login fail");
+            }
+        } else {
+            client.addCookie(profile.getLoginProfile().getCookies());
         }
 
         return client;
index 7f37bb5..3079e8d 100644 (file)
@@ -1,14 +1,25 @@
 package saccubus.worker.profile;
 
+import java.util.Map;
+
 /**
  * ニコニコ動画サービスへのログイン情報を保持するためのプロファイルです.
  * @author yuki
  */
 public interface LoginProfile {
 
+    /** @return ログイン情報を使用してログインする場合はtrue, cookieを使用する場合はfalse. */
+    boolean needsLogin();
+
     /** @return ログインID(メールアドレス). */
-    public String getMail();
+    String getMail();
 
     /** @return ログインパスワード. */
-    public String getPassword();
+    String getPassword();
+
+    /**
+     * @return 追加のCookie.
+     * {@link #needsLogin()} がfalseの場合, ここにユーザセッション情報を含める必要があります.
+     */
+    Map<String, String> getCookies();
 }
index 9499567..1b94606 100644 (file)
@@ -5,10 +5,54 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.XMLConfiguration;
+import saccubus.net.Cookie.BrowserType;
 
 public enum Config {
 
     INSTANCE;
+
+    public enum CookieBrowser {
+
+        MSIE {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.MSIE;
+            }
+        }, FIREFOX {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.FIREFOX;
+            }
+        }, CHROME {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.CHROME;
+            }
+        }, CHROMIUM {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.CHROMIUM;
+            }
+        }, OPERA {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.OPERA;
+            }
+        }, OTHER {
+
+            @Override
+            public BrowserType toBrowserType() {
+                return BrowserType.OTHER;
+            }
+        };
+
+        public abstract BrowserType toBrowserType();
+    }
     private final XMLConfiguration config = new XMLConfiguration();
 
     void clear() {
@@ -18,6 +62,15 @@ public enum Config {
     /*
      * ネットワーク - アカウント
      */
+    private static final String LOGIN_NEED = "network.login";
+
+    public boolean getNeedsLogin() {
+        return config.getBoolean(LOGIN_NEED, true);
+    }
+
+    public void setNeedsLogin(boolean s) {
+        config.setProperty(LOGIN_NEED, s);
+    }
     private static final String ACCOUNT_ID = "network.account.id";
 
     public String getId() {
@@ -36,7 +89,25 @@ public enum Config {
     public void setPassword(String s) {
         config.setProperty(ACCOUNT_PASSWORD, s);
     }
+    private static final String COOKIE_BROWSER = "network.cookie.browser";
+
+    public CookieBrowser getCookieBrowser() {
+        final String str = config.getString(COOKIE_BROWSER, CookieBrowser.MSIE.name());
+        return CookieBrowser.valueOf(str);
+    }
 
+    public void setCookieBrowser(CookieBrowser s) {
+        config.setProperty(COOKIE_BROWSER, s.name());
+    }
+    private static final String COOKIE_DIR = "network.cookie.dir";
+
+    public String getCookieDir() {
+        return config.getString(COOKIE_DIR, "");
+    }
+
+    public void setCookieDir(String s) {
+        config.setProperty(COOKIE_DIR, s);
+    }
     /*
      * ネットワーク - プロキシ
      */
index 29cdbf2..8b4191c 100644 (file)
@@ -1,7 +1,11 @@
 package yukihane.inqubus.config;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.commons.lang.builder.ToStringBuilder;
+import saccubus.net.Cookie;
 import saccubus.worker.profile.LoginProfile;
+import yukihane.inqubus.config.Config.CookieBrowser;
 
 /**
  * コンフィグに設定された値を基にしたLoginProfile実装.
@@ -9,13 +13,26 @@ import saccubus.worker.profile.LoginProfile;
  */
 public class ConfigLoginProfile implements LoginProfile {
 
+    private final boolean login;
     private final String mail;
     private final String password;
+    private final Map<String, String> cookies;
 
     public ConfigLoginProfile() {
         final Config p = Config.INSTANCE;
+        this.login = p.getNeedsLogin();
         this.mail = p.getId();
         this.password = p.getPassword();
+
+        final CookieBrowser cookieBrowser = p.getCookieBrowser();
+        final String cookieDir = p.getCookieDir();
+        final Cookie cookie = Cookie.create(cookieBrowser.toBrowserType(), cookieDir);
+        this.cookies = new HashMap<>(cookie.get());
+    }
+
+    @Override
+    public boolean needsLogin() {
+        return this.login;
     }
 
     @Override
@@ -29,6 +46,11 @@ public class ConfigLoginProfile implements LoginProfile {
     }
 
     @Override
+    public Map<String, String> getCookies() {
+        return new HashMap<>(this.cookies);
+    }
+
+    @Override
     public String toString() {
         return ToStringBuilder.reflectionToString(this);
     }
index 85bd525..4e32de2 100644 (file)
@@ -4,6 +4,7 @@ import saccubus.worker.profile.CommentProfile;
 import saccubus.worker.profile.LoginProfile;
 import yukihane.inqubus.config.ConfigCommentProfile;
 import yukihane.inqubus.config.ConfigDownloadProfile;
+import yukihane.inqubus.config.ConfigLoginProfile;
 
 /**
  * さきゅばすのコマンドプロンプト仕様にあわせるためのDownloadProfile実装
@@ -15,7 +16,7 @@ class DownloadProfileImpl extends ConfigDownloadProfile {
     private final CommentProfile commentProfile;
 
     DownloadProfileImpl(final String mail, final String pass, final long time) {
-        this.loginProfile = new LoginProfile() {
+        this.loginProfile = new ConfigLoginProfile() {
 
             @Override
             public String getMail() {