OSDN Git Service

dev20091125_wait_timeブランチのマージ
authoryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Thu, 26 Nov 2009 15:18:47 +0000 (15:18 +0000)
committeryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Thu, 26 Nov 2009 15:18:47 +0000 (15:18 +0000)
221-228

git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser/trunk@229 bdf3b611-c98c-6041-8292-703d9c9adbe7

README.html
nbproject/build-impl.xml
nbproject/genfiles.properties
nbproject/groovy-build.xml
src/nicobrowser/Config.java
src/nicobrowser/main/Main.java
test/nicobrowser/ConfigTest.java
testdata/waittimeconfig/nicobrowser.properties [new file with mode: 0644]

index 13750df..2e87de3 100644 (file)
@@ -1,3 +1,3 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html lang="ja"><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>README</title></head>\r
-<body><p></p><ul class="readonly" id="mozToc"><!--mozToc h2 1 h3 2--><li><a href="#mozTocId600802">機能・特徴</a></li><li><a href="#mozTocId344177">使い方の一例</a></li><li><a href="#mozTocId180645">操作方法</a></li><li><a href="#mozTocId136534">バージョンアップに関する注意事項</a><ul><li><a href="#mozTocId920310">2009/05/24版以前を使用していた場合の注意事項</a></li><li><a href="#mozTocId116237">2009/03/23版以前を使用していた場合の注意事項</a></li></ul></li><li><a href="#mozTocId730811">nicobrowser.propertiesの説明</a></li><li><a href="#mozTocId935686">feedurl.txtの説明</a></li><li><a href="#mozTocId627544">未解決の課題</a></li><li><a href="#mozTocId130181">更新履歴</a></li></ul><h2><a class="mozTocH2" name="mozTocId600802"></a>機能・特徴</h2><ul><li>ニコニコ動画に投稿された動画の自動ダウンロード</li><ul><li>ランキングの上位から自動ダウンロード</li><li>指定したマイリストから自動ダウンロード</li></ul><li>ダウンロード履歴管理</li><ul><li>一度ダウンロードした動画は重複してダウンロードされない</li><li>エコノミーモードでダウンロードしていた場合でも、高画質ファイルが取得できるのであれば再ダウンロードする</li></ul><li>Pure Javaであるため、Windows, MacOS, Linux上で動作可能</li></ul><h2><a class="mozTocH1" name="mozTocId344177"></a>使い方の一例</h2><p><a href="http://feather.cocolog-nifty.com/weblog/2008/03/post_7d4b.html">http://feather.cocolog-nifty.com/weblog/2008/03/post_7d4b.html</a></p><p><br></p><h2><a class="mozTocH1" name="mozTocId180645"></a>操作方法</h2><p>コマンドラインで以下を実行。</p><p style="font-weight: bold;"><code>java -jar NicoBrowser.jar</code></p><p>1回目の起動でコンフィグファイルがアプリケーションディレクトリに作成される。Windowsであれば、例えば以下のディレクトリ。</p><p>C:\Documents and Settings\user\.nicobrowser</p><p>nicobrowser.propertiesを開き、IDとパスワードを設定する。</p><p>設定後、再度実行すればダウンロード開始。</p><h2><a class="mozTocH2" name="mozTocId136534"></a>バージョンアップに関する注意事項</h2><h3><a class="mozTocH3" name="mozTocId920310"></a>2009/05/24版以前を使用していた場合の注意事項</h3><p>アップデート後(つまり今回のファイルで上書きした後)、1回目の起動前に以下のコマンドを実行する必要がある。実行しないとDB関連のエラーとなり処理が継続できない。</p><p style="font-weight: bold;"><code>java -jar NicoBrowser.jar sync</code></p><p>(引数にsyncをつけて実行する)</p><h3><a class="mozTocH2" name="mozTocId116237"></a>2009/03/23版以前を使用していた場合の注意事項</h3><p>nicobrowser.propertiesの互換性は無いため、一旦リネーム(or 削除)してから<br>実行する必要がある。こうすることで、新しいnicobrowser.propertiesが作成される。</p><p>path.dbの設定は、従来は"ファイル名"の指定だったが、現在は"ディレクトリ名"の指定に変わっていることに注意。</p><p>本体libディレクトリ以下について、構成が大きく変わっているため、libは上書きでなく置換することを推奨。</p><h2><a class="mozTocH2" name="mozTocId730811"></a>nicobrowser.propertiesの説明</h2><p>path.db=<br>履歴管理DBを保存するディレクトリ。日本語名不可。</p><p>path.savefile=<br>ダウンロードしたflvファイルを保存するディレクトリ。日本語名不可。</p><p>encoding=<br>feedurl.txtの文字エンコーディング。</p><p>nicovideo.mail=<br>ニコニコ動画のメールアドレス(ID)。</p><p>nicovideo.password=<br>ニコニコ動画のパスワード。</p><p>download.mylist=<br>指定した公開マイリストに登録されているコンテンツをダウンロード対象に含める。</p><p>例えば<br>http://www.nicovideo.jp/mylist/4573744<br>http://www.nicovideo.jp/mylist/739988/1395449<br>上記2個のマイリストを対象とする場合、<br>download.mylist=<span style="font-weight: bold;">4573744,739988/1395449</span><br>と、URLの mylist/ 以下をカンマで区切って指定する。</p><h2><a class="mozTocH2" name="mozTocId935686"></a>feedurl.txtの説明</h2><p>1行ごとに、対象とするRSSフィードのURLと抽出数をカンマ区切りで設定する。<br>書式についてはファイル内のコメント参照。</p><h2><a class="mozTocH2" name="mozTocId627544"></a>未解決の課題</h2><p>webサイト参照。</p><h2><a class="mozTocH2" name="mozTocId130181"></a>更新履歴</h2><p>2009/11/13 ver.0.1.1<br>Log4Jのインストールバージョン誤りを修正。</p><p>2009/11/13 ver.0.1<br>永続化する情報に作者(投稿者)情報を追加。ipum用の対応。</p><p>2009/05/24<br>デイリーランキング以外のフィードへ対応。<br>一部のswfに対してアクセスできない問題の対応(新プレイヤ対応)。<br>ログ出力の見直し。</p><p>2009/03/23<br>動画ファイル取得時403をもらった場合、ファイルをダウンロードしないように対応。</p><p>2009/01/11<br>視聴権限が無い動画を取得しようとした場合にアプリケーションが終了してしまう問題を修正。</p><p>2008/08/03<br>ランキングのRSSをzioさん作ニコRSS<br>http://zio3.net/nicoRss/Handler.ashx<br>から本家<br>http://www.nicovideo.jp/ranking/mylist/daily/all?rss=atom<br>に変更した。</p><p>2008/04/09<br>前回ダウンロード要求から5秒待ってから次のダウンロード要求を行うようウェイト処理を追加した。<br>ターゲットをJDK6からJDK5に変更した。</p><p>2008/03/21<br>公開マイリストを指定したダウンロードを可能とした。</p><p>2008/03/15<br>ダウンロードする最低ランキングを指定可能とした。<br>ファイル名にドットが入っていた場合にもアンダーバーに<br>置換するよう置換規則を追加(Craving Explorerに合わせた)。</p></body></html>
\ No newline at end of file
+<body><p></p><ul class="readonly" id="mozToc"><!--mozToc h2 1 h3 2--><li><a href="#mozTocId600802">機能・特徴</a></li><li><a href="#mozTocId344177">使い方の一例</a></li><li><a href="#mozTocId180645">操作方法</a></li><li><a href="#mozTocId136534">バージョンアップに関する注意事項</a><ul><li><a href="#mozTocId920310">2009/05/24版以前を使用していた場合の注意事項</a></li><li><a href="#mozTocId116237">2009/03/23版以前を使用していた場合の注意事項</a></li></ul></li><li><a href="#mozTocId730811">nicobrowser.propertiesの説明</a></li><li><a href="#mozTocId935686">feedurl.txtの説明</a></li><li><a href="#mozTocId627544">未解決の課題</a></li><li><a href="#mozTocId130181">更新履歴</a></li></ul><h2><a class="mozTocH2" name="mozTocId600802"></a>機能・特徴</h2><ul><li>ニコニコ動画に投稿された動画の自動ダウンロード</li><ul><li>ランキングの上位から自動ダウンロード</li><li>指定したマイリストから自動ダウンロード</li></ul><li>ダウンロード履歴管理</li><ul><li>一度ダウンロードした動画は重複してダウンロードされない</li><li>エコノミーモードでダウンロードしていた場合でも、高画質ファイルが取得できるのであれば再ダウンロードする</li></ul><li>Pure Javaであるため、Windows, MacOS, Linux上で動作可能</li></ul><h2><a class="mozTocH1" name="mozTocId344177"></a>使い方の一例</h2><p><a href="http://feather.cocolog-nifty.com/weblog/2008/03/post_7d4b.html">http://feather.cocolog-nifty.com/weblog/2008/03/post_7d4b.html</a></p><p><br></p><h2><a class="mozTocH1" name="mozTocId180645"></a>操作方法</h2><p>コマンドラインで以下を実行。</p><p style="font-weight: bold;"><code>java -jar NicoBrowser.jar</code></p><p>1回目の起動でコンフィグファイルがアプリケーションディレクトリに作成される。Windowsであれば、例えば以下のディレクトリ。</p><p>C:\Documents and Settings\user\.nicobrowser</p><p>nicobrowser.propertiesを開き、IDとパスワードを設定する。</p><p>設定後、再度実行すればダウンロード開始。</p><h2><a class="mozTocH2" name="mozTocId136534"></a>バージョンアップに関する注意事項</h2><h3><a class="mozTocH3" name="mozTocId920310"></a>2009/05/24版以前を使用していた場合の注意事項</h3><p>アップデート後(つまり今回のファイルで上書きした後)、1回目の起動前に以下のコマンドを実行する必要がある。実行しないとDB関連のエラーとなり処理が継続できない。</p><p style="font-weight: bold;"><code>java -jar NicoBrowser.jar sync</code></p><p>(引数にsyncをつけて実行する)</p><h3><a class="mozTocH2" name="mozTocId116237"></a>2009/03/23版以前を使用していた場合の注意事項</h3><p>nicobrowser.propertiesの互換性は無いため、一旦リネーム(or 削除)してから<br>実行する必要がある。こうすることで、新しいnicobrowser.propertiesが作成される。</p><p>path.dbの設定は、従来は"ファイル名"の指定だったが、現在は"ディレクトリ名"の指定に変わっていることに注意。</p><p>本体libディレクトリ以下について、構成が大きく変わっているため、libは上書きでなく置換することを推奨。</p><h2><a class="mozTocH2" name="mozTocId730811"></a>nicobrowser.propertiesの説明</h2><p>path.db=<br>履歴管理DBを保存するディレクトリ。日本語名不可。</p><p>path.savefile=<br>ダウンロードしたflvファイルを保存するディレクトリ。日本語名不可。</p><p>encoding=<br>feedurl.txtの文字エンコーディング。</p><p>nicovideo.mail=<br>ニコニコ動画のメールアドレス(ID)。</p><p>nicovideo.password=<br>ニコニコ動画のパスワード。</p><p>download.retry=<br>指定した回数ダウンロード試行に失敗した場合、次回以降ダウンロード対象から除外する。</p><p>download.wait=<br>連続してダウンロードを行う際、ここで指定した秒数待ち合わせて次のファイルへ進む。</p><p>download.mylist=<br>指定した公開マイリストに登録されているコンテンツをダウンロード対象に含める。</p><p>例えば<br>http://www.nicovideo.jp/mylist/4573744<br>http://www.nicovideo.jp/mylist/739988/1395449<br>上記2個のマイリストを対象とする場合、<br>download.mylist=<span style="font-weight: bold;">4573744,739988/1395449</span><br>と、URLの mylist/ 以下をカンマで区切って指定する。</p><h2><a class="mozTocH2" name="mozTocId935686"></a>feedurl.txtの説明</h2><p>1行ごとに、対象とするRSSフィードのURLと抽出数をカンマ区切りで設定する。<br>書式についてはファイル内のコメント参照。</p><h2><a class="mozTocH2" name="mozTocId627544"></a>未解決の課題</h2><p>webサイト参照。</p><h2><a class="mozTocH2" name="mozTocId130181"></a>更新履歴</h2><p>200911/26 ver.0.2.0<br>download.waitプロパティを追加。</p><p>2009/11/13 ver.0.1.1<br>Log4Jのインストールバージョン誤りを修正。</p><p>2009/11/13 ver.0.1<br>永続化する情報に作者(投稿者)情報を追加。ipum用の対応。</p><p>2009/05/24<br>デイリーランキング以外のフィードへ対応。<br>一部のswfに対してアクセスできない問題の対応(新プレイヤ対応)。<br>ログ出力の見直し。</p><p>2009/03/23<br>動画ファイル取得時403をもらった場合、ファイルをダウンロードしないように対応。</p><p>2009/01/11<br>視聴権限が無い動画を取得しようとした場合にアプリケーションが終了してしまう問題を修正。</p><p>2008/08/03<br>ランキングのRSSをzioさん作ニコRSS<br>http://zio3.net/nicoRss/Handler.ashx<br>から本家<br>http://www.nicovideo.jp/ranking/mylist/daily/all?rss=atom<br>に変更した。</p><p>2008/04/09<br>前回ダウンロード要求から5秒待ってから次のダウンロード要求を行うようウェイト処理を追加した。<br>ターゲットをJDK6からJDK5に変更した。</p><p>2008/03/21<br>公開マイリストを指定したダウンロードを可能とした。</p><p>2008/03/15<br>ダウンロードする最低ランキングを指定可能とした。<br>ファイル名にドットが入っていた場合にもアンダーバーに<br>置換するよう置換規則を追加(Craving Explorerに合わせた)。</p></body></html>
\ No newline at end of file
index 91026bc..790937f 100644 (file)
@@ -20,8 +20,8 @@ is divided into following sections:
 \r
         -->\r
 <project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="NicoBrowser-impl">\r
-    <import file="jnlp-impl.xml"/>\r
     <import file="groovy-build.xml"/>\r
+    <import file="jnlp-impl.xml"/>\r
     <fail message="Please build using Ant 1.7.1 or higher.">\r
         <condition>\r
             <not>\r
@@ -57,21 +57,52 @@ is divided into following sections:
     </target>\r
     <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">\r
         <available file="${manifest.file}" property="manifest.available"/>\r
-        <condition property="manifest.available+main.class">\r
+        <condition property="main.class.available">\r
             <and>\r
-                <isset property="manifest.available"/>\r
                 <isset property="main.class"/>\r
                 <not>\r
                     <equals arg1="${main.class}" arg2="" trim="true"/>\r
                 </not>\r
             </and>\r
         </condition>\r
+        <condition property="manifest.available+main.class">\r
+            <and>\r
+                <isset property="manifest.available"/>\r
+                <isset property="main.class.available"/>\r
+            </and>\r
+        </condition>\r
+        <condition property="do.mkdist">\r
+            <and>\r
+                <isset property="libs.CopyLibs.classpath"/>\r
+                <not>\r
+                    <istrue value="${mkdist.disabled}"/>\r
+                </not>\r
+            </and>\r
+        </condition>\r
         <condition property="manifest.available+main.class+mkdist.available">\r
             <and>\r
                 <istrue value="${manifest.available+main.class}"/>\r
-                <isset property="libs.CopyLibs.classpath"/>\r
+                <isset property="do.mkdist"/>\r
+            </and>\r
+        </condition>\r
+        <condition property="manifest.available+mkdist.available">\r
+            <and>\r
+                <istrue value="${manifest.available}"/>\r
+                <isset property="do.mkdist"/>\r
             </and>\r
         </condition>\r
+        <condition property="manifest.available-mkdist.available">\r
+            <or>\r
+                <istrue value="${manifest.available}"/>\r
+                <isset property="do.mkdist"/>\r
+            </or>\r
+        </condition>\r
+        <condition property="manifest.available+main.class-mkdist.available">\r
+            <or>\r
+                <istrue value="${manifest.available+main.class}"/>\r
+                <isset property="do.mkdist"/>\r
+            </or>\r
+        </condition>\r
         <condition property="have.tests">\r
             <or>\r
                 <available file="${test.src.dir}"/>\r
@@ -106,6 +137,7 @@ is divided into following sections:
         <property name="javadoc.preview" value="true"/>\r
         <property name="application.args" value=""/>\r
         <property name="source.encoding" value="${file.encoding}"/>\r
+        <property name="runtime.encoding" value="${source.encoding}"/>\r
         <condition property="javadoc.encoding.used" value="${javadoc.encoding}">\r
             <and>\r
                 <isset property="javadoc.encoding"/>\r
@@ -121,11 +153,9 @@ is divided into following sections:
         <condition property="do.depend.true">\r
             <istrue value="${do.depend}"/>\r
         </condition>\r
-        <condition else="" property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'">\r
-            <and>\r
-                <isset property="jaxws.endorsed.dir"/>\r
-                <available file="nbproject/jaxws-build.xml"/>\r
-            </and>\r
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>\r
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">\r
+            <length length="0" string="${endorsed.classpath}" when="greater"/>\r
         </condition>\r
     </target>\r
     <target name="-post-init">\r
@@ -176,7 +206,8 @@ is divided into following sections:
                     <classpath>\r
                         <path path="@{classpath}"/>\r
                     </classpath>\r
-                    <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>\r
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>\r
+                    <compilerarg line="${javac.compilerargs}"/>\r
                     <customize/>\r
                 </javac>\r
             </sequential>\r
@@ -230,6 +261,7 @@ is divided into following sections:
                     </syspropertyset>\r
                     <formatter type="brief" usefile="false"/>\r
                     <formatter type="xml"/>\r
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>\r
                     <jvmarg line="${run.jvmargs}"/>\r
                 </junit>\r
             </sequential>\r
@@ -286,10 +318,11 @@ is divided into following sections:
             <element name="customize" optional="true"/>\r
             <sequential>\r
                 <java classname="@{classname}" dir="${work.dir}" fork="true">\r
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>\r
                     <jvmarg line="${debug-args-line}"/>\r
                     <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>\r
-                    <jvmarg value="-Dfile.encoding=${source.encoding}"/>\r
-                    <redirector errorencoding="${source.encoding}" inputencoding="${source.encoding}" outputencoding="${source.encoding}"/>\r
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>\r
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>\r
                     <jvmarg line="${run.jvmargs}"/>\r
                     <classpath>\r
                         <path path="@{classpath}"/>\r
@@ -310,8 +343,9 @@ is divided into following sections:
             <element name="customize" optional="true"/>\r
             <sequential>\r
                 <java classname="@{classname}" dir="${work.dir}" fork="true">\r
-                    <jvmarg value="-Dfile.encoding=${source.encoding}"/>\r
-                    <redirector errorencoding="${source.encoding}" inputencoding="${source.encoding}" outputencoding="${source.encoding}"/>\r
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>\r
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>\r
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>\r
                     <jvmarg line="${run.jvmargs}"/>\r
                     <classpath>\r
                         <path path="@{classpath}"/>\r
@@ -338,7 +372,23 @@ is divided into following sections:
                 COMPILATION SECTION\r
                 ===================\r
             -->\r
-    <target depends="init" name="deps-jar" unless="no.deps"/>\r
+    <target name="-deps-jar-init" unless="built-jar.properties">\r
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>\r
+        <delete file="${built-jar.properties}" quiet="true"/>\r
+    </target>\r
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">\r
+        <mkdir dir="${build.dir}"/>\r
+        <touch file="${built-jar.properties}" verbose="false"/>\r
+        <property file="${built-jar.properties}" prefix="already.built.jar."/>\r
+        <fail message="Cycle detected: NicoBrowser was already built">\r
+            <condition>\r
+                <isset property="already.built.jar.${basedir}"/>\r
+            </condition>\r
+        </fail>\r
+        <propertyfile file="${built-jar.properties}">\r
+            <entry key="${basedir}" value=""/>\r
+        </propertyfile>\r
+    </target>\r
     <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>\r
     <target depends="init" name="-check-automatic-build">\r
         <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>\r
@@ -399,10 +449,10 @@ is divided into following sections:
         <!-- Empty placeholder for easier customization. -->\r
         <!-- You can override this target in the ../build.xml file. -->\r
     </target>\r
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available">\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">\r
         <j2seproject1:jar/>\r
     </target>\r
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">\r
         <j2seproject1:jar manifest="${manifest.file}"/>\r
     </target>\r
     <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">\r
@@ -445,7 +495,28 @@ is divided into following sections:
         <property location="${dist.jar}" name="dist.jar.resolved"/>\r
         <echo>java -jar "${dist.jar.resolved}"</echo>\r
     </target>\r
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="libs.CopyLibs.classpath" name="-do-jar-with-libraries-without-manifest" unless="manifest.available+main.class">\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+mkdist.available" name="-do-jar-with-libraries-without-mainclass" unless="main.class.available">\r
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>\r
+        <pathconvert property="run.classpath.without.build.classes.dir">\r
+            <path path="${run.classpath}"/>\r
+            <map from="${build.classes.dir.resolved}" to=""/>\r
+        </pathconvert>\r
+        <pathconvert pathsep=" " property="jar.classpath">\r
+            <path path="${run.classpath.without.build.classes.dir}"/>\r
+            <chainedmapper>\r
+                <flattenmapper/>\r
+                <globmapper from="*" to="lib/*"/>\r
+            </chainedmapper>\r
+        </pathconvert>\r
+        <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>\r
+        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">\r
+            <fileset dir="${build.classes.dir}"/>\r
+            <manifest>\r
+                <attribute name="Class-Path" value="${jar.classpath}"/>\r
+            </manifest>\r
+        </copylibs>\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" name="-do-jar-with-libraries-without-manifest" unless="manifest.available">\r
         <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>\r
         <pathconvert property="run.classpath.without.build.classes.dir">\r
             <path path="${run.classpath}"/>\r
@@ -461,13 +532,16 @@ is divided into following sections:
         <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>\r
         <copylibs compress="${jar.compress}" jarfile="${dist.jar}" runtimeclasspath="${run.classpath.without.build.classes.dir}">\r
             <fileset dir="${build.classes.dir}"/>\r
+            <manifest>\r
+                <attribute name="Class-Path" value="${jar.classpath}"/>\r
+            </manifest>\r
         </copylibs>\r
     </target>\r
     <target name="-post-jar">\r
         <!-- Empty placeholder for easier customization. -->\r
         <!-- You can override this target in the ../build.xml file. -->\r
     </target>\r
-    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-manifest,-post-jar,jnlp" description="Build JAR." name="jar"/>\r
+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar,jnlp" description="Build JAR." name="jar"/>\r
     <!--\r
                 =================\r
                 EXECUTION SECTION\r
@@ -689,7 +763,23 @@ is divided into following sections:
                 CLEANUP SECTION\r
                 ===============\r
             -->\r
-    <target depends="init" name="deps-clean" unless="no.deps"/>\r
+    <target name="-deps-clean-init" unless="built-clean.properties">\r
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>\r
+        <delete file="${built-clean.properties}" quiet="true"/>\r
+    </target>\r
+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">\r
+        <mkdir dir="${build.dir}"/>\r
+        <touch file="${built-clean.properties}" verbose="false"/>\r
+        <property file="${built-clean.properties}" prefix="already.built.clean."/>\r
+        <fail message="Cycle detected: NicoBrowser was already built">\r
+            <condition>\r
+                <isset property="already.built.clean.${basedir}"/>\r
+            </condition>\r
+        </fail>\r
+        <propertyfile file="${built-clean.properties}">\r
+            <entry key="${basedir}" value=""/>\r
+        </propertyfile>\r
+    </target>\r
     <target depends="init" name="-do-clean">\r
         <delete dir="${build.dir}"/>\r
         <delete dir="${dist.dir}"/>\r
@@ -699,4 +789,20 @@ is divided into following sections:
         <!-- You can override this target in the ../build.xml file. -->\r
     </target>\r
     <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>\r
+    <target name="-check-call-dep">\r
+        <property file="${call.built.properties}" prefix="already.built."/>\r
+        <condition property="should.call.dep">\r
+            <not>\r
+                <isset property="already.built.${call.subproject}"/>\r
+            </not>\r
+        </condition>\r
+    </target>\r
+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">\r
+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">\r
+            <propertyset>\r
+                <propertyref prefix="transfer."/>\r
+                <mapper from="transfer.*" to="*" type="glob"/>\r
+            </propertyset>\r
+        </ant>\r
+    </target>\r
 </project>\r
index a5bfdec..018b4fb 100644 (file)
@@ -4,8 +4,8 @@ build.xml.stylesheet.CRC32=958a1d3e@1.26.2.45
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.\r
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.\r
 nbproject/build-impl.xml.data.CRC32=d1b53a37\r
-nbproject/build-impl.xml.script.CRC32=1f81b2d9\r
-nbproject/build-impl.xml.stylesheet.CRC32=5c621a33@1.26.2.45\r
+nbproject/build-impl.xml.script.CRC32=61bf30ef\r
+nbproject/build-impl.xml.stylesheet.CRC32=1022abd3@1.30.1.45\r
 nbproject/groovy-build.xml.data.CRC32=d1b53a37\r
-nbproject/groovy-build.xml.script.CRC32=6721cc58\r
-nbproject/groovy-build.xml.stylesheet.CRC32=ad2b7201@1.7.1\r
+nbproject/groovy-build.xml.script.CRC32=542f299d\r
+nbproject/groovy-build.xml.stylesheet.CRC32=4de8406b@1.9.1\r
index de0aef9..ae01434 100644 (file)
@@ -20,7 +20,7 @@
                 <taskdef name="groovyc" classpath="${javac.classpath}" classname="org.codehaus.groovy.ant.Groovyc"/>\r
                 <property name="empty.dir" location="${build.dir}/empty"/>\r
                 <mkdir dir="${empty.dir}"/>\r
-                <groovyc srcdir="@{srcdir}" sourcepath="@{sourcepath}" destdir="@{destdir}" encoding="${source.encoding}" includes="@{includes}" excludes="@{excludes}">\r
+                <groovyc srcdir="@{srcdir}" sourcepath="@{sourcepath}" destdir="@{destdir}" encoding="${source.encoding}" includes="@{includes}" excludes="@{excludes}" includeAntRuntime="false">\r
                     <src>\r
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">\r
                             <include name="*"/>\r
                     <classpath>\r
                         <path path="@{classpath}"/>\r
                     </classpath>\r
-                    <javac srcdir="@{srcdir}" sourcepath="@{sourcepath}" destdir="@{destdir}" debug="@{debug}" deprecation="${javac.deprecation}" encoding="${source.encoding}" source="${javac.source}" target="${javac.target}" includes="@{includes}" excludes="@{excludes}" includeantruntime="false">\r
-                        <src>\r
-                            <dirset dir="@{gensrcdir}" erroronmissingdir="false">\r
-                                <include name="*"/>\r
-                            </dirset>\r
-                        </src>\r
-                        <classpath>\r
-                            <path path="@{classpath}"/>\r
-                        </classpath>\r
+                    <javac debug="@{debug}" deprecation="${javac.deprecation}" encoding="${source.encoding}" source="${javac.source}" target="${javac.target}">\r
                         <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>\r
                         <customize/>\r
                     </javac>\r
index 02d33e8..61aea9f 100644 (file)
@@ -59,6 +59,8 @@ public final class Config {
     private static final String P_NICOVIDEO_MAIL = "nicovideo.mail";
     private static final String P_NICOVIDEO_PASSWORD = "nicovideo.password";
     private static final String P_DOWNLOAD_RETRY = "download.retry";
+    private static final String P_DOWNLOAD_WAIT = "download.wait";
+    private static final int DEFAULT_WAIT_TIME = 15;
     private static final String P_DOWNLOAD_MYLIST = "download.mylist";
 
     /**
@@ -110,6 +112,7 @@ public final class Config {
         props.add(P_NICOVIDEO_MAIL + "=set.your@mail.address");
         props.add(P_NICOVIDEO_PASSWORD + "=set_your_password");
         props.add(P_DOWNLOAD_RETRY + "=3");
+        props.add(P_DOWNLOAD_WAIT + "=" + DEFAULT_WAIT_TIME);
         props.add(P_DOWNLOAD_MYLIST + "=");
 
         FileUtils.writeLines(file, props);
@@ -191,19 +194,6 @@ public final class Config {
         String res = properties.getProperty(P_FILE_ENCODING, System.getProperty("file.encoding"));
         return res;
     }
-//    /**
-//     * video/mp4のストリーム保存時、ファイルの拡張子に
-//     * .mp4を使用する(true)か、使用しない(.flv)か.
-//     * @return mp4拡張子を使用する場合true.
-//     */
-//    public boolean isExtMp4Use() {
-//        String res = properties.getProperty("download.ext.mp4");
-//        if ("false".equalsIgnoreCase(res)) {
-//            return false;
-//        }
-//        return true;
-//    }
-//
 
     /**
      * 失敗したダウンロードファイルの最大リトライ回数を取得する.
@@ -213,16 +203,19 @@ public final class Config {
         String res = properties.getProperty(P_DOWNLOAD_RETRY);
         return Integer.parseInt(res);
     }
-//
-//    /**
-//     * 上位何位までの動画をダウンロードするか.
-//     * @return ダウンロードするファイルの最下位.
-//     */
-//    public int getMaxDownloadNumber() {
-//        String res = properties.getProperty("download.number");
-//        return Integer.parseInt(res);
-//    }
-//
+
+    /**
+     * 前回ダウンロード開始から最低何秒後から次回ダウンロードを開始するか.
+     * @return 待ち時間(秒).
+     */
+    public int getWaitTime() {
+        int res = DEFAULT_WAIT_TIME;
+        try {
+            res = Integer.parseInt(properties.getProperty(P_DOWNLOAD_WAIT));
+        } catch (NumberFormatException e) {
+        }
+        return res;
+    }
 
     public List<String> getDownLoadMyList() {
         List<String> list = new ArrayList<String>();
index 22d2aff..9468374 100644 (file)
@@ -47,7 +47,7 @@ public class Main {
     public void start() {
         log.info("program start");
 
-        Config config = Config.getInstance();
+        final Config config = Config.getInstance();
         List<NicoContent> dailyList = new ArrayList<NicoContent>();
         ArrayList<List<NicoContent>> myLists = new ArrayList<List<NicoContent>>();
         NicoHttpClient instance = null;
@@ -118,10 +118,14 @@ public class Main {
                 if (prevDate != null) {
                     Date nowDate = Calendar.getInstance().getTime();
                     long sleep = nowDate.getTime() - prevDate.getTime();
-                    sleep = 5000 - sleep;
+                    sleep = config.getWaitTime() * 1000 - sleep;
                     if (sleep > 0) {
                         log.info("" + sleep + "ms sleep");
-                        Thread.sleep(sleep);
+                        try {
+                            Thread.sleep(sleep);
+                        } catch (InterruptedException e) {
+                            log.info("スリープ中断", e);
+                        }
                     }
                 }
                 prevDate = Calendar.getInstance().getTime();
index 9cdbf3e..dafe6a5 100644 (file)
@@ -19,10 +19,12 @@ public class ConfigTest {
     private static File CONFIG_FILE;
     private static File FEEDURL_FILE;
     private final File TEST_PROPERTY_FILE;
+    private final File TEST_PROPERTY_FILE_WAIT;
     private final File TEST_FEED_FILE;
 
     public ConfigTest() {
         TEST_PROPERTY_FILE = new File("test/testdata/nicobrowser.properties");
+        TEST_PROPERTY_FILE_WAIT = new File("testdata/waittimeconfig/nicobrowser.properties");
         TEST_FEED_FILE = new File("test/testdata/feedurl.txt");
     }
 
@@ -127,9 +129,13 @@ public class ConfigTest {
      * コンフィグ初期生成を行うためのヘルパーメソッド.
      */
     private void initConfig() {
+        initConfig(TEST_PROPERTY_FILE);
+    }
+
+    private void initConfig(File config) {
         try {
             Config.createNewConfigFiles();
-            FileUtils.copyFile(TEST_PROPERTY_FILE, CONFIG_FILE);
+            FileUtils.copyFile(config, CONFIG_FILE);
             FileUtils.copyFile(TEST_FEED_FILE, FEEDURL_FILE);
         } catch (Exception ex) {
             throw new RuntimeException(ex);
@@ -237,4 +243,27 @@ public class ConfigTest {
             System.out.println(nf);
         }
     }
+
+    /**
+     * Test of getWaitTime method, of class Config.
+     */
+    @Test
+    public void testGetWaitTime() {
+        System.out.println("getWaitTime");
+        initConfig();
+
+        Config config = Config.getInstance();
+        int res = config.getWaitTime();
+        assertEquals(10, res);
+    }
+
+    @Test
+    public void testGetWaitTimeWithSetting() {
+        System.out.println("getWaitTimeWithSetting");
+        initConfig(TEST_PROPERTY_FILE_WAIT);
+
+        Config config = Config.getInstance();
+        int res = config.getWaitTime();
+        assertEquals(20, res);
+    }
 }
diff --git a/testdata/waittimeconfig/nicobrowser.properties b/testdata/waittimeconfig/nicobrowser.properties
new file mode 100644 (file)
index 0000000..75c9ae4
--- /dev/null
@@ -0,0 +1,8 @@
+path.db=C:\\Documents and Settings\\yuki\\.nicobrowser\\db\r
+path.savefile=C:\\Documents and Settings\\yuki\\.nicobrowser\\flv\r
+encoding=UTF-8\r
+nicovideo.mail=set.your@mail.address\r
+nicovideo.password=set_your_password\r
+download.retry=3\r
+download.wait=20\r
+download.mylist=\r