OSDN Git Service

1.22rのソースからインポート.
authoryuki <yuki@c066991c-cf13-ec4a-a49a-846e61667af5>
Sat, 2 May 2009 08:48:17 +0000 (08:48 +0000)
committeryuki <yuki@c066991c-cf13-ec4a-a49a-846e61667af5>
Sat, 2 May 2009 08:48:17 +0000 (08:48 +0000)
git-svn-id: http://192.168.11.7/svn/saccubus/trunk@6 c066991c-cf13-ec4a-a49a-846e61667af5

22 files changed:
frontend/.classpath [new file with mode: 0644]
frontend/.jupiter [new file with mode: 0644]
frontend/.project [new file with mode: 0644]
frontend/App.jardesc [new file with mode: 0644]
frontend/src/psi/lib/swing/PopupRightClick.java [new file with mode: 0644]
frontend/src/saccubus/ConvertStopFlag.java [new file with mode: 0644]
frontend/src/saccubus/Converter.java [new file with mode: 0644]
frontend/src/saccubus/ConvertingSetting.java [new file with mode: 0644]
frontend/src/saccubus/FFmpegComboBoxModel.java [new file with mode: 0644]
frontend/src/saccubus/MainFrame.java [new file with mode: 0644]
frontend/src/saccubus/MainFrame_AboutBox.java [new file with mode: 0644]
frontend/src/saccubus/Prompt.java [new file with mode: 0644]
frontend/src/saccubus/Saccubus.java [new file with mode: 0644]
frontend/src/saccubus/conv/Chat.java [new file with mode: 0644]
frontend/src/saccubus/conv/ConvertToVideoHook.java [new file with mode: 0644]
frontend/src/saccubus/conv/NicoXMLReader.java [new file with mode: 0644]
frontend/src/saccubus/conv/Packet.java [new file with mode: 0644]
frontend/src/saccubus/icon.png [new file with mode: 0644]
frontend/src/saccubus/icon32.png [new file with mode: 0644]
frontend/src/saccubus/net/NicoClient.java [new file with mode: 0644]
frontend/src/saccubus/util/FileDropTarget.java [new file with mode: 0644]
frontend/src/saccubus/util/Util.java [new file with mode: 0644]

diff --git a/frontend/.classpath b/frontend/.classpath
new file mode 100644 (file)
index 0000000..38983e5
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="src" path="src"/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+       <classpathentry kind="output" path="classes"/>\r
+</classpath>\r
diff --git a/frontend/.jupiter b/frontend/.jupiter
new file mode 100644 (file)
index 0000000..71244db
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<Property>\r
+  <Review id="DEFAULT">\r
+    <Description>property.default.description</Description>\r
+    <Author/>\r
+    <CreationDate format="yyyy-MM-dd :: HH:mm:ss:SSS z">1970-01-01 :: 00:00:00:000 GMT-10:00</CreationDate>\r
+    <Directory>review</Directory>\r
+    <Reviewers/>\r
+    <Files/>\r
+    <FieldItems>\r
+      <FieldItem id="Type" default="item.label.unset">\r
+        <Entry name="item.label.unset" />        \r
+        <Entry name="item.type.label.codingStandards" />\r
+        <Entry name="item.type.label.programLogic" />\r
+        <Entry name="item.type.label.optimization" />\r
+        <Entry name="item.type.label.usability" />\r
+        <Entry name="item.type.label.clarity" />\r
+        <Entry name="item.type.label.missing" />\r
+        <Entry name="item.type.label.irrelevant" />\r
+        <Entry name="item.type.label.suggestion" />\r
+        <Entry name="item.type.label.other" />\r
+      </FieldItem>\r
+      <FieldItem id="Severity" default="item.label.unset">\r
+        <Entry name="item.label.unset" />\r
+        <Entry name="item.severity.label.critical" />\r
+        <Entry name="item.severity.label.major" />\r
+        <Entry name="item.severity.label.normal" />\r
+        <Entry name="item.severity.label.minor" />\r
+        <Entry name="item.severity.label.trivial" />\r
+      </FieldItem>\r
+      <FieldItem id="Resolution" default="item.label.unset">\r
+        <Entry name="item.label.unset" />\r
+        <Entry name="item.resolution.label.validNeedsfixing" />\r
+        <Entry name="item.resolution.label.validFixlater" />\r
+        <Entry name="item.resolution.label.validDuplicate" />\r
+        <Entry name="item.resolution.label.validWontfix" />\r
+        <Entry name="item.resolution.label.invalidWontfix" />\r
+        <Entry name="item.resolution.label.unsureValidity" />\r
+      </FieldItem>\r
+      <FieldItem id="Status" default="item.status.label.open">\r
+        <Entry name="item.status.label.open" />\r
+        <Entry name="item.status.label.resolved" />\r
+        <Entry name="item.status.label.closed" />\r
+        <Entry name="item.status.label.reopened" />        \r
+      </FieldItem>\r
+    </FieldItems>\r
+    <Filters>\r
+      <Phase name="phase.individual" enabled="true">\r
+        <Filter name="Interval" value="7" enabled="false" />\r
+        <Filter name="Reviewer" value="item.reviewer.label.automatic" enabled="true" />\r
+        <Filter name="Type" value="item.label.unset" enabled="false" />\r
+        <Filter name="Severity" value="item.label.unset" enabled="false" />\r
+        <Filter name="AssignedTo" value="" enabled="false" />\r
+        <Filter name="Resolution" value="item.label.unset" enabled="false" />\r
+        <Filter name="Status" value="item.status.label.open" enabled="false" />\r
+        <Filter name="File" value="" enabled="false" />\r
+      </Phase>\r
+      <Phase name="phase.team" enabled="true">\r
+        <Filter name="Interval" value="7" enabled="false" />\r
+        <Filter name="Reviewer" value="" enabled="false" />\r
+        <Filter name="Type" value="item.label.unset" enabled="false" />\r
+        <Filter name="Severity" value="item.label.unset" enabled="false" />\r
+        <Filter name="AssignedTo" value="" enabled="false" />\r
+        <Filter name="Resolution" value="item.label.unset" enabled="true" />\r
+        <Filter name="Status" value="item.status.label.open" enabled="false" />\r
+        <Filter name="File" value="" enabled="false" />\r
+      </Phase>\r
+      <Phase name="phase.rework" enabled="true">\r
+        <Filter name="Interval" value="7" enabled="false" />\r
+        <Filter name="Reviewer" value="" enabled="false" />\r
+        <Filter name="Type" value="item.label.unset" enabled="false" />\r
+        <Filter name="Severity" value="item.label.unset" enabled="false" />\r
+        <Filter name="AssignedTo" value="item.reviewer.label.automatic" enabled="true" />\r
+        <Filter name="Resolution" value="item.label.unset" enabled="false" />\r
+        <Filter name="Status" value="item.status.label.open" enabled="true" />\r
+        <Filter name="File" value="" enabled="false" />\r
+      </Phase>\r
+    </Filters>\r
+  </Review>\r
+</Property>
\ No newline at end of file
diff --git a/frontend/.project b/frontend/.project
new file mode 100644 (file)
index 0000000..9b9ee04
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>Saccubus</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+               <nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/frontend/App.jardesc b/frontend/App.jardesc
new file mode 100644 (file)
index 0000000..45ea177
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<jardesc>\r
+    <jar path="G:/prog/さきゅばす/Resources/Saccubus.jar"/>\r
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/Saccubus/App.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>\r
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>\r
+    <selectedProjects/>\r
+    <manifest generateManifest="true" mainClassHandleIdentifier="=Saccubus/src&lt;saccubus{Saccubus.java[Saccubus" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">\r
+        <sealing sealJar="false">\r
+            <packagesToSeal/>\r
+            <packagesToUnSeal/>\r
+        </sealing>\r
+    </manifest>\r
+    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">\r
+        <javaElement handleIdentifier="=Saccubus/src"/>\r
+    </selectedElements>\r
+</jardesc>\r
diff --git a/frontend/src/psi/lib/swing/PopupRightClick.java b/frontend/src/psi/lib/swing/PopupRightClick.java
new file mode 100644 (file)
index 0000000..6761a07
--- /dev/null
@@ -0,0 +1,140 @@
+package psi.lib.swing;
+
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.text.*;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\83|\83P\83\82\83\93\83Z\81[\83u\83f\81[\83^\83G\83f\83B\83^ for GBA
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾:
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2005 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼: \83Õ\81i\83v\83T\83C\81j\82Ì\8b»\96¡\8aÖ\90S\8bó\8aÔ
+ * </p>
+ * 
+ * @author PSI
+ * @version 1.0
+ */
+public class PopupRightClick implements MouseListener, ActionListener {
+       JPopupMenu popup;
+
+       JMenuItem CutMenu;
+
+       JMenuItem CopyMenu;
+
+       JMenuItem PasteMenu;
+
+       JTextComponent Owner;
+
+       public static final String Actin_Cut = "CO";
+
+       public static final String Actin_Copy = "CU";
+
+       public static final String Actin_Paste = "P";
+
+       private boolean pressed = false;
+
+       public PopupRightClick(JTextComponent owner) {
+               this.Owner = owner;
+               popup = new JPopupMenu("\83\81\83j\83\85\81[");
+               CopyMenu = new JMenuItem("\83R\83s\81[(CTRL + C)");
+               CopyMenu.setActionCommand(Actin_Copy);
+               CopyMenu.addActionListener(this);
+               popup.add(CopyMenu);
+
+               CutMenu = new JMenuItem("\90Ø\82è\8eæ\82è(CTRL + X)");
+               CutMenu.setActionCommand(Actin_Cut);
+               CutMenu.addActionListener(this);
+               popup.add(CutMenu);
+
+               PasteMenu = new JMenuItem("\93\\82è\95t\82¯(CTRL + V)");
+               PasteMenu.setActionCommand(Actin_Paste);
+               PasteMenu.addActionListener(this);
+               popup.add(PasteMenu);
+       }
+
+       /**
+        * Invoked when the mouse button has been clicked (pressed and released) on
+        * a component.
+        * 
+        * @param e
+        *            MouseEvent
+        * @todo \82±\82Ì java.awt.event.MouseListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void mouseClicked(MouseEvent e) {
+       }
+
+       /**
+        * Invoked when the mouse enters a component.
+        * 
+        * @param e
+        *            MouseEvent
+        * @todo \82±\82Ì java.awt.event.MouseListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void mouseEntered(MouseEvent e) {
+       }
+
+       /**
+        * Invoked when the mouse exits a component.
+        * 
+        * @param e
+        *            MouseEvent
+        * @todo \82±\82Ì java.awt.event.MouseListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void mouseExited(MouseEvent e) {
+               pressed = false;
+       }
+
+       /**
+        * Invoked when a mouse button has been pressed on a component.
+        * 
+        * @param e
+        *            MouseEvent
+        * @todo \82±\82Ì java.awt.event.MouseListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void mousePressed(MouseEvent e) {
+               pressed = true;
+       }
+
+       /**
+        * Invoked when a mouse button has been released on a component.
+        * 
+        * @param e
+        *            MouseEvent
+        * @todo \82±\82Ì java.awt.event.MouseListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void mouseReleased(MouseEvent e) {
+               // \89E\83N\83\8a\83b\83N\82Ì\8e\9e\82¾\82¯\82Ì\98b
+               if (pressed && SwingUtilities.isRightMouseButton(e)) {
+                       popup.show(e.getComponent(), e.getX(), e.getY());
+               }
+               pressed = false;
+       }
+
+       /**
+        * \82±\82Á\82¿\82ÍPopupMenu
+        * 
+        * @param e
+        *            ActionEvent
+        * @todo \82±\82Ì java.awt.event.ActionListener \83\81\83\\83b\83h\82ð\8eÀ\91\95
+        */
+       public void actionPerformed(ActionEvent e) {
+               String ActionCommand = e.getActionCommand();
+               if (ActionCommand.equals(Actin_Cut)) { // \83J\83b\83g
+                       Owner.cut();
+               } else if (ActionCommand.equals(Actin_Copy)) { // \83R\83s\81[
+                       Owner.copy();
+               } else if (ActionCommand.equals(Actin_Paste)) { // \93\\82è\95t\82¯
+                       Owner.paste();
+               }
+       }
+}
diff --git a/frontend/src/saccubus/ConvertStopFlag.java b/frontend/src/saccubus/ConvertStopFlag.java
new file mode 100644 (file)
index 0000000..0adc045
--- /dev/null
@@ -0,0 +1,71 @@
+package saccubus;
+
+import javax.swing.JButton;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class ConvertStopFlag {
+       private boolean Flag = false;
+
+       private boolean Finished = false;
+
+       private final JButton Button;
+
+       private final String WaitText;
+
+       private final String DoneText;
+
+       public ConvertStopFlag(final JButton button, final String stop_text,
+                       final String wait_text, final String done_text) {
+               Flag = false;
+               Finished = false;
+               Button = button;
+               if (button != null && stop_text != null) {
+                       button.setText(stop_text);
+               }
+               DoneText = done_text;
+               WaitText = wait_text;
+       }
+
+       public void stop() {
+               Flag = true;
+               if (Button != null && WaitText != null) {
+                       Button.setText(WaitText);
+                       Button.setEnabled(false);
+               }
+       }
+
+       public boolean needStop() {
+               return Flag;
+       }
+
+       public boolean isConverted() {
+               return Finished;
+       }
+
+       public void finished() {
+               Finished = true;
+               if (Button != null && DoneText != null) {
+                       Button.setText(DoneText);
+                       Button.setEnabled(true);
+               }
+       }
+}
diff --git a/frontend/src/saccubus/Converter.java b/frontend/src/saccubus/Converter.java
new file mode 100644 (file)
index 0000000..7107560
--- /dev/null
@@ -0,0 +1,534 @@
+package saccubus;
+
+import javax.swing.JLabel;
+import saccubus.net.NicoClient;
+import java.io.*;
+
+import saccubus.conv.ConvertToVideoHook;
+import java.net.URLEncoder;
+import java.util.Properties;
+
+/**
+ * <p>\83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·</p>
+ *
+ * <p>\90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91¶</p>
+ *
+ * <p>\92\98\8dì\8c : Copyright (c) 2007 PSI</p>
+ *
+ * <p>\89ï\8eÐ\96¼: </p>
+ *
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class Converter extends Thread {
+       private ConvertingSetting Setting;
+
+       private String Tag;
+
+       private String VideoID;
+
+       private String VideoTitle;
+
+       private String Time;
+
+       private JLabel Status;
+
+       private final ConvertStopFlag StopFlag;
+
+       private static final String TMP_COMMENT_MIDDLE_FILE = "./vhook.tmp";
+       private static final String VIDEO_URL_PARSER = "http://www.nicovideo.jp/watch/";
+
+       public Converter(String url, String time, ConvertingSetting setting,
+                       JLabel status, ConvertStopFlag flag) {
+               url = url.trim();
+               if(url.startsWith(VIDEO_URL_PARSER)){
+                       int index = url.indexOf('?',VIDEO_URL_PARSER.length());
+                       if(index >= 0){
+                               Tag = url.substring(VIDEO_URL_PARSER.length(),index);
+                       }else{
+                               Tag = url.substring(VIDEO_URL_PARSER.length());
+                       }
+               }else{
+                       Tag = url;
+               }
+               VideoID = "[" + Tag + "]";
+               Time = time;
+               Setting = setting;
+               Status = status;
+               StopFlag = flag;
+       }
+
+       private File VideoFile = null;
+
+       private File CommentFile = null;
+
+       private File ConvertedVideoFile = null;
+
+       private File CommentMiddleFile = null;
+
+       public void run() {
+               boolean converted = false;
+               try {
+                       if (!Setting.isSaveConverted() && !Setting.isSaveComment()
+                                       && !Setting.isSaveVideo()) {
+                               Status.setText("\89½\82à\82·\82é\82±\82Æ\82ª\82 \82è\82Ü\82¹\82ñ");
+                               return;
+                       }
+                       if (Setting.isSaveConverted()) {
+                               File a = new File(Setting.getFFmpegPath());
+                               if (!a.canRead()) {
+                                       Status.setText("FFmpeg\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B");
+                                       return;
+                               }
+                               if (Setting.getVhookPath().indexOf(' ') >= 0) {
+                                       Status.setText("\82·\82¢\82Ü\82¹\82ñ\81B\8c»\8dÝvhook\83\89\83C\83u\83\89\83\8a\82É\82Í\94¼\8ap\8bó\94\92\82Í\8eg\82¦\82Ü\82¹\82ñ\81B");
+                                       return;
+                               }
+                               a = new File(Setting.getVhookPath());
+                               if (!a.canRead()) {
+                                       Status.setText("Vhook\83\89\83C\83u\83\89\83\8a\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B");
+                                       return;
+                               }
+                               a = new File(Setting.getFontPath());
+                               if (!a.canRead()) {
+                                       Status.setText("\83t\83H\83\93\83g\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B");
+                                       return;
+                               }
+                               if (!detectOption()) {
+                                       Status.setText("\95Ï\8a·\83I\83v\83V\83\87\83\93\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B");
+                                       return;
+                               }
+                       } else {
+                               if (Setting.isDeleteVideoAfterConverting()) {
+                                       Status.setText("\95Ï\8a·\82µ\82È\82¢\82Ì\82É\81A\93®\89æ\8dí\8f\9c\82µ\82¿\82á\82Á\82Ä\97Ç\82¢\82ñ\82Å\82·\82©\81H");
+                                       return;
+                               }
+                               if (Setting.isDeleteCommentAfterConverting()) {
+                                       Status.setText("\95Ï\8a·\82µ\82È\82¢\82Ì\82É\81A\83R\83\81\83\93\83g\8dí\8f\9c\82µ\82¿\82á\82Á\82Ä\97Ç\82¢\82ñ\82Å\82·\82©\81H");
+                                       return;
+                               }
+                       }
+                       NicoClient client = null;
+                       if (Setting.isSaveVideo() || Setting.isSaveComment()) {
+                               if (Setting.getMailAddress() == null
+                                               || Setting.getPassword() == null
+                                               || Setting.getMailAddress().equals("")
+                                               || Setting.getPassword().equals("")) {
+                                       Status.setText("\83\81\81[\83\8b\83A\83h\83\8c\83X\82©\83p\83X\83\8f\81[\83h\82ª\8bó\94\92\82Å\82·\81B");
+                                       return;
+                               }
+                               if (Setting.useProxy()
+                                               && (Setting.getProxy() == null || Setting.getProxy()
+                                                               .length() <= 0)
+                                               && (Setting.getProxyPort() < 0 || Setting
+                                                               .getProxyPort() > 65535)) {
+                                       Status.setText("\83v\83\8d\83L\83V\82Ì\90Ý\92è\82ª\95s\90³\82Å\82·\81B");
+                                       return;
+                               }
+                               if (stopFlagReturn()) {
+                                       return;
+                               }
+                               Status.setText("\83\8d\83O\83C\83\93\92\86");
+                               String proxy;
+                               int proxy_port;
+                               if (Setting.useProxy()) {
+                                       proxy = Setting.getProxy();
+                                       proxy_port = Setting.getProxyPort();
+                               } else {
+                                       proxy = null;
+                                       proxy_port = -1;
+                               }
+                               client = new NicoClient(Setting.getMailAddress(), Setting
+                                               .getPassword(), StopFlag, proxy, proxy_port);
+
+                               if (!client.isLoggedIn()) {
+                                       Status.setText("\83\8d\83O\83C\83\93\82É\8e¸\94s");
+                                       return;
+                               }
+                               if (stopFlagReturn()) {
+                                       return;
+                               }
+                               /*\93®\89æ\82Ì\95Û\91¶*/
+                               if (!client.getVideoInfo(Tag, Time)) {
+                                       Status.setText(Tag + "\82Ì\8fî\95ñ\82Ì\8eæ\93¾\82É\8e¸\94s");
+                                       return;
+                               }
+                               if (stopFlagReturn()) {
+                                       return;
+                               }
+                               VideoTitle = client.getVideoTitle();
+                       }
+                       if (Setting.isSaveVideo()) {
+                               if (Setting.isVideoFixFileName()) {
+                                       Setting.getVideoFixFileNameFolder().mkdir();
+                                       VideoFile = new File(Setting.getVideoFixFileNameFolder(),
+                                                       VideoID + VideoTitle + ".flv");
+                               } else {
+                                       VideoFile = Setting.getVideoFile();
+                               }
+                               Status.setText("\93®\89æ\82Ì\83_\83E\83\93\83\8d\81[\83h\8aJ\8en\92\86");
+                               VideoFile = client.getVideo(VideoFile, Status);
+                               if (stopFlagReturn()) {
+                                       return;
+                               }
+                               if (VideoFile == null) {
+                                       Status.setText("\93®\89æ\82Ì\83_\83E\83\93\83\8d\81[\83h\82É\8e¸\94s");
+                                       return;
+                               }
+                       } else {
+                               if (Setting.isSaveConverted()) {
+                                       if (Setting.isVideoFixFileName()) {
+                                               if(!detectVideoTitle(Setting.getVideoFixFileNameFolder())){
+                                                       Status.setText("\93®\89æ\83t\83@\83C\83\8b\82ª\91\8dÝ\82µ\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                               VideoFile = new File(Setting
+                                                               .getVideoFixFileNameFolder(), VideoID
+                                                               + VideoTitle + ".flv");
+                                               if (!VideoFile.canRead()) {
+                                                       Status.setText("\93®\89æ\83t\83@\83C\83\8b\82ª\93Ç\82Ý\8d\9e\82ß\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                       } else {
+                                               VideoFile = Setting.getVideoFile();
+                                               if (!VideoFile.exists()) {
+                                                       Status.setText("\93®\89æ\83t\83@\83C\83\8b\82ª\91\8dÝ\82µ\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                       }
+                               }
+                       }
+
+                       if (stopFlagReturn()) {
+                               return;
+                       }
+
+                       if (Setting.isSaveComment()) {
+                               if (Setting.isCommentFixFileName()) {
+                                       Setting.getCommentFixFileNameFolder().mkdir();
+                                       CommentFile = new File(Setting
+                                                       .getCommentFixFileNameFolder(), VideoID
+                                                       + VideoTitle + ".xml");
+                               } else {
+                                       CommentFile = Setting.getCommentFile();
+                               }
+                               String back_comment = Setting.getBackComment();
+                               if (Setting.isFixCommentNum()) {
+                                       back_comment = client
+                                                       .getBackCommentFromLength(back_comment);
+                               }
+                               Status.setText("\83R\83\81\83\93\83g\82Ì\83_\83E\83\93\83\8d\81[\83h\8aJ\8en\92\86");
+                               CommentFile = client.getComment(CommentFile, Status,
+                                               back_comment);
+                               if (stopFlagReturn()) {
+                                       return;
+                               }
+                               if (CommentFile == null) {
+                                       Status.setText("\83R\83\81\83\93\83g\82Ì\83_\83E\83\93\83\8d\81[\83h\82É\8e¸\94s");
+                                       return;
+                               }
+                       } else {
+                               if (Setting.isSaveConverted()) {
+                                       if (Setting.isCommentFixFileName()) {
+                                               if(!detectVideoTitle(Setting.getCommentFixFileNameFolder())){
+                                                       Status.setText("\83R\83\81\83\93\83g\83t\83@\83C\83\8b\82ª\91\8dÝ\82µ\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                               CommentFile = new File(Setting
+                                                               .getCommentFixFileNameFolder(), VideoID
+                                                               + VideoTitle + ".xml");
+                                               if (!CommentFile.canRead()) {
+                                                       Status.setText("\83R\83\81\83\93\83g\83t\83@\83C\83\8b\82ª\93Ç\82Ý\8d\9e\82ß\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                       } else {
+                                               CommentFile = Setting.getCommentFile();
+                                               if (!CommentFile.exists()) {
+                                                       Status.setText("\83R\83\81\83\93\83g\83t\83@\83C\83\8b\82ª\91\8dÝ\82µ\82Ü\82¹\82ñ\81B");
+                                                       return;
+                                               }
+                                       }
+                               }
+                       }
+
+                       if (stopFlagReturn()) {
+                               return;
+                       }
+
+                       if (!Setting.isSaveConverted()) {
+                               Status.setText("\93®\89æ\81E\83R\83\81\83\93\83g\82ð\95Û\91\82µ\81A\95Ï\8a·\82Í\8ds\82¢\82Ü\82¹\82ñ\82Å\82µ\82½\81B");
+                               return;
+                       }
+                       CommentMiddleFile = new File(TMP_COMMENT_MIDDLE_FILE);
+                       Status.setText("\83R\83\81\83\93\83g\82Ì\92\86\8aÔ\83t\83@\83C\83\8b\82Ö\82Ì\95Ï\8a·\92\86");
+                       boolean conv = ConvertToVideoHook
+                                       .convert(CommentFile, CommentMiddleFile,
+                                                       Setting.getNG_ID(), Setting.getNG_Word());
+                       if (!conv) {
+                               Status.setText("\83R\83\81\83\93\83g\95Ï\8a·\82É\8e¸\94s\81B\82¨\82»\82ç\82­\90³\8bK\95\\8c»\82Ì\8aÔ\88á\82¢\81H");
+                               return;
+                       }
+                       if (stopFlagReturn()) {
+                               return;
+                       }
+                       Status.setText("\93®\89æ\82Ì\95Ï\8a·\82ð\8aJ\8en");
+                       /*\83r\83f\83I\96¼\82Ì\8am\92è*/
+                       if (Setting.isConvFixFileName()) {
+                               if (VideoTitle == null) {
+                                       Status.setText("\95Ï\8a·\8cã\82Ì\83r\83f\83I\83t\83@\83C\83\8b\96¼\82ª\8am\92è\82Å\82«\82Ü\82¹\82ñ\81B");
+                                       return;
+                               }
+                               Setting.getConvFixFileNameFolder().mkdir();
+                               String conv_name = VideoTitle;
+                               if (!Setting.isNotAddVideoID_Conv()) {//\95t\89Á\82µ\82È\82¢\82È\82ç
+                                       conv_name = VideoID + conv_name;
+                               }
+                               ConvertedVideoFile = new File(Setting
+                                               .getConvFixFileNameFolder(), conv_name + ExtOption);
+                       } else {
+                               String filename = Setting.getConvertedVideoFile().getPath();
+                               if (!filename.endsWith(ExtOption)) {
+                                       filename = filename.substring(0, filename.lastIndexOf('.'))
+                                                       + ExtOption;
+                                       ConvertedVideoFile = new File(filename);
+                               } else {
+                                       ConvertedVideoFile = Setting.getConvertedVideoFile();
+                               }
+                       }
+                       int code;
+                       if ((code = converting_video(TMP_COMMENT_MIDDLE_FILE)) == 0) {
+                               converted = true;
+                               Status.setText("\95Ï\8a·\82ª\90³\8fí\82É\8fI\97¹\82µ\82Ü\82µ\82½\81B");
+                       } else if (code == CODE_CONVERTING_ABORTED) { /*\92\86\92f*/
+
+                       } else {
+                               Status.setText("\95Ï\8a·\83G\83\89\81[\81F" + LastError);
+                       }
+
+               } finally {
+                       StopFlag.finished();
+                       if (CommentMiddleFile != null) {
+                               CommentMiddleFile.delete();
+                       }
+                       if (converted) {
+                               if (Setting.isDeleteCommentAfterConverting()
+                                               && CommentFile != null) {
+                                       CommentFile.delete();
+                               }
+                               if (Setting.isDeleteVideoAfterConverting() && VideoFile != null) {
+                                       VideoFile.delete();
+                               }
+                       }
+               }
+       }
+
+       String LastError;
+
+       private static final int CODE_CONVERTING_ABORTED = 100;
+
+       private int converting_video(String vhook_path) {
+               StringBuffer sb = new StringBuffer();
+               sb.append("\"");
+               sb.append(Setting.getFFmpegPath().replace("\\", "\\\\"));
+               sb.append("\"");
+               sb.append(" -y ");
+               sb.append(MainOption);
+               sb.append(" ");
+               sb.append(InOption);
+               sb.append(" -i ");
+               sb.append("\"");
+               sb.append(VideoFile.getPath().replace("\\", "\\\\"));
+               sb.append("\"");
+               sb.append(" ");
+               sb.append(OutOption);
+               sb.append(" \"");
+               sb.append(ConvertedVideoFile.getPath().replace("\\", "\\\\"));
+               sb.append("\"");
+               if (!Setting.isVhookDisabled()) {
+                       if(!addVhookSetting(sb, vhook_path)){
+                               return -1;
+                       }
+               }
+               String cmd = sb.substring(0);
+               System.out.println("arg:" + cmd);
+               try {
+                       System.out.println("\n\n----\nProcessing FFmpeg...\n----\n\n");
+                       Process process = Runtime.getRuntime().exec(cmd);
+                       BufferedReader ebr = new BufferedReader(new InputStreamReader(
+                                       process.getErrorStream()));
+                       String e;
+                       while ((e = ebr.readLine()) != null) {
+                               LastError = e;
+                               if (LastError.startsWith("frame=")) { //
+                                       Status.setText(LastError);
+                               } else if(!LastError.endsWith("No accelerated colorspace conversion found")){
+                                       System.out.println(e);
+                               }
+                               if (stopFlagReturn()) {
+                                       process.destroy();
+                                       return CODE_CONVERTING_ABORTED;
+                               }
+                       }
+                       process.waitFor();
+                       return process.exitValue();
+               } catch (InterruptedException ex) {
+                       ex.printStackTrace();
+                       return -1;
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+                       return -1;
+               }
+       }
+
+       private boolean addVhookSetting(StringBuffer sb, String vhook_path) {
+               try {
+                       sb.append(" -vfilters \"vhext=");
+                       sb.append(Setting.getVhookPath().replace("\\", "/"));
+                       sb.append("|");
+                       sb.append("--data-user:");
+                       sb.append(URLEncoder.encode(vhook_path.replace("\\","/"),
+                                       "Shift_JIS"));
+                       sb.append("|");
+                       sb.append("--font:");
+                       sb.append(URLEncoder.encode(
+                                       Setting.getFontPath().replace("\\","/"), "Shift_JIS"));
+                       sb.append("|");
+                       sb.append("--font-index:");
+                       sb.append(Setting.getFontIndex());
+                       sb.append("|");
+                       sb.append("--show-user:");
+                       sb.append(Setting.getVideoShowNum());
+                       sb.append("|");
+                       sb.append("--shadow:");
+                       sb.append(Setting.getShadowIndex());
+                       sb.append("|");
+                       if (Setting.isVhook_ShowConvertingVideo()) {
+                               sb.append("--enable-show-video");
+                               sb.append("|");
+                       }
+                       if (Setting.isFixFontSize()) {
+                               sb.append("--enable-fix-font-size");
+                               sb.append("|");
+                       }
+                       if (Setting.isOpaqueComment()) {
+                               sb.append("--enable-opaque-comment");
+                       }
+                       sb.append("\"");
+                       return true;
+               } catch (UnsupportedEncodingException e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       /*      
+        private static void addArrayToList(ArrayList<String> list,String array[]){
+        for(int i=0;i<array.length;i++){
+        list.add(array[i]);
+        }
+        }
+        private static String escape(String str){
+        byte[] buff = null;
+        try {
+        buff = str.getBytes("Shift_JIS");
+        } catch (UnsupportedEncodingException e) {
+        e.printStackTrace();
+        }
+        int cnt = 0;
+        for(int i=0;i<buff.length;i++){
+        if(buff[i] == '\\' || buff[i] == '{' || buff[i] == '}'){
+        cnt++;
+        }
+        cnt++;
+        }
+        byte[] obuff = new byte[cnt];
+        cnt = 0;
+        for(int i=0;i<buff.length;i++){
+        if(buff[i] == '\\' || buff[i] == '{' || buff[i] == '}'){
+        obuff[cnt] = '\\';
+        cnt++;
+        }
+        obuff[cnt] = buff[i];
+        cnt++;
+        }
+        try {
+        String out = new String(obuff,"Shift_JIS");
+        return out;
+        } catch (UnsupportedEncodingException e) {
+        e.printStackTrace();
+        }
+        return "";
+        }
+        */
+       public boolean isConverted() {
+               return StopFlag.isConverted();
+       }
+
+       private boolean stopFlagReturn() {
+               if (StopFlag.needStop()) {
+                       this.Status.setText("\92\86\8e~\82µ\82Ü\82µ\82½\81B");
+                       return true;
+               }
+               return false;
+       }
+
+       public ConvertStopFlag getStopFlag() {
+               return this.StopFlag;
+       }
+
+       private String ExtOption;
+
+       private String InOption;
+
+       private String OutOption;
+
+       private String MainOption;
+
+       private boolean detectOption() {
+               boolean ret;
+               if (Setting.getOptionFile() != null) {
+                       try {
+                               Properties prop = new Properties();
+                               prop.loadFromXML(new FileInputStream(Setting.getOptionFile()));
+                               ExtOption = prop.getProperty("EXT", null);
+                               InOption = prop.getProperty("IN", null);
+                               OutOption = prop.getProperty("OUT", null);
+                               MainOption = prop.getProperty("MAIN", null);
+                               if (ExtOption != null && InOption != null && OutOption != null
+                                               && MainOption != null) {
+                                       ret = true;
+                               } else {
+                                       ret = false;
+                               }
+                       } catch (IOException ex) {
+                               ex.printStackTrace();
+                               ret = false;
+                       }
+               } else {
+                       ExtOption = Setting.getCmdLineOptionExt();
+                       InOption = Setting.getCmdLineOptionIn();
+                       OutOption = Setting.getCmdLineOptionOut();
+                       MainOption = Setting.getCmdLineOptionMain();
+                       ret = true;
+               }
+               //\83I\83v\83V\83\87\83\93\82É\8ag\92£\8eq\82ð\8aÜ\82ñ\82Å\82µ\82Ü\82Á\82½\8fê\8d\87\82É\82à\91Î\89\9e\81\99
+               if(!ExtOption.startsWith(".")){
+                       ExtOption = "."+ExtOption;
+               }
+               return ret;
+       }
+       private boolean detectVideoTitle(File dir){
+               String list[] = dir.list();
+               if(list == null){
+                       return false;
+               }
+               for (int i = 0; i < list.length; i++) {
+                       if (list[i].startsWith(VideoID)) {
+                               VideoTitle = list[i].substring(VideoID.length(),
+                                               list[i].lastIndexOf("."));
+                               return true;
+                       }
+               }
+               return false;
+       }
+}
diff --git a/frontend/src/saccubus/ConvertingSetting.java b/frontend/src/saccubus/ConvertingSetting.java
new file mode 100644 (file)
index 0000000..d2084c6
--- /dev/null
@@ -0,0 +1,561 @@
+package saccubus;
+
+import java.util.Properties;
+import java.io.IOException;
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.File;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class ConvertingSetting {
+       public static final String[] ShadowKindArray = {
+               "00:\82È\82µ",
+               "01:\83j\83R\83j\83R\93®\89æ\95\97",
+               "02:\89E\89º",
+               "03:\88Í\82¢\8d\9e\82Ý"
+               };
+
+       private String MailAddress;
+
+       private String Password;
+
+       private boolean SaveVideo;
+
+       private File VideoFile;
+
+       private boolean SaveComment;
+
+       private File CommentFile;
+
+       private boolean SaveConverted;
+
+       private File ConvertedVideoFile;
+
+       private String FFmpegPath;
+
+       private String VhookPath;
+
+       private String CmdLineOptionExt;
+
+       private String CmdLineOptionIn;
+
+       private String CmdLineOptionOut;
+
+       private String CmdLineOptionMain;
+
+       private String FontPath;
+
+       private int FontIndex;
+
+       private String BackComment;
+
+       private boolean Vhook_ShowConvertingVideo;
+
+       private int VideoShowNum;
+
+       private boolean DeleteVideoAfterConverting;
+
+       private boolean VideoFixFileName;
+
+       private File VideoFixFileNameFolder;
+
+       private boolean DeleteCommentAfterConverting;
+
+       private boolean CommentFixFileName;
+
+       private File CommentFixFileNameFolder;
+
+       private boolean ConvFixFileName;
+
+       private File ConvFixFileNameFolder;
+
+       private String NG_Word;
+
+       private String NG_ID;
+
+       private boolean UseProxy;
+
+       private String Proxy;
+
+       private int ProxyPort;
+
+       private boolean FixFontSize;
+
+       private boolean FixCommentNum;
+
+       private boolean OpaqueComment;
+
+       private boolean NotAddVideoID_Conv;
+
+       private boolean UseOptionFile;
+
+       private File OptionFile;
+
+       private boolean DisableVhook;
+       
+       private int ShadowIndex;
+
+       public ConvertingSetting(String mailaddress, String password,
+                       boolean savevideo, String videofile, boolean savecomment,
+                       String commentfile, boolean saveconverted, String convvideofile,
+                       String videoshownum, String ffmpegpath, String vhookpath,
+                       String cmdlineoption_ext, String cmdlineoption_main,
+                       String cmdlineoption_in, String cmdlineoption_out,
+                       String backcomment, String fontpath, int font_index,
+                       boolean showconvvideo, boolean delete_video_after_conv,
+                       boolean video_fix_file_name, String video_fix_file_name_folder,
+                       boolean delete_comment_after_conv, boolean comment_fix_file_name,
+                       String comment_fix_file_name_folder, boolean not_add_videoid_conv,
+                       boolean conv_fix_file_name, String conv_fix_file_name_folder,
+                       String ngword, String ngid, boolean use_proxy, String proxy,
+                       int proxy_port, boolean fix_font_size, boolean fix_comment_num,
+                       boolean opaque_comment, File option_file, boolean disable_vhook,
+                       int shadow_index) {
+               MailAddress = mailaddress;
+               Password = password;
+               SaveVideo = savevideo;
+               if (videofile.lastIndexOf(".") < videofile.lastIndexOf("\\")) {
+                       videofile += ".flv";
+               }
+               VideoFile = new File(videofile);
+               SaveComment = savecomment;
+               if (commentfile.lastIndexOf(".") < commentfile.lastIndexOf("\\")) {
+                       commentfile += ".xml";
+               }
+               CommentFile = new File(commentfile);
+               SaveConverted = saveconverted;
+               if (convvideofile.lastIndexOf(".") < convvideofile.lastIndexOf("\\")) {
+                       convvideofile += ".avi";
+               }
+               ConvertedVideoFile = new File(convvideofile);
+               try {
+                       VideoShowNum = Integer.parseInt(videoshownum);
+               } catch (NumberFormatException ex) {
+                       VideoShowNum = 30;
+               }
+               FFmpegPath = ffmpegpath;
+               VhookPath = vhookpath;
+               CmdLineOptionExt = cmdlineoption_ext;
+               CmdLineOptionMain = cmdlineoption_main;
+               CmdLineOptionIn = cmdlineoption_in;
+               CmdLineOptionOut = cmdlineoption_out;
+               BackComment = backcomment;
+               FontPath = fontpath;
+               FontIndex = font_index;
+               Vhook_ShowConvertingVideo = showconvvideo;
+               DeleteVideoAfterConverting = delete_video_after_conv;
+               VideoFixFileName = video_fix_file_name;
+               VideoFixFileNameFolder = new File(video_fix_file_name_folder, "");
+               DeleteCommentAfterConverting = delete_comment_after_conv;
+               CommentFixFileName = comment_fix_file_name;
+               CommentFixFileNameFolder = new File(comment_fix_file_name_folder, "");
+               NotAddVideoID_Conv = not_add_videoid_conv;
+               ConvFixFileName = conv_fix_file_name;
+               ConvFixFileNameFolder = new File(conv_fix_file_name_folder, "");
+               NG_Word = ngword;
+               NG_ID = ngid;
+               UseProxy = use_proxy;
+               Proxy = proxy;
+               ProxyPort = proxy_port;
+               FixFontSize = fix_font_size;
+               FixCommentNum = fix_comment_num;
+               OpaqueComment = opaque_comment;
+               OptionFile = option_file;
+               DisableVhook = disable_vhook;
+               ShadowIndex = shadow_index;
+       }
+
+       public File getVideoFile() {
+               return VideoFile;
+       }
+
+       public File getCommentFile() {
+               return CommentFile;
+       }
+
+       public File getConvertedVideoFile() {
+               return ConvertedVideoFile;
+       }
+
+       public String getFFmpegPath() {
+               return FFmpegPath;
+       }
+
+       public String getVhookPath() {
+               return VhookPath;
+       }
+
+       public String getCmdLineOptionIn() {
+               return CmdLineOptionIn;
+       }
+
+       public String getFontPath() {
+               return FontPath;
+       }
+
+       public String getFontIndex() {
+               return Integer.toString(FontIndex);
+       }
+
+       public boolean isVhook_ShowConvertingVideo() {
+               return Vhook_ShowConvertingVideo;
+       }
+
+       public String getMailAddress() {
+               return MailAddress;
+       }
+
+       public String getPassword() {
+               return Password;
+       }
+
+       public boolean isSaveVideo() {
+               return SaveVideo;
+       }
+
+       public boolean isSaveComment() {
+               return SaveComment;
+       }
+
+       public boolean isSaveConverted() {
+               return SaveConverted;
+       }
+
+       public String getCmdLineOptionOut() {
+               return CmdLineOptionOut;
+       }
+
+       public String getBackComment() {
+               return BackComment;
+       }
+
+       public String getVideoShowNum() {
+               return Integer.toString(VideoShowNum);
+       }
+
+       public String getCmdLineOptionExt() {
+               return CmdLineOptionExt;
+       }
+
+       public String getCmdLineOptionMain() {
+               return CmdLineOptionMain;
+       }
+
+       public boolean isVideoFixFileName() {
+               return VideoFixFileName;
+       }
+
+       public boolean isDeleteVideoAfterConverting() {
+               return DeleteVideoAfterConverting;
+       }
+
+       public File getVideoFixFileNameFolder() {
+               return VideoFixFileNameFolder;
+       }
+
+       public boolean isCommentFixFileName() {
+               return CommentFixFileName;
+       }
+
+       public boolean isDeleteCommentAfterConverting() {
+               return DeleteCommentAfterConverting;
+       }
+
+       public File getCommentFixFileNameFolder() {
+               return CommentFixFileNameFolder;
+       }
+
+       public boolean isNotAddVideoID_Conv() {
+               return NotAddVideoID_Conv;
+       }
+
+       public boolean isConvFixFileName() {
+               return ConvFixFileName;
+       }
+
+       public File getConvFixFileNameFolder() {
+               return ConvFixFileNameFolder;
+       }
+
+       public String getNG_Word() {
+               return NG_Word;
+       }
+
+       public String getNG_ID() {
+               return NG_ID;
+       }
+
+       public boolean useProxy() {
+               return UseProxy;
+       }
+
+       public String getProxy() {
+               return Proxy;
+       }
+
+       public int getProxyPort() {
+               return ProxyPort;
+       }
+
+       public boolean isFixFontSize() {
+               return FixFontSize;
+       }
+
+       public boolean isFixCommentNum() {
+               return FixCommentNum;
+       }
+
+       public boolean isOpaqueComment() {
+               return OpaqueComment;
+       }
+
+       public boolean useOptionFile() {
+               return UseOptionFile;
+       }
+
+       public File getOptionFile() {
+               return OptionFile;
+       }
+
+       public boolean isVhookDisabled() {
+               return DisableVhook;
+       }
+       public int getShadowIndex(){
+               return ShadowIndex;
+       }
+
+       private static final String PROP_FILE = "./saccubus.xml";
+
+       private static final String PROP_MAILADDR = "MailAddress";
+       private static final String PROP_PASSWORD = "Password";
+
+       private static final String PROP_SAVE_VIDEO = "SaveVideoFile";
+
+       private static final String PROP_VIDEO_FILE = "VideoFile";
+
+       private static final String PROP_SAVE_COMMENT = "SaveCommentFile";
+
+       private static final String PROP_COMMENT_FILE = "CommentFile";
+
+       private static final String PROP_SAVE_CONVERTED = "SaveConvertedFile";
+
+       private static final String PROP_CONVERTED_FILE = "ConvertedFile";
+
+       private static final String PROP_FFMPEG_PATH = "FFnpegPath";
+
+       private static final String PROP_VHOOK_PATH = "VhookPath";
+
+       private static final String PROP_FONT_PATH = "FontPath";
+
+       private static final String PROP_FONT_INDEX = "FontIndex";
+
+       private static final String PROP_CMDLINE_EXT = "CMD_EXT";
+
+       private static final String PROP_CMDLINE_MAIN = "CMD_MAIN";
+
+       private static final String PROP_CMDLINE_IN = "CMD_IN";
+
+       private static final String PROP_CMDLINE_OUT = "CMD_OUT";
+
+       private static final String PROP_BACK_COMMENT = "BackComment";
+
+       private static final String PROP_SHOW_VIDEO = "ShowVideo";
+
+       private static final String PROP_SHOW_COMMENT = "ShowCommentNum";
+
+       private static final String PROP_VIDEO_FIX_FILE_NAME = "VideoFixFileName";
+
+       private static final String PROP_DEL_VIDEO_AFTER_CONV = "DeleteVideoAfterConv";
+
+       private static final String PROP_VIDEO_FIX_FILE_NAME_FOLDER = "VideoFixFileNameFolder";
+
+       private static final String PROP_DEL_COMMENT_AFTER_CONV = "DeleteCommentAfterConv";
+
+       private static final String PROP_COMMENT_FIX_FILE_NAME = "CommentFixFileName";
+
+       private static final String PROP_COMMENT_FIX_FILE_NAME_FOLDER = "CommentFixFileNameFolder";
+
+       private static final String PROP_NOT_ADD_VIDEOID_CONV = "NotAddVideoIDtoConverted";
+
+       private static final String PROP_CONV_FIX_FILE_NAME = "ConvFixFileName";
+
+       private static final String PROP_CONV_FIX_FILE_NAME_FOLDER = "ConvFixFileNameFolder";
+
+       private static final String PROP_NG_WORD = "NG_Word";
+
+       private static final String PROP_NG_ID = "NG_ID";
+
+       private static final String PROP_USE_PROXY = "UseProxy";
+
+       private static final String PROP_PROXY = "Proxy";
+
+       private static final String PROP_PROXY_PORT = "ProxyPort";
+
+       private static final String PROP_FIX_FONT_SIZE = "FixFontSize";
+
+       private static final String PROP_FIX_COMMENT_NUM = "FixCommentSize";
+
+       private static final String PROP_OPAQUE_COMMENT = "OpaqueComment";
+
+       private static final String PROP_OPTION_FILE = "OptionFile";
+
+       private static final String PROP_DISABLE_VHOOK = "VhookDisabled";
+       
+       private static final String PROP_SHADOW_INDEX = "ShadowIndex";
+
+       public static void saveSetting(ConvertingSetting setting) {
+               Properties prop = new Properties();
+               prop.setProperty(PROP_MAILADDR, setting.getMailAddress());
+               prop.setProperty(PROP_PASSWORD, setting.getPassword());
+               prop.setProperty(PROP_SAVE_VIDEO, Boolean.toString(setting
+                               .isSaveVideo()));
+               prop.setProperty(PROP_VIDEO_FILE, setting.getVideoFile().getPath());
+               prop.setProperty(PROP_SAVE_COMMENT, Boolean.toString(setting
+                               .isSaveComment()));
+               prop.setProperty(PROP_COMMENT_FILE, setting.getCommentFile().getPath());
+               prop.setProperty(PROP_SAVE_CONVERTED, Boolean.toString(setting
+                               .isSaveConverted()));
+               prop.setProperty(PROP_SHOW_COMMENT, setting.getVideoShowNum());
+               prop.setProperty(PROP_CONVERTED_FILE, setting.getConvertedVideoFile()
+                               .getPath());
+               prop.setProperty(PROP_FFMPEG_PATH, setting.getFFmpegPath());
+               prop.setProperty(PROP_VHOOK_PATH, setting.getVhookPath());
+               prop.setProperty(PROP_FONT_PATH, setting.getFontPath());
+               prop.setProperty(PROP_FONT_INDEX, setting.getFontIndex());
+               prop.setProperty(PROP_CMDLINE_EXT, setting.getCmdLineOptionExt());
+               prop.setProperty(PROP_CMDLINE_MAIN, setting.getCmdLineOptionMain());
+               prop.setProperty(PROP_CMDLINE_IN, setting.getCmdLineOptionIn());
+               prop.setProperty(PROP_CMDLINE_OUT, setting.getCmdLineOptionOut());
+               prop.setProperty(PROP_BACK_COMMENT, setting.getBackComment());
+               prop.setProperty(PROP_SHOW_VIDEO, Boolean.toString((setting
+                               .isVhook_ShowConvertingVideo())));
+               prop.setProperty(PROP_DEL_VIDEO_AFTER_CONV, Boolean.toString(setting
+                               .isDeleteVideoAfterConverting()));
+               prop.setProperty(PROP_VIDEO_FIX_FILE_NAME, Boolean.toString(setting
+                               .isVideoFixFileName()));
+               prop.setProperty(PROP_VIDEO_FIX_FILE_NAME_FOLDER, setting
+                               .getVideoFixFileNameFolder().getPath());
+               prop.setProperty(PROP_DEL_COMMENT_AFTER_CONV, Boolean.toString(setting
+                               .isDeleteCommentAfterConverting()));
+               prop.setProperty(PROP_COMMENT_FIX_FILE_NAME, Boolean.toString(setting
+                               .isCommentFixFileName()));
+               prop.setProperty(PROP_COMMENT_FIX_FILE_NAME_FOLDER, setting
+                               .getCommentFixFileNameFolder().getPath());
+
+               prop.setProperty(PROP_NOT_ADD_VIDEOID_CONV, Boolean.toString(setting
+                               .isNotAddVideoID_Conv()));
+
+               prop.setProperty(PROP_CONV_FIX_FILE_NAME, (new Boolean(setting
+                               .isConvFixFileName())).toString());
+               prop.setProperty(PROP_CONV_FIX_FILE_NAME_FOLDER, setting
+                               .getConvFixFileNameFolder().getPath());
+
+               prop.setProperty(PROP_NG_WORD, setting.getNG_Word());
+               prop.setProperty(PROP_NG_ID, setting.getNG_ID());
+               prop.setProperty(PROP_USE_PROXY, Boolean.toString(setting.useProxy()));
+               prop.setProperty(PROP_PROXY, setting.getProxy());
+               prop.setProperty(PROP_PROXY_PORT, Integer.toString(setting
+                               .getProxyPort()));
+               prop.setProperty(PROP_FIX_FONT_SIZE, Boolean.toString(setting
+                               .isFixFontSize()));
+               prop.setProperty(PROP_FIX_COMMENT_NUM, Boolean.toString(setting
+                               .isFixCommentNum()));
+               prop.setProperty(PROP_OPAQUE_COMMENT, Boolean.toString(setting
+                               .isOpaqueComment()));
+               if (setting.getOptionFile() != null) {
+                       prop.setProperty(PROP_OPTION_FILE, setting.getOptionFile()
+                                       .getPath());
+               }
+               prop.setProperty(PROP_DISABLE_VHOOK, Boolean.toString(setting
+                               .isVhookDisabled()));
+               prop.setProperty(PROP_SHADOW_INDEX, Integer.toString(setting.getShadowIndex()));
+               try {
+                       prop.storeToXML(new FileOutputStream(PROP_FILE), "settings");
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+               }
+       }
+
+       public static ConvertingSetting loadSetting(String user, String password) {
+               Properties prop = new Properties();
+               try {
+                       prop.loadFromXML(new FileInputStream(PROP_FILE));
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+               }
+               if (user == null) {
+                       user = prop.getProperty(PROP_MAILADDR, "");
+               }
+               if (password == null) {
+                       password = prop.getProperty(PROP_PASSWORD, "");
+               }
+               String option_file_name = prop.getProperty(PROP_OPTION_FILE, null);
+               File option_file = null;
+               if (option_file_name != null) {
+                       option_file = new File(option_file_name);
+               }
+               String win_dir = System.getenv("windir");
+               if(!win_dir.endsWith("\\")){
+                       win_dir = win_dir+"\\";
+               }
+               return new ConvertingSetting(user, password,
+                               Boolean.parseBoolean(prop.getProperty(PROP_SAVE_VIDEO, "true")),
+                               prop.getProperty(PROP_VIDEO_FILE, ".\\video.flv"),
+                                Boolean.parseBoolean(prop.getProperty(PROP_SAVE_COMMENT, "true")),
+                                prop.getProperty(PROP_COMMENT_FILE, ".\\comment.xml"),
+                                Boolean.parseBoolean(prop.getProperty(PROP_SAVE_CONVERTED, "true")),
+                                prop.getProperty(PROP_CONVERTED_FILE, ".\\video.avi"),
+                                prop.getProperty(PROP_SHOW_COMMENT, "30"),
+                                prop.getProperty(PROP_FFMPEG_PATH,".\\bin\\ffmpeg.exe"),
+                                prop.getProperty(PROP_VHOOK_PATH,".\\bin\\nicovideo.dll"),
+                                prop.getProperty(PROP_CMDLINE_EXT, "avi"),
+                                prop.getProperty(PROP_CMDLINE_MAIN,""),
+                                prop.getProperty(PROP_CMDLINE_IN, ""),
+                                prop.getProperty(PROP_CMDLINE_OUT,"-s 512x384 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -vcodec libxvid -qscale 3 -async 1"),
+                                prop.getProperty(PROP_BACK_COMMENT, "500"),
+                                prop.getProperty(PROP_FONT_PATH, win_dir+"Fonts\\msgothic.ttc"),
+                                Integer.parseInt(prop.getProperty(PROP_FONT_INDEX, "1")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_SHOW_VIDEO, "true")),
+                               Boolean.parseBoolean(prop.getProperty(PROP_DEL_VIDEO_AFTER_CONV, "false")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_VIDEO_FIX_FILE_NAME, "true")),
+                                prop.getProperty(PROP_VIDEO_FIX_FILE_NAME_FOLDER,".\\[out]video\\"),
+                                Boolean.parseBoolean(prop.getProperty(PROP_DEL_COMMENT_AFTER_CONV, "false")),
+                               Boolean.parseBoolean(prop.getProperty(PROP_COMMENT_FIX_FILE_NAME, "true")),
+                                prop.getProperty(PROP_COMMENT_FIX_FILE_NAME_FOLDER, ".\\[out]comment\\"),
+                               Boolean.parseBoolean(prop.getProperty(PROP_NOT_ADD_VIDEOID_CONV, "false")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_CONV_FIX_FILE_NAME,"true")),
+                                prop.getProperty(PROP_CONV_FIX_FILE_NAME_FOLDER, ".\\[out]converted\\"),
+                                prop.getProperty(PROP_NG_WORD, ""),
+                                prop.getProperty(PROP_NG_ID, ""),
+                                Boolean.parseBoolean(prop.getProperty(PROP_USE_PROXY, "false")),
+                                prop.getProperty(PROP_PROXY,""),
+                                Integer.parseInt(prop.getProperty(PROP_PROXY_PORT,"-1")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_FIX_FONT_SIZE, "true")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_FIX_COMMENT_NUM, "true")),
+                                Boolean.parseBoolean(prop.getProperty(PROP_OPAQUE_COMMENT,"false")),
+                                option_file, Boolean.parseBoolean(prop.getProperty(PROP_DISABLE_VHOOK,"false")),
+                               Integer.parseInt(prop.getProperty(PROP_SHADOW_INDEX,"1"),
+                                10)
+               );
+       }
+
+}
diff --git a/frontend/src/saccubus/FFmpegComboBoxModel.java b/frontend/src/saccubus/FFmpegComboBoxModel.java
new file mode 100644 (file)
index 0000000..687bb2b
--- /dev/null
@@ -0,0 +1,167 @@
+/**
+ * 
+ */
+package saccubus;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.DefaultComboBoxModel;
+
+/**
+ * @author Account01
+ * 
+ */
+public class FFmpegComboBoxModel extends DefaultComboBoxModel {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = -8948187216195366156L;
+
+       private final ArrayList<FFmpegSelectedItem> List = new ArrayList<FFmpegSelectedItem>(
+                       20);
+
+       private int Size = 0;
+
+       private int Index = 0;
+
+       public FFmpegComboBoxModel() {
+               reload();
+       }
+
+       /**
+        * \83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\82»\82Ì\91¼\82ð\8ds\82¤
+        */
+       private static final File OPTION_FOLDER = new File(".\\option\\");
+
+       private static final FFmpegSelectedItem DEFAULT_ITEM = new FFmpegSelectedItem(
+                       0, null, "\8aO\95\94\83t\83@\83C\83\8b\82ð\97p\82¢\82¸\81A\89º\82É\92¼\90Ú\93ü\97Í\82·\82é\81B");
+
+       protected void reload() {
+               File original_file = ((FFmpegSelectedItem) getSelectedItem()).getFile();
+               reload(original_file);
+       }
+
+       protected void reload(File original_file) {
+               int original_index = -1;
+               int index = 1;
+               // \83\8a\83X\83g\83N\83\8a\83A
+               List.clear();
+               // \83t\83@\83C\83\8b\83\8a\83X\83g\8dX\90V
+               File[] file_array = OPTION_FOLDER.listFiles();
+               if(file_array != null){
+                       for (int i = 0; i < file_array.length; i++) {
+                               File file = file_array[i];
+                               if (file.getName().endsWith(".xml")) {
+                                       List.add(new FFmpegSelectedItem(index, file, null));
+                                       // \91O\89ñ\8e¦\82µ\82Ä\82¢\82½\82Ì\82Æ\93¯\82\83t\83@\83C\83\8b\82ð\94­\8c©\81B
+                                       if (original_index < 0 && file.equals(original_file)) {
+                                               original_index = index;
+                                       }
+                                       index++;
+                               }
+                       }
+               }
+               // \8f\89\8aú\89»
+               if (original_index < 0) {
+                       Index = 0;
+               } else {
+                       Index = original_index;
+               }
+               Size = index;
+               this.fireContentsChanged(this, 0, Size);
+       }
+
+       /**
+        * \91I\82Î\82ê\82Ä\82¢\82é\83I\83u\83W\83F\83N\83g\82ð\95Ô\82·
+        */
+       public Object getSelectedItem() {
+               return getElementAt(Index);
+       }
+
+       public File getSelectedFile() {
+               if (Index == 0) {
+                       return null;
+               } else {
+                       return List.get(Index - 1).getFile();
+               }
+       }
+
+       /**
+        * \83I\83u\83W\83F\83N\83g\82©\82ç\81A\83C\83\93\83f\83b\83N\83X\82ð\92T\82·\81B
+        */
+       public void setSelectedItem(Object anItem) {
+               if (anItem == null) {
+                       Index = 0;
+                       return;
+               }
+               FFmpegSelectedItem item = (FFmpegSelectedItem) anItem;
+               Index = item.getIndex();
+       }
+
+       /**
+        * \83C\83\93\83f\83b\83N\83X\82©\82ç\83I\83u\83W\83F\83N\83g\82ð\95Ô\82·\81B
+        */
+       public Object getElementAt(int index) {
+               if (index == 0) {
+                       return DEFAULT_ITEM;
+               } else if (index < Size) {
+                       return List.get(index - 1);
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * \83T\83C\83Y\82ð\95Ô\82·\81B
+        */
+
+       public int getSize() {
+               return Size;
+       }
+
+       public boolean isFile() {
+               if (Index == 0) {
+                       return false;
+               } else {
+                       return true;
+               }
+       }
+
+}
+
+class FFmpegSelectedItem {
+       private final int Index;
+
+       private final File File;
+
+       private final String Name;
+
+       protected FFmpegSelectedItem(int index, File file, String name) {
+               Index = index;
+               File = file;
+               if (name == null) {
+                       String tmp = file.getName();
+                       Name = tmp.substring(0, tmp.lastIndexOf("."));
+               } else {
+                       Name = name;
+               }
+       }
+
+       public String toString() {
+               return Name;
+       }
+
+       protected File getFile() {
+               return File;
+       }
+
+       /**
+        * \8e¯\95Ê\82É\8eg\82¤
+        * 
+        * @return
+        */
+       protected int getIndex() {
+               return Index;
+       }
+}
diff --git a/frontend/src/saccubus/MainFrame.java b/frontend/src/saccubus/MainFrame.java
new file mode 100644 (file)
index 0000000..26b282c
--- /dev/null
@@ -0,0 +1,1856 @@
+package saccubus;
+
+import java.awt.*;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.File;
+import psi.lib.swing.PopupRightClick;
+import saccubus.util.FileDropTarget;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.Insets;
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+import java.awt.Font;
+import java.awt.Color;
+import javax.swing.JTabbedPane;
+import javax.swing.JComboBox;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import java.awt.event.KeyEvent;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class MainFrame extends JFrame {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2564486741331062989L;
+
+       public static final Image WinIcon = Toolkit.getDefaultToolkit()
+                       .createImage(saccubus.MainFrame.class.getResource("icon32.png"));
+
+       
+       JPanel contentPane;
+
+       BorderLayout borderLayout1 = new BorderLayout();
+
+       JMenuBar jMenuBar1 = new JMenuBar();
+
+       JMenu jMenuFile = new JMenu();
+
+       JMenuItem jMenuFileExit = new JMenuItem();
+
+       JMenu jMenuHelp = new JMenu();
+
+       JMenuItem jMenuHelpAbout = new JMenuItem();
+
+       JLabel statusBar = new JLabel();
+
+       JTabbedPane MainTabbedPane = new JTabbedPane();
+
+       JPanel SavingInfoTabPanel = new JPanel();
+
+       JPanel FFMpegTabPanel = new JPanel();
+
+       JPanel VideoInfoPanel = new JPanel();
+
+       JTextField VideoID_TextField = new JTextField();
+
+       JButton DoButton = new JButton();
+
+       public static final String DoButtonDefString = "\95Ï\8a·";
+
+       public static final String DoButtonStopString = "\92â\8e~";
+
+       public static final String DoButtonWaitString = "\91Ò\8b@";
+
+       GridBagLayout gridBagLayout2 = new GridBagLayout();
+
+       JPanel UserInfoPanel = new JPanel();
+
+       GridBagLayout gridBagLayout3 = new GridBagLayout();
+
+       JLabel MailAddrLabel = new JLabel();
+
+       JTextField MailAddrField = new JTextField();
+
+       JLabel PasswordLabel = new JLabel();
+
+       JPasswordField PasswordField = new JPasswordField();
+
+       JPanel CommentSaveInfoPanel = new JPanel();
+
+       GridBagLayout gridBagLayout4 = new GridBagLayout();
+
+       JCheckBox SavingVideoCheckBox = new JCheckBox();
+
+       JTextField VideoSavedFileField = new JTextField();
+
+       JButton ShowSavingVideoFileDialogButton = new JButton();
+
+       JCheckBox SavingCommentCheckBox = new JCheckBox();
+
+       JTextField CommentSavedFileField = new JTextField();
+
+       JButton ShowSavingCommentFileDialogButton = new JButton();
+
+       JPanel ConvertedVideoSavingInfoPanel = new JPanel();
+
+       GridBagLayout gridBagLayout5 = new GridBagLayout();
+
+       JCheckBox SavingConvertedVideoCheckBox = new JCheckBox();
+
+       JTextField ConvertedVideoSavedFileField = new JTextField();
+
+       JButton ShowSavingConvertedVideoFileDialogButton = new JButton();
+
+       GridBagLayout gridBagLayout6 = new GridBagLayout();
+
+       ButtonGroup VideoSaveButtonGroup = new ButtonGroup();
+
+       ButtonGroup CommentSaveButtonGroup = new ButtonGroup();
+
+       ButtonGroup ConvSaveButtonGroup = new ButtonGroup();
+
+       public MainFrame() {
+               try {
+                       setDefaultCloseOperation(EXIT_ON_CLOSE);
+                       jbInit();
+                       setPopup();
+                       setDropTarget();
+                       ConvertingSetting setting = ConvertingSetting.loadSetting(null,
+                                       null);
+                       this.setSetting(setting);
+               } catch (Exception exception) {
+                       exception.printStackTrace();
+               }
+       }
+
+       /**
+        * \83R\83\93\83|\81[\83l\83\93\83g\82Ì\8f\89\8aú\89»\81B
+        * 
+        * @throws java.lang.Exception
+        */
+       private void jbInit() throws Exception {
+               GridBagConstraints gridBagConstraints74 = new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 5), 0, 0);
+               gridBagConstraints74.gridwidth = 2;
+               GridBagConstraints gridBagConstraints73 = new GridBagConstraints();
+               gridBagConstraints73.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints73.gridy = 6;
+               gridBagConstraints73.weightx = 1.0;
+               gridBagConstraints73.gridwidth = 4;
+               gridBagConstraints73.insets = new Insets(0, 0, 0, 5);
+               gridBagConstraints73.gridx = 1;
+               GridBagConstraints gridBagConstraints72 = new GridBagConstraints();
+               gridBagConstraints72.gridx = 0;
+               gridBagConstraints72.anchor = GridBagConstraints.WEST;
+               gridBagConstraints72.insets = new Insets(0, 5, 0, 5);
+               gridBagConstraints72.fill = GridBagConstraints.NONE;
+               gridBagConstraints72.gridwidth = 1;
+               gridBagConstraints72.gridy = 6;
+               ShadowKindLabel = new JLabel();
+               ShadowKindLabel.setText("\89e\82Ì\8eí\97Þ");
+               ShadowKindLabel.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
+               GridBagConstraints gridBagConstraints71 = new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 6);
+               gridBagConstraints71.fill = GridBagConstraints.BOTH;
+               gridBagConstraints71.ipady = 0;
+               GridBagConstraints gridBagConstraints70 = new GridBagConstraints();
+               gridBagConstraints70.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints70.gridy = 1;
+               gridBagConstraints70.ipadx = 0;
+               gridBagConstraints70.ipady = 0;
+               gridBagConstraints70.weightx = 1.0;
+               gridBagConstraints70.insets = new Insets(0, 0, 0, 0);
+               gridBagConstraints70.gridx = 1;
+               GridBagConstraints gridBagConstraints69 = new GridBagConstraints();
+               gridBagConstraints69.gridx = 0;
+               gridBagConstraints69.ipadx = 0;
+               gridBagConstraints69.ipady = 0;
+               gridBagConstraints69.insets = new Insets(0, 5, 0, 5);
+               gridBagConstraints69.anchor = GridBagConstraints.WEST;
+               gridBagConstraints69.gridy = 1;
+               GridBagConstraints gridBagConstraints68 = new GridBagConstraints();
+               gridBagConstraints68.fill = GridBagConstraints.BOTH;
+               gridBagConstraints68.gridy = 0;
+               gridBagConstraints68.ipady = 0;
+               gridBagConstraints68.weightx = 1.0;
+               gridBagConstraints68.insets = new Insets(0, 0, 0, 0);
+               gridBagConstraints68.gridx = 1;
+               GridBagConstraints gridBagConstraints67 = new GridBagConstraints();
+               gridBagConstraints67.gridx = 0;
+               gridBagConstraints67.ipadx = 0;
+               gridBagConstraints67.ipady = 0;
+               gridBagConstraints67.insets = new Insets(0, 5, 0, 5);
+               gridBagConstraints67.anchor = GridBagConstraints.WEST;
+               gridBagConstraints67.gridy = 0;
+               GridBagConstraints gridBagConstraints66 = new GridBagConstraints();
+               gridBagConstraints66.gridx = 0;
+               gridBagConstraints66.insets = new Insets(0, 5, 5, 5);
+               gridBagConstraints66.anchor = GridBagConstraints.WEST;
+               gridBagConstraints66.gridwidth = 2;
+               gridBagConstraints66.gridy = 1;
+               ViewCommentLabel = new JLabel();
+               ViewCommentLabel.setText("\95\\8e¦\83R\83\81\83\93\83g\90\94");
+               GridBagConstraints gridBagConstraints65 = new GridBagConstraints();
+               gridBagConstraints65.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints65.gridy = 1;
+               gridBagConstraints65.weightx = 1.0;
+               gridBagConstraints65.gridwidth = 6;
+               gridBagConstraints65.insets = new Insets(0, 5, 5, 5);
+               gridBagConstraints65.gridx = 3;
+               GridBagConstraints gridBagConstraints64 = new GridBagConstraints(1, 1,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 0, 5), 0, 0);
+               gridBagConstraints64.gridy = 3;
+               gridBagConstraints64.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints64.gridx = 4;
+               GridBagConstraints gridBagConstraints63 = new GridBagConstraints(0, 4,
+                               2, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0);
+               gridBagConstraints63.gridy = 7;
+               gridBagConstraints63.gridx = 0;
+               gridBagConstraints63.gridwidth = 5;
+               GridBagConstraints gridBagConstraints62 = new GridBagConstraints(0, 3,
+                               2, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 5, 5), 0, 0);
+               gridBagConstraints62.gridy = 5;
+               gridBagConstraints62.gridx = 1;
+               gridBagConstraints62.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints62.insets = new Insets(0, 0, 5, 5);
+               gridBagConstraints62.gridwidth = 4;
+               GridBagConstraints gridBagConstraints61 = new GridBagConstraints(0, 2,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0);
+               gridBagConstraints61.gridy = 5;
+               gridBagConstraints61.gridx = 0;
+               gridBagConstraints61.fill = GridBagConstraints.VERTICAL;
+               gridBagConstraints61.anchor = GridBagConstraints.WEST;
+               gridBagConstraints61.gridwidth = 1;
+               GridBagConstraints gridBagConstraints60 = new GridBagConstraints(0, 1,
+                               1, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 0, 5), 0, 0);
+               gridBagConstraints60.gridy = 3;
+               gridBagConstraints60.gridx = 1;
+               gridBagConstraints60.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints60.insets = new Insets(0, 0, 0, 5);
+               gridBagConstraints60.gridwidth = 3;
+               GridBagConstraints gridBagConstraints59 = new GridBagConstraints(0, 0,
+                               2, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5), 0, 0);
+               gridBagConstraints59.gridy = 3;
+               gridBagConstraints59.insets = new Insets(5, 5, 5, 5);
+               gridBagConstraints59.gridx = 0;
+               gridBagConstraints59.fill = GridBagConstraints.NONE;
+               gridBagConstraints59.anchor = GridBagConstraints.WEST;
+               gridBagConstraints59.weightx = 0.0;
+               gridBagConstraints59.gridwidth = 1;
+               GridBagConstraints gridBagConstraints58 = new GridBagConstraints();
+               gridBagConstraints58.gridx = 0;
+               gridBagConstraints58.anchor = GridBagConstraints.WEST;
+               gridBagConstraints58.insets = new Insets(0, 5, 5, 5);
+               gridBagConstraints58.gridwidth = 5;
+               gridBagConstraints58.weightx = 1.0;
+               gridBagConstraints58.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints58.gridy = 0;
+               GridBagConstraints gridBagConstraints57 = new GridBagConstraints();
+               gridBagConstraints57.fill = GridBagConstraints.BOTH;
+               gridBagConstraints57.gridy = 2;
+               gridBagConstraints57.weightx = 1.0;
+               gridBagConstraints57.insets = new Insets(0, 0, 5, 5);
+               gridBagConstraints57.gridx = 1;
+               GridBagConstraints gridBagConstraints56 = new GridBagConstraints();
+               gridBagConstraints56.gridx = 0;
+               gridBagConstraints56.insets = new Insets(0, 5, 5, 5);
+               gridBagConstraints56.anchor = GridBagConstraints.WEST;
+               gridBagConstraints56.gridy = 2;
+               ExtOptionLabel = new JLabel();
+               ExtOptionLabel.setText("\8fo\97Í\93®\89æ\82Ì\8ag\92£\8eq");
+               GridBagConstraints gridBagConstraints55 = new GridBagConstraints();
+               gridBagConstraints55.gridx = 0;
+               gridBagConstraints55.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints55.weightx = 1.0;
+               gridBagConstraints55.gridwidth = 2;
+               gridBagConstraints55.gridy = 1;
+               GridBagConstraints gridBagConstraints54 = new GridBagConstraints(0, 2,
+                               2, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0);
+               gridBagConstraints54.gridwidth = 3;
+               GridBagConstraints gridBagConstraints53 = new GridBagConstraints(1, 3,
+                               2, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0);
+               gridBagConstraints53.gridy = 5;
+               gridBagConstraints53.gridheight = 1;
+               gridBagConstraints53.weightx = 1.0;
+               gridBagConstraints53.gridwidth = 1;
+               GridBagConstraints gridBagConstraints52 = new GridBagConstraints(2, 2,
+                               1, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0);
+               gridBagConstraints52.gridy = 4;
+               gridBagConstraints52.gridwidth = 1;
+               gridBagConstraints52.weightx = 1.0;
+               gridBagConstraints52.gridx = 1;
+               GridBagConstraints gridBagConstraints51 = new GridBagConstraints(2, 1,
+                               1, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0);
+               gridBagConstraints51.gridy = 3;
+               gridBagConstraints51.gridwidth = 1;
+               gridBagConstraints51.weightx = 1.0;
+               gridBagConstraints51.gridx = 1;
+               GridBagConstraints gridBagConstraints50 = new GridBagConstraints(0, 3,
+                               1, 1, 0.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 5, 5), 0, 0);
+               gridBagConstraints50.gridy = 5;
+               GridBagConstraints gridBagConstraints49 = new GridBagConstraints(0, 2,
+                               2, 1, 0.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 5, 5), 0, 0);
+               gridBagConstraints49.gridy = 4;
+               gridBagConstraints49.gridwidth = 1;
+               GridBagConstraints gridBagConstraints48 = new GridBagConstraints(0, 1,
+                               1, 1, 0.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 5, 5), 0, 0);
+               gridBagConstraints48.gridy = 3;
+               GridBagConstraints gridBagConstraints45 = new GridBagConstraints(3, 5,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.NONE, new Insets(0, 0, 5, 5), 0, 0);
+               gridBagConstraints45.gridy = 7;
+               GridBagConstraints gridBagConstraints44 = new GridBagConstraints(3, 3,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0, 0);
+               gridBagConstraints44.gridy = 5;
+               GridBagConstraints gridBagConstraints43 = new GridBagConstraints(0, 5,
+                               3, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(3, 50, 5, 5), 0, 0);
+               gridBagConstraints43.gridy = 7;
+               GridBagConstraints gridBagConstraints42 = new GridBagConstraints(0, 4,
+                               4, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.NONE, new Insets(0, 25, 0, 5), 0, 0);
+               gridBagConstraints42.gridy = 6;
+               GridBagConstraints gridBagConstraints41 = new GridBagConstraints(0, 3,
+                               3, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 50, 0, 5), 0, 0);
+               gridBagConstraints41.gridy = 5;
+               GridBagConstraints gridBagConstraints40 = new GridBagConstraints(0, 2,
+                               4, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.NONE, new Insets(0, 25, 0, 5), 0, 0);
+               gridBagConstraints40.gridy = 3;
+               GridBagConstraints gridBagConstraints39 = new GridBagConstraints();
+               gridBagConstraints39.gridx = 0;
+               gridBagConstraints39.insets = new Insets(0, 50, 0, 0);
+               gridBagConstraints39.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints39.weightx = 1.0;
+               gridBagConstraints39.gridwidth = 4;
+               gridBagConstraints39.gridy = 4;
+               GridBagConstraints gridBagConstraints35 = new GridBagConstraints();
+               gridBagConstraints35.fill = GridBagConstraints.BOTH;
+               gridBagConstraints35.weighty = 1.0;
+               gridBagConstraints35.weightx = 1.0;
+               GridBagConstraints gridBagConstraints33 = new GridBagConstraints();
+               gridBagConstraints33.gridx = 0;
+               gridBagConstraints33.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints33.weightx = 1.0;
+               gridBagConstraints33.insets = new Insets(0, 5, 5, 5);
+               gridBagConstraints33.gridwidth = 5;
+               gridBagConstraints33.gridy = 9;
+               GridBagConstraints gridBagConstraints26 = new GridBagConstraints();
+               gridBagConstraints26.gridx = 0;
+               gridBagConstraints26.gridwidth = 4;
+               gridBagConstraints26.insets = new Insets(0, 25, 0, 5);
+               gridBagConstraints26.weightx = 1.0;
+               gridBagConstraints26.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints26.gridy = 9;
+               GridBagConstraints gridBagConstraints25 = new GridBagConstraints();
+               gridBagConstraints25.gridx = 0;
+               gridBagConstraints25.gridwidth = 4;
+               gridBagConstraints25.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints25.insets = new Insets(0, 25, 0, 5);
+               gridBagConstraints25.weightx = 1.0;
+               gridBagConstraints25.gridy = 8;
+               GridBagConstraints gridBagConstraints24 = new GridBagConstraints(3, 10,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.NONE, new Insets(0, 0, 5, 5), 0, 0);
+               gridBagConstraints24.gridy = 14;
+               GridBagConstraints gridBagConstraints23 = new GridBagConstraints(3, 8,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0, 0);
+               gridBagConstraints23.gridy = 12;
+               GridBagConstraints gridBagConstraints22 = new GridBagConstraints(1, 6,
+                               4, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 0, 5), 0, 0);
+               gridBagConstraints22.gridy = 10;
+               GridBagConstraints gridBagConstraints21 = new GridBagConstraints(0, 10,
+                               3, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 50, 5, 5), 0, 0);
+               gridBagConstraints21.gridy = 14;
+               GridBagConstraints gridBagConstraints20 = new GridBagConstraints(0, 9,
+                               4, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 25, 0, 5), 0, 0);
+               gridBagConstraints20.gridy = 13;
+               GridBagConstraints gridBagConstraints19 = new GridBagConstraints(0, 8,
+                               3, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 50, 0, 5), 0, 0);
+               gridBagConstraints19.gridy = 12;
+               GridBagConstraints gridBagConstraints18 = new GridBagConstraints(0, 7,
+                               4, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 25, 0, 5), 0, 0);
+               gridBagConstraints18.gridy = 11;
+               GridBagConstraints gridBagConstraints17 = new GridBagConstraints(0, 6,
+                               1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 0, 5), 0, 0);
+               gridBagConstraints17.gridy = 10;
+               gridBagConstraints17.insets = new Insets(0, 50, 0, 5);
+               GridBagConstraints gridBagConstraints16 = new GridBagConstraints(0, 5,
+                               4, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                               GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0);
+               gridBagConstraints16.gridy = 7;
+               GridBagConstraints gridBagConstraints14 = new GridBagConstraints();
+               gridBagConstraints14.gridx = 0;
+               gridBagConstraints14.anchor = GridBagConstraints.WEST;
+               gridBagConstraints14.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints14.weightx = 1.0;
+               gridBagConstraints14.gridwidth = 5;
+               gridBagConstraints14.insets = new Insets(0, 5, 0, 5);
+               gridBagConstraints14.gridy = 8;
+               GridBagConstraints gridBagConstraints7 = new GridBagConstraints(0, 0,
+                               1, 1, 1.0, 1.0, GridBagConstraints.NORTH,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0);
+               gridBagConstraints7.weighty = 0.0;
+               GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+               gridBagConstraints6.gridx = 0;
+               gridBagConstraints6.weighty = 1.0;
+               gridBagConstraints6.weightx = 1.0;
+               gridBagConstraints6.insets = new Insets(0, 5, 0, 5);
+               gridBagConstraints6.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints6.anchor = GridBagConstraints.NORTH;
+               gridBagConstraints6.gridy = 1;
+               GridBagConstraints gridBagConstraints1 = new GridBagConstraints(0, 1,
+                               1, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0);
+               gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
+               gridBagConstraints1.anchor = GridBagConstraints.NORTH;
+               gridBagConstraints1.weighty = 1.0;
+               this.setIconImage(WinIcon);
+               contentPane = (JPanel) this.getContentPane();
+               contentPane.setLayout(borderLayout1);
+               setSize(new Dimension(400, 560));
+               setTitle("\82³\82«\82ã\82Î\82·");
+               this.addWindowListener(new MainFrame_this_windowAdapter(this));
+               statusBar.setText(" ");
+               jMenuFile.setText("\83t\83@\83C\83\8b");
+               jMenuFileExit.setText("\8fI\97¹");
+               jMenuFileExit
+                               .addActionListener(new MainFrame_jMenuFileExit_ActionAdapter(
+                                               this));
+               jMenuHelp.setText("\83w\83\8b\83v");
+               jMenuHelpAbout.setText("\83o\81[\83W\83\87\83\93\8fî\95ñ");
+               jMenuHelpAbout
+                               .addActionListener(new MainFrame_jMenuHelpAbout_ActionAdapter(
+                                               this));
+               VideoInfoPanel.setLayout(gridBagLayout1);
+               VideoID_TextField.setText("http://www.nicovideo.jp/watch/");
+               DoButton.setText(DoButtonDefString);
+               DoButton.addActionListener(new MainFrame_DoButton_actionAdapter(this));
+               SavingInfoTabPanel.setLayout(gridBagLayout2);
+               UserInfoPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory
+                               .createEtchedBorder(), "\83\86\81[\83U\90Ý\92è"));
+               UserInfoPanel.setLayout(gridBagLayout3);
+               MailAddrLabel.setText("\83\81\81[\83\8b\83A\83h\83\8c\83X");
+               PasswordLabel.setText("\83p\83X\83\8f\81[\83h");
+               CommentSaveInfoPanel.setBorder(BorderFactory.createTitledBorder(
+                               BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
+                               "\83R\83\81\83\93\83g\95Û\91\90Ý\92è", TitledBorder.LEADING, TitledBorder.TOP, new Font(
+                                               "MS UI Gothic", Font.PLAIN, 12), Color.black));
+               CommentSaveInfoPanel.setLayout(gridBagLayout4);
+               SavingVideoCheckBox.setText("\93®\89æ\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é");
+               ShowSavingVideoFileDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingVideoFileDialogButton
+                               .addActionListener(new MainFrame_ShowSavingVideoDialogButton_actionAdapter(
+                                               this));
+               SavingCommentCheckBox.setText("\83R\83\81\83\93\83g\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é");
+               ShowSavingCommentFileDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingCommentFileDialogButton
+                               .addActionListener(new MainFrame_ShowSavingCommentDialogButton_actionAdapter(
+                                               this));
+               ConvertedVideoSavingInfoPanel.setBorder(BorderFactory
+                               .createTitledBorder(BorderFactory.createEtchedBorder(),
+                                               "\83R\83\81\83\93\83g\95t\82«\93®\89æ\95Û\91\90Ý\92è"));
+               ConvertedVideoSavingInfoPanel.setLayout(gridBagLayout5);
+               SavingConvertedVideoCheckBox.setText("\83R\83\81\83\93\83g\95t\82«\93®\89æ\82É\95Ï\8a·\82·\82é");
+               ShowSavingConvertedVideoFileDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingConvertedVideoFileDialogButton
+                               .addActionListener(new MainFrame_ShowSavingConvertedVideoDialogButton_actionAdapter(
+                                               this));
+               FFMpegTabPanel.setLayout(gridBagLayout6);
+               PathSettingPanel.setBorder(BorderFactory.createTitledBorder(
+                               BorderFactory.createEtchedBorder(), "\83v\83\8d\83O\83\89\83\80\82Ì\88Ê\92u\82Ì\90Ý\92è"));
+               PathSettingPanel.setLayout(gridBagLayout7);
+               FFmpegPathLabel.setText("FFmpeg");
+               SettingFFmpegPathButton.setText("\8eQ\8fÆ");
+               SettingFFmpegPathButton
+                               .addActionListener(new MainFrame_SettingFFmpegPathButton_actionAdapter(
+                                               this));
+               VhookPathLabel.setText("\8ag\92£vhook\83\89\83C\83u\83\89\83\8a");
+               SettingVhookPathButton.setText("\8eQ\8fÆ");
+               SettingVhookPathButton
+                               .addActionListener(new MainFrame_SettingVhookPathButton_actionAdapter(
+                                               this));
+               VhookSettingPanel.setLayout(gridBagLayout8);
+               VhookSettingPanel.setBorder(BorderFactory.createTitledBorder(
+                               BorderFactory.createEtchedBorder(), "\8ag\92£vhook\83\89\83C\83u\83\89\83\8a\82Ì\90Ý\92è"));
+               FFmpegSettingPanel.setBorder(BorderFactory.createTitledBorder(
+                               BorderFactory.createEtchedBorder(), "FFmpeg\82Ì\90Ý\92è"));
+               FFmpegSettingPanel.setLayout(gridBagLayout9);
+               FontPathLabel.setText("\83t\83H\83\93\83g\83p\83X");
+               SettingFontPathButton.setText("\8eQ\8fÆ");
+               SettingFontPathButton
+                               .addActionListener(new MainFrame_SettingFontPathButton_actionAdapter(
+                                               this));
+               ShowConvVideoCheckBox.setText("\95Ï\8a·\92\86\82Ì\89æ\91\9c\82ð\95\\8e¦\82·\82é");
+               InLabel.setText("\93ü\97Í\83I\83v\83V\83\87\83\93");
+               OutLabel.setText("\8fo\97Í\83I\83v\83V\83\87\83\93");
+               CommentNumLabel.setText("\8eæ\93¾\83R\83\81\83\93\83g\90\94");
+               MainOptionLabel.setText("\83\81\83C\83\93\83I\83v\83V\83\87\83\93");
+               FontIndexLabel.setText("\83t\83H\83\93\83g\94Ô\8d\86");
+               VideoID_Label.setText("URL/ID");
+               WayBackLabel.setText("\89ß\8b\8e\83\8d\83O");
+               OpPanel.setLayout(new GridBagLayout());
+               Conv_SaveFileRadioButton.setText("\95Û\91\82·\82é\83t\83@\83C\83\8b\96¼\82ð\8ew\92è\82·\82é");
+               Conv_SaveFolderRadioButton.setText("\95Û\91\82·\82é\83t\83H\83\8b\83_\82ð\8ew\92è\82µ\81A\83t\83@\83C\83\8b\96¼\82Í\8e©\93®\82Å\8c\88\92è\82·\82é");
+               ShowSavingConvertedVideoFolderDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingConvertedVideoFolderDialogButton
+                               .addActionListener(new MainFrame_ShowSavingConvertedVideoFolderDialogButton_actionAdapter(
+                                               this));
+               ShowSavingVideoFolderDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingVideoFolderDialogButton
+                               .addActionListener(new MainFrame_ShowSavingVideoFolderDialogButton_actionAdapter(
+                                               this));
+               Video_SaveFolderRadioButton.setText("\95Û\91\82·\82é\83t\83H\83\8b\83_\82ð\8ew\92è\82µ\81A\83t\83@\83C\83\8b\96¼\82Í\8e©\93®\82Å\8c\88\92è\82·\82é");
+               Video_SaveFileRadioButton.setText("\95Û\91\82·\82é\83t\83@\83C\83\8b\96¼\82ð\8ew\92è\82·\82é");
+               Comment_SaveFileRadioButton.setText("\95Û\91\82·\82é\83t\83@\83C\83\8b\96¼\82ð\8ew\92è\82·\82é");
+               ShowSavingCommentFolderDialogButton.setText("\8eQ\8fÆ");
+               ShowSavingCommentFolderDialogButton
+                               .addActionListener(new MainFrame_ShowSavingCommentFolderDialogButton_actionAdapter(
+                                               this));
+               Comment_SaveFolderRadioButton.setText("\95Û\91\82·\82é\83t\83H\83\8b\83_\82ð\8ew\92è\82µ\81A\83t\83@\83C\83\8b\96¼\82Í\8e©\93®\82Å\8c\88\92è\82·\82é");
+               BasicInfoTabPanel.setLayout(gridBagLayout12);
+               jMenuBar1.add(jMenuFile);
+               jMenuFile.add(jMenuFileExit);
+               jMenuBar1.add(jMenuHelp);
+               jMenuHelp.add(jMenuHelpAbout);
+               setJMenuBar(jMenuBar1);
+               /* \83r\83f\83I\83O\83\8b\81[\83v */
+               VideoSaveButtonGroup.add(Video_SaveFileRadioButton);
+               VideoSaveButtonGroup.add(Video_SaveFolderRadioButton);
+
+               CommentSaveButtonGroup.add(Comment_SaveFileRadioButton);
+               CommentSaveButtonGroup.add(Comment_SaveFolderRadioButton);
+
+               ConvSaveButtonGroup.add(Conv_SaveFileRadioButton);
+               ConvSaveButtonGroup.add(Conv_SaveFolderRadioButton);
+
+               contentPane.add(statusBar, BorderLayout.SOUTH);
+               contentPane.add(MainTabbedPane, java.awt.BorderLayout.CENTER);
+               contentPane.add(VideoInfoPanel, java.awt.BorderLayout.NORTH);
+               UserInfoPanel.add(PasswordField, new GridBagConstraints(1, 1, 1, 1,
+                               1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                               new Insets(0, 5, 5, 5), 0, 0));
+               UserInfoPanel.add(MailAddrField, new GridBagConstraints(1, 0, 1, 1,
+                               1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                               new Insets(0, 5, 5, 5), 0, 0));
+               UserInfoPanel.add(PasswordLabel, new GridBagConstraints(0, 1, 1, 1,
+                               0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,
+                               new Insets(0, 5, 5, 0), 0, 0));
+               UserInfoPanel.add(MailAddrLabel, new GridBagConstraints(0, 0, 1, 1,
+                               0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,
+                               new Insets(0, 5, 5, 0), 0, 0));
+               PathSettingPanel.add(FFmpegPathField, new GridBagConstraints(0, 1, 1,
+                               1, 1.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 5, 0, 5), 0, 0));
+               PathSettingPanel.add(SettingFFmpegPathButton, gridBagConstraints74);
+               PathSettingPanel.add(FFmpegPathLabel, new GridBagConstraints(0, 0, 2,
+                               1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
+                               new Insets(0, 5, 5, 5), 0, 0));
+               PathSettingPanel.add(VhookPathField, new GridBagConstraints(0, 3, 1, 1,
+                               1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                               new Insets(0, 5, 5, 5), 0, 0));
+               PathSettingPanel.add(SettingVhookPathButton, new GridBagConstraints(1,
+                               3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                               GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0));
+               PathSettingPanel.add(VhookPathLabel, gridBagConstraints54);
+               FFmpegSettingPanel.add(CommandLineOutOptionField, gridBagConstraints53);
+               FFmpegSettingPanel.add(CommandLineInOptionField, gridBagConstraints52);
+               FFmpegSettingPanel.add(MainOptionField, gridBagConstraints51);
+               FFmpegSettingPanel.add(MainOptionLabel, gridBagConstraints48);
+               FFmpegSettingPanel.add(InLabel, gridBagConstraints49);
+               FFmpegSettingPanel.add(OutLabel, gridBagConstraints50);
+               FFmpegSettingPanel.add(getFFmpegOptionComboBoxPanel(),
+                               gridBagConstraints55);
+               FFmpegSettingPanel.add(ExtOptionLabel, gridBagConstraints56);
+               FFmpegSettingPanel.add(getExtOptionField(), gridBagConstraints57);
+               VideoInfoPanel.add(DoButton, gridBagConstraints71);
+               VideoInfoPanel.add(OpPanel, new GridBagConstraints(0, 0, 1, 1, 1.0,
+                               0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                               new Insets(0, 0, 0, 0), 0, 0));
+               OpPanel.add(VideoID_Label, gridBagConstraints67);
+               OpPanel.add(VideoID_TextField, gridBagConstraints68);
+               OpPanel.add(WayBackLabel, gridBagConstraints69);
+               OpPanel.add(WayBackField, gridBagConstraints70);
+               ConvertedVideoSavingInfoPanel.add(SavingConvertedVideoCheckBox,
+                               new GridBagConstraints(0, 0, 3, 1, 1.0, 0.0,
+                                               GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+                                               new Insets(0, 5, 0, 5), 0, 0));
+               MainTabbedPane.add(BasicInfoTabPanel, "\8aî\96{\90Ý\92è");
+               MainTabbedPane.add(SavingInfoTabPanel, "\95Û\91\90Ý\92è");
+               MainTabbedPane.add(FFMpegTabPanel, "\93®\89æ\90Ý\92è");
+               MainTabbedPane.addTab("\95Ï\8a·\90Ý\92è", null, getConvertingSettingPanel(), null);
+               SavingInfoTabPanel.add(getSaveInfoTabPaneEach(), gridBagConstraints35);
+               BasicInfoTabPanel.add(UserInfoPanel, gridBagConstraints7);
+               BasicInfoTabPanel.add(getProxyInfoPanel(), gridBagConstraints6);
+               VhookSettingPanel.add(FontPathLabel, gridBagConstraints59);
+               VhookSettingPanel.add(ShowConvVideoCheckBox, gridBagConstraints63);
+               VhookSettingPanel.add(FontPathField, gridBagConstraints60);
+               VhookSettingPanel.add(FontIndexField, gridBagConstraints62);
+               VhookSettingPanel.add(FontIndexLabel, gridBagConstraints61);
+               VhookSettingPanel.add(SettingFontPathButton, gridBagConstraints64);
+               VhookSettingPanel.add(getFixFontSizeCheckBox(), gridBagConstraints14);
+               VhookSettingPanel.add(getOpaqueCommentCheckBox(), gridBagConstraints33);
+               VhookSettingPanel.add(getNotUseVhookCheckBox(), gridBagConstraints58);
+               VhookSettingPanel.add(getViewCommentField(), gridBagConstraints65);
+               VhookSettingPanel.add(ViewCommentLabel, gridBagConstraints66);
+               VhookSettingPanel.add(ShadowKindLabel, gridBagConstraints72);
+               VhookSettingPanel.add(getShadowComboBox(), gridBagConstraints73);
+               CommentSaveInfoPanel.add(CommentNumLabel, gridBagConstraints17);
+               CommentSaveInfoPanel.add(SavingCommentCheckBox, gridBagConstraints16);
+               ConvertedVideoSavingInfoPanel.add(Conv_SaveFolderRadioButton,
+                               gridBagConstraints40);
+               CommentSaveInfoPanel.add(CommentNumField, gridBagConstraints22);
+               CommentSaveInfoPanel.add(Comment_SaveFolderRadioButton,
+                               gridBagConstraints18);
+               CommentSaveInfoPanel.add(Comment_SaveFileRadioButton,
+                               gridBagConstraints20);
+               CommentSaveInfoPanel.add(CommentSavedFolderField, gridBagConstraints19);
+               CommentSaveInfoPanel.add(ShowSavingCommentFolderDialogButton,
+                               gridBagConstraints23);
+               CommentSaveInfoPanel.add(CommentSavedFileField, gridBagConstraints21);
+               CommentSaveInfoPanel.add(ShowSavingCommentFileDialogButton,
+                               gridBagConstraints24);
+               CommentSaveInfoPanel.add(getDelCommentCheckBox(), gridBagConstraints25);
+               CommentSaveInfoPanel.add(getFixCommentNumCheckBox(),
+                               gridBagConstraints26);
+               ConvertedVideoSavingInfoPanel.add(Conv_SaveFileRadioButton,
+                               gridBagConstraints42);
+               ConvertedVideoSavingInfoPanel.add(ConvertedVideoSavedFolderField,
+                               gridBagConstraints41);
+               ConvertedVideoSavingInfoPanel.add(
+                               ShowSavingConvertedVideoFolderDialogButton,
+                               gridBagConstraints44);
+               ConvertedVideoSavingInfoPanel.add(ConvertedVideoSavedFileField,
+                               gridBagConstraints43);
+               ConvertedVideoSavingInfoPanel.add(
+                               ShowSavingConvertedVideoFileDialogButton, gridBagConstraints45);
+               ConvertedVideoSavingInfoPanel.add(getNotAddVideoID_ConvVideoCheckBox(),
+                               gridBagConstraints39);
+               FFMpegTabPanel.add(PathSettingPanel, new GridBagConstraints(0, 0, 1, 1,
+                               1.0, 0.0, GridBagConstraints.NORTHEAST,
+                               GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0));
+               FFMpegTabPanel.add(FFmpegSettingPanel, gridBagConstraints1);
+       }
+
+       private void setPopup() {
+               MainOptionField.addMouseListener(new PopupRightClick(
+                               this.MainOptionField));
+               CommandLineInOptionField.addMouseListener(new PopupRightClick(
+                               this.CommandLineInOptionField));
+               CommandLineOutOptionField.addMouseListener(new PopupRightClick(
+                               this.CommandLineOutOptionField));
+               CommentNumField.addMouseListener(new PopupRightClick(
+                               this.CommentNumField));
+
+               CommentSavedFileField.addMouseListener(new PopupRightClick(
+                               this.CommentSavedFileField));
+               CommentSavedFolderField.addMouseListener(new PopupRightClick(
+                               this.CommentSavedFolderField));
+
+               ConvertedVideoSavedFileField.addMouseListener(new PopupRightClick(
+                               this.ConvertedVideoSavedFileField));
+               ConvertedVideoSavedFolderField.addMouseListener(new PopupRightClick(
+                               this.ConvertedVideoSavedFolderField));
+
+               VideoSavedFileField.addMouseListener(new PopupRightClick(
+                               this.VideoSavedFileField));
+               VideoSavedFolderField.addMouseListener(new PopupRightClick(
+                               this.VideoSavedFolderField));
+
+               FFmpegPathField.addMouseListener(new PopupRightClick(
+                               this.FFmpegPathField));
+               VhookPathField
+                               .addMouseListener(new PopupRightClick(this.VhookPathField));
+               VideoID_TextField.addMouseListener(new PopupRightClick(
+                               this.VideoID_TextField));
+               ViewCommentField.addMouseListener(new PopupRightClick(
+                               this.ViewCommentField));
+               FontPathField.addMouseListener(new PopupRightClick(this.FontPathField));
+               MailAddrField.addMouseListener(new PopupRightClick(this.MailAddrField));
+               PasswordField.addMouseListener(new PopupRightClick(this.PasswordField));
+               WayBackField.addMouseListener(new PopupRightClick(this.WayBackField));
+
+               ProxyTextField
+                               .addMouseListener(new PopupRightClick(this.ProxyTextField));
+               ProxyPortTextField.addMouseListener(new PopupRightClick(
+                               this.ProxyPortTextField));
+
+               FontIndexField
+                               .addMouseListener(new PopupRightClick(this.FontIndexField));
+
+               NGWordTextField.addMouseListener(new PopupRightClick(
+                               this.NGWordTextField));
+               NGIDTextField.addMouseListener(new PopupRightClick(this.NGIDTextField));
+       }
+
+       private void setDropTarget() {
+               addTarget(VideoSavedFileField, false);
+               addTarget(VideoSavedFolderField, true);
+
+               addTarget(CommentSavedFileField, false);
+               addTarget(CommentSavedFolderField, true);
+
+               addTarget(ConvertedVideoSavedFileField, false);
+               addTarget(ConvertedVideoSavedFolderField, true);
+
+               addTarget(FFmpegPathField, false);
+               addTarget(VhookPathField, false);
+               addTarget(FontPathField, false);
+
+       }
+
+       private DropTarget addTarget(JTextField c, boolean isDir) {
+               return new DropTarget(c, DnDConstants.ACTION_COPY, new FileDropTarget(
+                               c, isDir), true);
+       }
+
+       private File CurrentDir = new File(".");
+
+       JPanel PathSettingPanel = new JPanel();
+
+       JLabel FFmpegPathLabel = new JLabel();
+
+       GridBagLayout gridBagLayout7 = new GridBagLayout();
+
+       JTextField FFmpegPathField = new JTextField();
+
+       JButton SettingFFmpegPathButton = new JButton();
+
+       JLabel VhookPathLabel = new JLabel();
+
+       JTextField VhookPathField = new JTextField();
+
+       JButton SettingVhookPathButton = new JButton();
+
+       JPanel VhookSettingPanel = new JPanel();
+
+       GridBagLayout gridBagLayout8 = new GridBagLayout();
+
+       JPanel FFmpegSettingPanel = new JPanel();
+
+       GridBagLayout gridBagLayout9 = new GridBagLayout();
+
+       JLabel FontPathLabel = new JLabel();
+
+       JTextField FontPathField = new JTextField();
+
+       JButton SettingFontPathButton = new JButton();
+
+       JCheckBox ShowConvVideoCheckBox = new JCheckBox();
+
+       JTextField CommandLineOutOptionField = new JTextField();
+
+       private void showSaveDialog(String title, JTextField field, boolean isSave,
+                       boolean isDir) {
+               JFileChooser chooser = new JFileChooser(CurrentDir);
+               chooser.setDialogTitle(title);
+               int code = 0;
+               if (isDir) {
+                       chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+               }
+               if (isSave) {
+                       code = chooser.showSaveDialog(this);
+               } else {
+                       code = chooser.showOpenDialog(this);
+               }
+               if (code == JFileChooser.APPROVE_OPTION) {
+                       if (isDir) {
+                               CurrentDir = chooser.getCurrentDirectory();
+                               field.setText(CurrentDir.getAbsolutePath());
+                       } else {
+                               File selected = chooser.getSelectedFile();
+                               CurrentDir = chooser.getCurrentDirectory();
+                               field.setText(selected.getAbsolutePath());
+                       }
+               }
+       }
+
+       private ConvertingSetting getSetting() {
+               int back_comment;
+               try {
+                       back_comment = Integer.parseInt(CommentNumField.getText());
+               } catch (NumberFormatException ex) {
+                       back_comment = 500;
+               }
+               int proxy_port;
+               try {
+                       proxy_port = Integer.parseInt(ProxyPortTextField.getText());
+               } catch (NumberFormatException e) {
+                       proxy_port = -1;
+               }
+               ConvertingSetting setting = new ConvertingSetting(MailAddrField
+                               .getText(), new String(PasswordField.getPassword()),
+                               SavingVideoCheckBox.isSelected(),
+                               VideoSavedFileField.getText(), SavingCommentCheckBox
+                                               .isSelected(), CommentSavedFileField.getText(),
+                               SavingConvertedVideoCheckBox.isSelected(),
+                               ConvertedVideoSavedFileField.getText(), ViewCommentField
+                                               .getText(), FFmpegPathField.getText(), VhookPathField
+                                               .getText(), ExtOptionField.getText(), MainOptionField
+                                               .getText(), CommandLineInOptionField.getText(),
+                               CommandLineOutOptionField.getText(), Integer
+                                               .toString(back_comment), FontPathField.getText(),
+                               Integer.parseInt(FontIndexField.getText()),
+                               ShowConvVideoCheckBox.isSelected(), DelVideoCheckBox
+                                               .isSelected(),
+                               Video_SaveFolderRadioButton.isSelected(), VideoSavedFolderField
+                                               .getText(), DelCommentCheckBox.isSelected(),
+                               Comment_SaveFolderRadioButton.isSelected(),
+                               CommentSavedFolderField.getText(),
+                               NotAddVideoID_ConvVideoCheckBox.isSelected(),
+                               Conv_SaveFolderRadioButton.isSelected(),
+                               ConvertedVideoSavedFolderField.getText(), NGWordTextField
+                                               .getText(), NGIDTextField.getText(), UseProxyCheckBox
+                                               .isSelected(), ProxyTextField.getText(), proxy_port,
+                               FixFontSizeCheckBox.isSelected(), FixCommentNumCheckBox
+                                               .isSelected(), OpaqueCommentCheckBox.isSelected(),
+                               FFmpegOptionModel.getSelectedFile(), NotUseVhookCheckBox
+                                               .isSelected(),ShadowComboBox.getSelectedIndex());
+               return setting;
+       }
+
+       private void setSetting(ConvertingSetting setting) {
+               MailAddrField.setText(setting.getMailAddress());
+               PasswordField.setText(setting.getPassword());
+               SavingVideoCheckBox.setSelected(setting.isSaveVideo());
+               VideoSavedFileField.setText(setting.getVideoFile().getPath());
+               SavingCommentCheckBox.setSelected(setting.isSaveComment());
+               CommentSavedFileField.setText(setting.getCommentFile().getPath());
+               SavingConvertedVideoCheckBox.setSelected(setting.isSaveConverted());
+               ConvertedVideoSavedFileField.setText(setting.getConvertedVideoFile()
+                               .getPath());
+               ViewCommentField.setText(setting.getVideoShowNum());
+               FFmpegPathField.setText(setting.getFFmpegPath());
+               VhookPathField.setText(setting.getVhookPath());
+               ExtOptionField.setText(setting.getCmdLineOptionExt());
+               MainOptionField.setText(setting.getCmdLineOptionMain());
+               CommandLineOutOptionField.setText(setting.getCmdLineOptionOut());
+               CommandLineInOptionField.setText(setting.getCmdLineOptionIn());
+               CommentNumField.setText(setting.getBackComment());
+               FontPathField.setText(setting.getFontPath());
+               FontIndexField.setText(setting.getFontIndex());
+               ShowConvVideoCheckBox
+                               .setSelected(setting.isVhook_ShowConvertingVideo());
+               VideoSavedFolderField.setText(setting.getVideoFixFileNameFolder()
+                               .getPath());
+               CommentSavedFolderField.setText(setting.getCommentFixFileNameFolder()
+                               .getPath());
+               ConvertedVideoSavedFolderField.setText(setting
+                               .getConvFixFileNameFolder().getPath());
+               DelVideoCheckBox.setSelected(setting.isDeleteVideoAfterConverting());
+               DelCommentCheckBox
+                               .setSelected(setting.isDeleteCommentAfterConverting());
+               NotAddVideoID_ConvVideoCheckBox.setSelected(setting
+                               .isNotAddVideoID_Conv());
+               if (setting.isVideoFixFileName()) {
+                       Video_SaveFileRadioButton.setSelected(false);
+                       Video_SaveFolderRadioButton.setSelected(true);
+               } else {
+                       Video_SaveFileRadioButton.setSelected(true);
+                       Video_SaveFolderRadioButton.setSelected(false);
+               }
+               if (setting.isCommentFixFileName()) {
+                       Comment_SaveFileRadioButton.setSelected(false);
+                       Comment_SaveFolderRadioButton.setSelected(true);
+               } else {
+                       Comment_SaveFileRadioButton.setSelected(true);
+                       Comment_SaveFolderRadioButton.setSelected(false);
+               }
+               if (setting.isConvFixFileName()) {
+                       Conv_SaveFileRadioButton.setSelected(false);
+                       Conv_SaveFolderRadioButton.setSelected(true);
+               } else {
+                       Conv_SaveFileRadioButton.setSelected(true);
+                       Conv_SaveFolderRadioButton.setSelected(false);
+               }
+               NGWordTextField.setText(setting.getNG_Word());
+               NGIDTextField.setText(setting.getNG_ID());
+               // \83v\83\8d\83L\83V\8aÖ\98A
+               UseProxyCheckBox.setSelected(setting.useProxy());
+               ProxyTextField.setText(setting.getProxy());
+               int proxy_port = setting.getProxyPort();
+               if (proxy_port >= 0 && proxy_port <= 65535) {
+                       ProxyPortTextField.setText(Integer.toString(proxy_port));
+               } else {
+                       ProxyPortTextField.setText("");
+               }
+               FixFontSizeCheckBox.setSelected(setting.isFixFontSize());
+               FixCommentNumCheckBox.setSelected(setting.isFixCommentNum());
+               OpaqueCommentCheckBox.setSelected(setting.isOpaqueComment());
+               FFmpegOptionModel.reload(setting.getOptionFile());
+               NotUseVhookCheckBox.setSelected(setting.isVhookDisabled());
+               ShadowComboBox.setSelectedIndex(setting.getShadowIndex());
+       }
+
+       /**
+        * [\83t\83@\83C\83\8b|\8fI\97¹] \83A\83N\83V\83\87\83\93\82ª\8eÀ\8ds\82³\82ê\82Ü\82µ\82½\81B
+        * 
+        * @param actionEvent
+        *            ActionEvent
+        */
+       void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
+               ConvertingSetting setting = this.getSetting();
+               ConvertingSetting.saveSetting(setting);
+               System.exit(0);
+       }
+
+       /**
+        * [\83w\83\8b\83v|\83o\81[\83W\83\87\83\93\8fî\95ñ] \83A\83N\83V\83\87\83\93\82ª\8eÀ\8ds\82³\82ê\82Ü\82µ\82½\81B
+        * 
+        * @param actionEvent
+        *            ActionEvent
+        */
+       void jMenuHelpAbout_actionPerformed(ActionEvent actionEvent) {
+               MainFrame_AboutBox dlg = new MainFrame_AboutBox(this);
+               dlg.pack();
+               dlg.setLocationRelativeTo(this);
+               dlg.setVisible(true);
+       }
+
+       /* \95Ï\8a·\81E\95Û\91\82·\82é */
+       Converter Converter = null;
+
+       JTextField CommandLineInOptionField = new JTextField();
+
+       JLabel InLabel = new JLabel();
+
+       JLabel OutLabel = new JLabel();
+
+       JLabel CommentNumLabel = new JLabel();
+
+       JTextField CommentNumField = new JTextField();
+
+       JLabel MainOptionLabel = new JLabel();
+
+       JTextField MainOptionField = new JTextField();
+
+       JLabel FontIndexLabel = new JLabel();
+
+       JTextField FontIndexField = new JTextField();
+
+       JLabel VideoID_Label = new JLabel();
+
+       JLabel WayBackLabel = new JLabel();
+
+       JTextField WayBackField = new JTextField();
+
+       GridBagLayout gridBagLayout10 = new GridBagLayout();
+
+       GridBagLayout gridBagLayout11 = new GridBagLayout();
+
+       GridBagLayout gridBagLayout1 = new GridBagLayout();
+
+       JPanel OpPanel = new JPanel();
+
+       GridLayout gridLayout1 = new GridLayout();
+
+       JRadioButton Conv_SaveFileRadioButton = new JRadioButton();
+
+       JRadioButton Conv_SaveFolderRadioButton = new JRadioButton();
+
+       JTextField ConvertedVideoSavedFolderField = new JTextField();
+
+       JButton ShowSavingConvertedVideoFolderDialogButton = new JButton();
+
+       JTextField VideoSavedFolderField = new JTextField();
+
+       JButton ShowSavingVideoFolderDialogButton = new JButton();
+
+       JRadioButton Video_SaveFolderRadioButton = new JRadioButton();
+
+       JRadioButton Video_SaveFileRadioButton = new JRadioButton();
+
+       JRadioButton Comment_SaveFileRadioButton = new JRadioButton();
+
+       JTextField CommentSavedFolderField = new JTextField();
+
+       JButton ShowSavingCommentFolderDialogButton = new JButton();
+
+       JRadioButton Comment_SaveFolderRadioButton = new JRadioButton();
+
+       JPanel BasicInfoTabPanel = new JPanel();
+
+       GridBagLayout gridBagLayout12 = new GridBagLayout();
+
+       private JPanel ConvertingSettingPanel = null;
+
+       private JPanel NGWordSettingPanel = null;
+
+       private JLabel NGWordLavel = null;
+
+       private JTextField NGWordTextField = null;
+
+       private JLabel NGIDLabel = null;
+
+       private JTextField NGIDTextField = null;
+
+       private JPanel ProxyInfoPanel = null;
+
+       private JLabel ProxyLabel = null;
+
+       private JTextField ProxyTextField = null;
+
+       private JLabel ProxyPortLabel = null;
+
+       private JTextField ProxyPortTextField = null;
+
+       private JCheckBox UseProxyCheckBox = null;
+
+       private JCheckBox FixFontSizeCheckBox = null;
+
+       private JCheckBox DelVideoCheckBox = null;
+
+       private JCheckBox DelCommentCheckBox = null;
+
+       private JCheckBox FixCommentNumCheckBox = null;
+
+       private JCheckBox OpaqueCommentCheckBox = null;
+
+       private JPanel VideoSaveInfoPanel = null;
+
+       private JTabbedPane SaveInfoTabPaneEach = null;
+
+       private JPanel VideoSavingTabbedPanel = null;
+
+       private JPanel ConvertedVideoSavingTabbedPanel = null;
+
+       private JCheckBox NotAddVideoID_ConvVideoCheckBox = null;
+
+       private JComboBox FFmpegOptionComboBox = null;
+
+       private JButton FFmpegOptionReloadButton = null;
+
+       private JPanel FFmpegOptionComboBoxPanel = null;
+
+       public void DoButton_actionPerformed(ActionEvent e) {
+               if (Converter == null || Converter.isConverted()) {
+                       Converter = new Converter(VideoID_TextField.getText(), WayBackField
+                                       .getText(), this.getSetting(), this.statusBar,
+                                       new ConvertStopFlag(this.DoButton, DoButtonStopString,
+                                                       DoButtonWaitString, DoButtonDefString));
+                       Converter.start();
+               } else { /* \8aJ\8en\82µ\82Ä\82¢\82é\82Ì\82Å\81A\83X\83g\83b\83v\82·\82é\81B */
+                       final ConvertStopFlag flag = Converter.getStopFlag();
+                       if (!flag.needStop()) { /* \82Ü\82¾\83X\83g\83b\83v\82µ\82Ä\82¢\82È\82¢\81B */
+                               flag.stop();
+                       }
+               }
+       }
+
+       /* \83r\83f\83I\81E\83Z\81[\83u\83_\83C\83A\83\8d\83O */
+       public void ShowSavingVideoDialogButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("\93®\89æ\82Ì\95Û\91\90æ(\83t\83@\83C\83\8b)", VideoSavedFileField, true, false);
+       }
+
+       /* \83R\83\81\83\93\83g\81E\83Z\81[\83u\83_\83C\83A\83\8d\83O */
+       public void ShowSavingCommentDialogButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("\83R\83\81\83\93\83g\82Ì\95Û\91\90æ(\83t\83@\83C\83\8b)", CommentSavedFileField, true, false);
+       }
+
+       /* \83R\83\81\83\93\83g\95t\82«\83r\83f\83I\81E\83Z\81[\83u\83_\83C\83A\83\8d\83O */
+       public void ShowSavingConvertedVideoDialogButton_actionPerformed(
+                       ActionEvent e) {
+               showSaveDialog("\83R\83\81\83\93\83g\95t\82«\93®\89æ\82Ì\95Û\91\90æ(\83t\83@\83C\83\8b)", ConvertedVideoSavedFileField,
+                               true, false);
+       }
+
+       /* FFmpeg\82Ö\82Ì\83p\83X */
+       public void SettingFFmpegPathButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("FFmpeg\82Ö\82Ì\83p\83X", FFmpegPathField, false, false);
+       }
+
+       public void SettingVhookPathButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("\8ag\92£vhook\83\89\83C\83u\83\89\83\8a\82Ö\82Ì\83p\83X", VhookPathField, false, false);
+       }
+
+       public void SettingFontPathButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("\83t\83H\83\93\83g\82Ö\82Ì\83p\83X", FontPathField, false, false);
+       }
+
+       public void this_windowClosing(WindowEvent e) {
+               this.jMenuFileExit_actionPerformed(null);
+       }
+
+       public void ShowSavingConvertedVideoFolderDialogButton_actionPerformed(
+                       ActionEvent e) {
+               /* \83t\83H\83\8b\83_ */
+               showSaveDialog("\83R\83\81\83\93\83g\95t\82«\93®\89æ\82Ì\95Û\91\90æ(\83t\83H\83\8b\83_)", ConvertedVideoSavedFolderField,
+                               true, true);
+       }
+
+       public void ShowSavingCommentFolderDialogButton_actionPerformed(
+                       ActionEvent e) {
+               showSaveDialog("\83R\83\81\83\93\83g\82Ì\95Û\91\90æ(\83t\83H\83\8b\83_)", CommentSavedFolderField, true, true);
+       }
+
+       public void ShowSavingVideoFolderDialogButton_actionPerformed(ActionEvent e) {
+               showSaveDialog("\93®\89æ\82Ì\95Û\91\90æ(\83t\83H\83\8b\83_)", VideoSavedFolderField, true, true);
+       }
+
+       /**
+        * This method initializes ConvertingSettingPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getConvertingSettingPanel() {
+               if (ConvertingSettingPanel == null) {
+                       GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
+                       gridBagConstraints11.weighty = 1.0;
+                       gridBagConstraints11.weightx = 1.0;
+                       gridBagConstraints11.insets = new Insets(0, 5, 0, 5);
+                       gridBagConstraints11.gridy = 1;
+                       gridBagConstraints11.gridx = 0;
+                       gridBagConstraints11.anchor = GridBagConstraints.NORTH;
+                       gridBagConstraints11.fill = GridBagConstraints.HORIZONTAL;
+                       GridBagConstraints gridBagConstraints = new GridBagConstraints(0,
+                                       2, 1, 1, 1.0, 1.0, GridBagConstraints.NORTH,
+                                       GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0);
+                       gridBagConstraints.gridx = 0;
+                       gridBagConstraints.anchor = GridBagConstraints.CENTER;
+                       gridBagConstraints.weighty = 0.0;
+                       gridBagConstraints.gridy = 0;
+                       ConvertingSettingPanel = new JPanel();
+                       ConvertingSettingPanel.setLayout(new GridBagLayout());
+                       ConvertingSettingPanel.add(getNGWordSettingPanel(),
+                                       gridBagConstraints11);
+                       ConvertingSettingPanel.add(VhookSettingPanel, gridBagConstraints);
+               }
+               return ConvertingSettingPanel;
+       }
+
+       /**
+        * This method initializes NGWordSettingPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getNGWordSettingPanel() {
+               if (NGWordSettingPanel == null) {
+                       GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+                       gridBagConstraints5.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints5.gridy = 1;
+                       gridBagConstraints5.weightx = 1.0;
+                       gridBagConstraints5.insets = new Insets(0, 5, 5, 5);
+                       gridBagConstraints5.gridx = 1;
+                       GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+                       gridBagConstraints4.gridx = 0;
+                       gridBagConstraints4.anchor = GridBagConstraints.WEST;
+                       gridBagConstraints4.insets = new Insets(0, 5, 5, 0);
+                       gridBagConstraints4.gridy = 1;
+                       NGIDLabel = new JLabel();
+                       NGIDLabel.setText("NG ID");
+                       GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+                       gridBagConstraints3.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints3.gridy = 0;
+                       gridBagConstraints3.weightx = 1.0;
+                       gridBagConstraints3.insets = new Insets(0, 5, 5, 5);
+                       gridBagConstraints3.gridx = 1;
+                       GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+                       gridBagConstraints2.gridx = 0;
+                       gridBagConstraints2.insets = new Insets(0, 5, 5, 0);
+                       gridBagConstraints2.gridy = 0;
+                       NGWordLavel = new JLabel();
+                       NGWordLavel.setText("NG\83\8f\81[\83h");
+                       NGWordSettingPanel = new JPanel();
+                       NGWordSettingPanel.setLayout(new GridBagLayout());
+                       NGWordSettingPanel.setBorder(BorderFactory.createTitledBorder(null,
+                                       "NG\83\8f\81[\83h\81EID\90Ý\92è"));
+                       NGWordSettingPanel.add(NGWordLavel, gridBagConstraints2);
+                       NGWordSettingPanel.add(getNGWordTextField(), gridBagConstraints3);
+                       NGWordSettingPanel.add(NGIDLabel, gridBagConstraints4);
+                       NGWordSettingPanel.add(getNGIDTextField(), gridBagConstraints5);
+               }
+               return NGWordSettingPanel;
+       }
+
+       /**
+        * This method initializes NGWordTextField
+        * 
+        * @return javax.swing.JTextField
+        */
+       private JTextField getNGWordTextField() {
+               if (NGWordTextField == null) {
+                       NGWordTextField = new JTextField();
+               }
+               return NGWordTextField;
+       }
+
+       /**
+        * This method initializes NGIDTextField
+        * 
+        * @return javax.swing.JTextField
+        */
+       private JTextField getNGIDTextField() {
+               if (NGIDTextField == null) {
+                       NGIDTextField = new JTextField();
+               }
+               return NGIDTextField;
+       }
+
+       /**
+        * This method initializes ProxyInfoPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getProxyInfoPanel() {
+               if (ProxyInfoPanel == null) {
+                       GridBagConstraints gridBagConstraints13 = new GridBagConstraints();
+                       gridBagConstraints13.gridx = 0;
+                       gridBagConstraints13.gridwidth = 2;
+                       gridBagConstraints13.weightx = 1.0;
+                       gridBagConstraints13.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints13.insets = new Insets(0, 5, 0, 5);
+                       gridBagConstraints13.gridy = 0;
+                       GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
+                       gridBagConstraints12.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints12.gridy = 2;
+                       gridBagConstraints12.weightx = 1.0;
+                       gridBagConstraints12.insets = new Insets(5, 0, 5, 5);
+                       gridBagConstraints12.gridx = 1;
+                       GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
+                       gridBagConstraints10.gridx = 0;
+                       gridBagConstraints10.insets = new Insets(5, 5, 5, 5);
+                       gridBagConstraints10.gridy = 2;
+                       ProxyPortLabel = new JLabel();
+                       ProxyPortLabel.setText("\83|\81[\83g\94Ô\8d\86");
+                       GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
+                       gridBagConstraints9.fill = GridBagConstraints.BOTH;
+                       gridBagConstraints9.gridy = 1;
+                       gridBagConstraints9.weightx = 1.0;
+                       gridBagConstraints9.insets = new Insets(0, 0, 0, 5);
+                       gridBagConstraints9.gridx = 1;
+                       GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
+                       gridBagConstraints8.gridx = 0;
+                       gridBagConstraints8.insets = new Insets(0, 5, 0, 5);
+                       gridBagConstraints8.fill = GridBagConstraints.NONE;
+                       gridBagConstraints8.anchor = GridBagConstraints.EAST;
+                       gridBagConstraints8.gridy = 1;
+                       ProxyLabel = new JLabel();
+                       ProxyLabel.setText("\83v\83\8d\83L\83V");
+                       ProxyInfoPanel = new JPanel();
+                       ProxyInfoPanel.setLayout(new GridBagLayout());
+                       ProxyInfoPanel.setBorder(BorderFactory.createTitledBorder(null,
+                                       "\83v\83\8d\83L\83V\90Ý\92è"));
+                       ProxyInfoPanel.add(ProxyLabel, gridBagConstraints8);
+                       ProxyInfoPanel.add(getProxyTextField(), gridBagConstraints9);
+                       ProxyInfoPanel.add(ProxyPortLabel, gridBagConstraints10);
+                       ProxyInfoPanel.add(getProxyPortTextField(), gridBagConstraints12);
+                       ProxyInfoPanel.add(getUseProxyCheckBox(), gridBagConstraints13);
+               }
+               return ProxyInfoPanel;
+       }
+
+       /**
+        * This method initializes ProxyTextField
+        * 
+        * @return javax.swing.JTextField
+        */
+       private JTextField getProxyTextField() {
+               if (ProxyTextField == null) {
+                       ProxyTextField = new JTextField();
+               }
+               return ProxyTextField;
+       }
+
+       /**
+        * This method initializes ProxyPortTextField
+        * 
+        * @return javax.swing.JTextField
+        */
+       private JTextField getProxyPortTextField() {
+               if (ProxyPortTextField == null) {
+                       ProxyPortTextField = new JTextField();
+               }
+               return ProxyPortTextField;
+       }
+
+       /**
+        * This method initializes UseProxyCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getUseProxyCheckBox() {
+               if (UseProxyCheckBox == null) {
+                       UseProxyCheckBox = new JCheckBox();
+                       UseProxyCheckBox.setText("\83v\83\8d\83L\83V\82ð\8eg\82¤");
+               }
+               return UseProxyCheckBox;
+       }
+
+       /**
+        * This method initializes FixFontSizeCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getFixFontSizeCheckBox() {
+               if (FixFontSizeCheckBox == null) {
+                       FixFontSizeCheckBox = new JCheckBox();
+                       FixFontSizeCheckBox.setText("\83t\83H\83\93\83g\83T\83C\83Y\82ð\89æ\96Ê\82É\82 \82í\82¹\82Ä\8e©\93®\92²\90®\82·\82é");
+               }
+               return FixFontSizeCheckBox;
+       }
+
+       /**
+        * This method initializes DelVideoCheckBoc
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getDelVideoCheckBox() {
+               if (DelVideoCheckBox == null) {
+                       DelVideoCheckBox = new JCheckBox();
+                       DelVideoCheckBox.setText("\95Ï\8a·\8cã\82É\93®\89æ\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82·\82é");
+               }
+               return DelVideoCheckBox;
+       }
+
+       /**
+        * This method initializes DelCommentCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getDelCommentCheckBox() {
+               if (DelCommentCheckBox == null) {
+                       DelCommentCheckBox = new JCheckBox();
+                       DelCommentCheckBox.setText("\95Ï\8a·\8cã\82É\83R\83\81\83\93\83g\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82·\82é");
+               }
+               return DelCommentCheckBox;
+       }
+
+       /**
+        * This method initializes FixCommentNumCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getFixCommentNumCheckBox() {
+               if (FixCommentNumCheckBox == null) {
+                       FixCommentNumCheckBox = new JCheckBox();
+                       FixCommentNumCheckBox.setText("\83R\83\81\83\93\83g\8eæ\93¾\90\94\82Í\8e©\93®\82Å\92²\90®\82·\82é");
+               }
+               return FixCommentNumCheckBox;
+       }
+
+       /**
+        * This method initializes OpaqueCommentCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getOpaqueCommentCheckBox() {
+               if (OpaqueCommentCheckBox == null) {
+                       OpaqueCommentCheckBox = new JCheckBox();
+                       OpaqueCommentCheckBox.setText("\91S\82Ä\82Ì\83R\83\81\83\93\83g\82ð\95s\93§\96¾\82É\82·\82é");
+               }
+               return OpaqueCommentCheckBox;
+       }
+
+       /**
+        * This method initializes VideoSaveInfoPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getVideoSaveInfoPanel() {
+               if (VideoSaveInfoPanel == null) {
+                       GridBagConstraints gridBagConstraints15 = new GridBagConstraints();
+                       gridBagConstraints15.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints15.gridwidth = 4;
+                       gridBagConstraints15.gridx = 0;
+                       gridBagConstraints15.gridy = 1;
+                       gridBagConstraints15.weightx = 1.0;
+                       gridBagConstraints15.insets = new Insets(0, 25, 0, 5);
+                       GridBagConstraints gridBagConstraints32 = new GridBagConstraints(3,
+                                       4, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTH,
+                                       GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0, 0);
+                       gridBagConstraints32.gridx = 3;
+                       gridBagConstraints32.insets = new Insets(0, 0, 5, 5);
+                       gridBagConstraints32.gridy = 5;
+                       GridBagConstraints gridBagConstraints30 = new GridBagConstraints(0,
+                                       4, 3, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                                       GridBagConstraints.BOTH, new Insets(0, 50, 0, 5), 0, 0);
+                       gridBagConstraints30.gridx = 0;
+                       gridBagConstraints30.insets = new Insets(0, 50, 5, 5);
+                       gridBagConstraints30.gridy = 5;
+                       GridBagConstraints gridBagConstraints29 = new GridBagConstraints(0,
+                                       3, 4, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                                       GridBagConstraints.BOTH, new Insets(0, 25, 0, 5), 0, 0);
+                       gridBagConstraints29.gridx = 0;
+                       gridBagConstraints29.gridy = 4;
+                       GridBagConstraints gridBagConstraints28 = new GridBagConstraints(0,
+                                       2, 3, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                                       GridBagConstraints.BOTH, new Insets(0, 50, 0, 5), 0, 0);
+                       gridBagConstraints28.gridx = 0;
+                       gridBagConstraints28.gridy = 3;
+                       GridBagConstraints gridBagConstraints27 = new GridBagConstraints(0,
+                                       1, 4, 1, 1.0, 0.0, GridBagConstraints.WEST,
+                                       GridBagConstraints.HORIZONTAL, new Insets(0, 25, 0, 5), 0,
+                                       0);
+                       gridBagConstraints27.gridx = 0;
+                       gridBagConstraints27.gridy = 2;
+                       GridBagConstraints gridBagConstraints34 = new GridBagConstraints();
+                       gridBagConstraints34.insets = new Insets(0, 5, 0, 5);
+                       gridBagConstraints34.gridy = 0;
+                       gridBagConstraints34.weightx = 1.0;
+                       gridBagConstraints34.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints34.gridx = 0;
+                       GridBagConstraints gridBagConstraints31 = new GridBagConstraints(3,
+                                       2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
+                                       GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0, 0);
+                       gridBagConstraints31.gridy = 3;
+                       gridBagConstraints31.gridx = 3;
+                       VideoSaveInfoPanel = new JPanel();
+                       VideoSaveInfoPanel.setLayout(new GridBagLayout());
+                       VideoSaveInfoPanel.setBorder(BorderFactory.createTitledBorder(null,
+                                       "\93®\89æ\95Û\91\90Ý\92è", TitledBorder.DEFAULT_JUSTIFICATION,
+                                       TitledBorder.DEFAULT_POSITION, new Font("MS UI Gothic",
+                                                       Font.PLAIN, 12), Color.black));
+                       VideoSaveInfoPanel.add(SavingVideoCheckBox, gridBagConstraints34);
+                       VideoSaveInfoPanel.add(Video_SaveFolderRadioButton,
+                                       gridBagConstraints27);
+                       VideoSaveInfoPanel.add(ShowSavingVideoFolderDialogButton,
+                                       gridBagConstraints31);
+                       VideoSaveInfoPanel.add(VideoSavedFolderField, gridBagConstraints28);
+                       VideoSaveInfoPanel.add(Video_SaveFileRadioButton,
+                                       gridBagConstraints29);
+                       VideoSaveInfoPanel.add(VideoSavedFileField, gridBagConstraints30);
+                       VideoSaveInfoPanel.add(ShowSavingVideoFileDialogButton,
+                                       gridBagConstraints32);
+                       VideoSaveInfoPanel.add(getDelVideoCheckBox(), gridBagConstraints15);
+               }
+               return VideoSaveInfoPanel;
+       }
+
+       /**
+        * This method initializes SaveInfoTabPaneEach
+        * 
+        * @return javax.swing.JTabbedPane
+        */
+       private JTabbedPane getSaveInfoTabPaneEach() {
+               if (SaveInfoTabPaneEach == null) {
+                       SaveInfoTabPaneEach = new JTabbedPane();
+                       SaveInfoTabPaneEach.addTab("\93®\89æ\81E\83R\83\81\83\93\83g", null,
+                                       getVideoSavingTabbedPanel(), null);
+                       SaveInfoTabPaneEach.addTab("\83R\83\81\83\93\83g\95t\82«\93®\89æ", null,
+                                       getConvertedVideoSavingTabbedPanel(), null);
+               }
+               return SaveInfoTabPaneEach;
+       }
+
+       /**
+        * This method initializes VideoSavingTabbedPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getVideoSavingTabbedPanel() {
+               if (VideoSavingTabbedPanel == null) {
+                       GridBagConstraints gridBagConstraints36 = new GridBagConstraints();
+                       gridBagConstraints36.weighty = 0.0;
+                       gridBagConstraints36.weightx = 1.0;
+                       gridBagConstraints36.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints36.insets = new Insets(0, 5, 0, 5);
+                       gridBagConstraints36.anchor = GridBagConstraints.NORTH;
+                       GridBagConstraints gridBagConstraints37 = new GridBagConstraints(0,
+                                       1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER,
+                                       GridBagConstraints.BOTH, new Insets(0, 5, 0, 5), 0, 0);
+                       gridBagConstraints37.anchor = GridBagConstraints.NORTH;
+                       gridBagConstraints37.gridx = 0;
+                       gridBagConstraints37.gridy = 1;
+                       gridBagConstraints37.weighty = 1.0;
+                       gridBagConstraints37.fill = GridBagConstraints.HORIZONTAL;
+                       VideoSavingTabbedPanel = new JPanel();
+                       VideoSavingTabbedPanel.setLayout(new GridBagLayout());
+                       VideoSavingTabbedPanel.add(getVideoSaveInfoPanel(),
+                                       gridBagConstraints36);
+                       VideoSavingTabbedPanel.add(CommentSaveInfoPanel,
+                                       gridBagConstraints37);
+               }
+               return VideoSavingTabbedPanel;
+       }
+
+       /**
+        * This method initializes ConvertedVideoSavingTabbedPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getConvertedVideoSavingTabbedPanel() {
+               if (ConvertedVideoSavingTabbedPanel == null) {
+                       GridBagConstraints gridBagConstraints38 = new GridBagConstraints(0,
+                                       2, 1, 1, 1.0, 1.0, GridBagConstraints.NORTH,
+                                       GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5), 0, 0);
+                       gridBagConstraints38.gridx = -1;
+                       gridBagConstraints38.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints38.gridy = -1;
+                       ConvertedVideoSavingTabbedPanel = new JPanel();
+                       ConvertedVideoSavingTabbedPanel.setLayout(new GridBagLayout());
+                       ConvertedVideoSavingTabbedPanel.add(ConvertedVideoSavingInfoPanel,
+                                       gridBagConstraints38);
+               }
+               return ConvertedVideoSavingTabbedPanel;
+       }
+
+       /**
+        * This method initializes NotAddVideoID_ConvVideoCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getNotAddVideoID_ConvVideoCheckBox() {
+               if (NotAddVideoID_ConvVideoCheckBox == null) {
+                       NotAddVideoID_ConvVideoCheckBox = new JCheckBox();
+                       NotAddVideoID_ConvVideoCheckBox.setText("\83t\83@\83C\83\8b\96¼\82É\93®\89æID\82ð\95t\89Á\82µ\82È\82¢");
+               }
+               return NotAddVideoID_ConvVideoCheckBox;
+       }
+
+       /**
+        * This method initializes FFmpegOptionComboBox
+        * 
+        * @return javax.swing.JComboBox
+        */
+       private final FFmpegComboBoxModel FFmpegOptionModel = new FFmpegComboBoxModel();
+
+       private JLabel ExtOptionLabel = null;
+
+       private JTextField ExtOptionField = null;
+
+       private JCheckBox NotUseVhookCheckBox = null;
+
+       private JTextField ViewCommentField = null;
+
+       private JLabel ViewCommentLabel = null;
+
+       private JLabel ShadowKindLabel = null;
+
+       private JComboBox ShadowComboBox = null;
+
+       private JComboBox getFFmpegOptionComboBox() {
+               if (FFmpegOptionComboBox == null) {
+                       FFmpegOptionComboBox = new JComboBox(FFmpegOptionModel);
+                       FFmpegOptionComboBox
+                                       .addActionListener(new java.awt.event.ActionListener() {
+                                               public void actionPerformed(java.awt.event.ActionEvent e) {
+                                                       if (FFmpegOptionModel.isFile()) {// \83t\83@\83C\83\8b
+                                                               ExtOptionField.setEnabled(false);
+                                                               MainOptionField.setEnabled(false);
+                                                               CommandLineInOptionField.setEnabled(false);
+                                                               CommandLineOutOptionField.setEnabled(false);
+                                                       } else {// \83t\83@\83C\83\8b\82Å\82È\82¢
+                                                               ExtOptionField.setEnabled(true);
+                                                               MainOptionField.setEnabled(true);
+                                                               CommandLineInOptionField.setEnabled(true);
+                                                               CommandLineOutOptionField.setEnabled(true);
+                                                       }
+                                               }
+                                       });
+               }
+               return FFmpegOptionComboBox;
+       }
+
+       /**
+        * This method initializes FFmpegOptionReloadButton
+        * 
+        * @return javax.swing.JButton
+        */
+       private JButton getFFmpegOptionReloadButton() {
+               if (FFmpegOptionReloadButton == null) {
+                       FFmpegOptionReloadButton = new JButton();
+                       FFmpegOptionReloadButton.setText("\8dX\90V");
+                       FFmpegOptionReloadButton
+                                       .addActionListener(new java.awt.event.ActionListener() {
+                                               public void actionPerformed(java.awt.event.ActionEvent e) {
+                                                       FFmpegOptionModel.reload();
+                                               }
+                                       });
+               }
+               return FFmpegOptionReloadButton;
+       }
+
+       /**
+        * This method initializes FFmpegOptionComboBoxPanel
+        * 
+        * @return javax.swing.JPanel
+        */
+       private JPanel getFFmpegOptionComboBoxPanel() {
+               if (FFmpegOptionComboBoxPanel == null) {
+                       GridBagConstraints gridBagConstraints47 = new GridBagConstraints();
+                       gridBagConstraints47.fill = GridBagConstraints.BOTH;
+                       gridBagConstraints47.gridx = -1;
+                       gridBagConstraints47.gridy = -1;
+                       gridBagConstraints47.insets = new Insets(0, 0, 5, 5);
+                       GridBagConstraints gridBagConstraints46 = new GridBagConstraints();
+                       gridBagConstraints46.fill = GridBagConstraints.HORIZONTAL;
+                       gridBagConstraints46.gridwidth = 3;
+                       gridBagConstraints46.gridx = -1;
+                       gridBagConstraints46.gridy = -1;
+                       gridBagConstraints46.weightx = 1.0;
+                       gridBagConstraints46.insets = new Insets(0, 5, 5, 5);
+                       FFmpegOptionComboBoxPanel = new JPanel();
+                       FFmpegOptionComboBoxPanel.setLayout(new GridBagLayout());
+                       FFmpegOptionComboBoxPanel.add(getFFmpegOptionComboBox(),
+                                       gridBagConstraints46);
+                       FFmpegOptionComboBoxPanel.add(getFFmpegOptionReloadButton(),
+                                       gridBagConstraints47);
+               }
+               return FFmpegOptionComboBoxPanel;
+       }
+
+       /**
+        * This method initializes ExtOptionField
+        * 
+        * @return javax.swing.JTextField
+        */
+       private JTextField getExtOptionField() {
+               if (ExtOptionField == null) {
+                       ExtOptionField = new JTextField();
+               }
+               return ExtOptionField;
+       }
+
+       /**
+        * This method initializes NotUseVhookCheckBox
+        * 
+        * @return javax.swing.JCheckBox
+        */
+       private JCheckBox getNotUseVhookCheckBox() {
+               if (NotUseVhookCheckBox == null) {
+                       NotUseVhookCheckBox = new JCheckBox();
+                       NotUseVhookCheckBox.setText("\8ag\92£vhook\83\89\83C\83u\83\89\83\8a\82ð\96³\8cø\82É\82·\82é\81i\83f\83o\83b\83O\97p\81j");
+               }
+               return NotUseVhookCheckBox;
+       }
+
+       /**
+        * This method initializes ViewCommentField     
+        *      
+        * @return javax.swing.JTextField       
+        */
+       private JTextField getViewCommentField() {
+               if (ViewCommentField == null) {
+                       ViewCommentField = new JTextField();
+               }
+               return ViewCommentField;
+       }
+
+       /**
+        * This method initializes ShadowComboBox       
+        *      
+        * @return javax.swing.JComboBox        
+        */
+
+       private JComboBox getShadowComboBox() {
+               if (ShadowComboBox == null) {
+                       ShadowComboBox = new JComboBox(ConvertingSetting.ShadowKindArray);
+               }
+               return ShadowComboBox;
+       }
+
+}
+
+class MainFrame_ShowSavingVideoFolderDialogButton_actionAdapter implements
+               ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingVideoFolderDialogButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingVideoFolderDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_ShowSavingCommentFolderDialogButton_actionAdapter implements
+               ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingCommentFolderDialogButton_actionAdapter(
+                       MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingCommentFolderDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_ShowSavingConvertedVideoFolderDialogButton_actionAdapter
+               implements ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingConvertedVideoFolderDialogButton_actionAdapter(
+                       MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingConvertedVideoFolderDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_this_windowAdapter extends WindowAdapter {
+       private MainFrame adaptee;
+
+       MainFrame_this_windowAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void windowClosing(WindowEvent e) {
+               adaptee.this_windowClosing(e);
+       }
+}
+
+class MainFrame_SettingFontPathButton_actionAdapter implements ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_SettingFontPathButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.SettingFontPathButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_SettingVhookPathButton_actionAdapter implements ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_SettingVhookPathButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.SettingVhookPathButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_SettingFFmpegPathButton_actionAdapter implements ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_SettingFFmpegPathButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.SettingFFmpegPathButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_ShowSavingConvertedVideoDialogButton_actionAdapter implements
+               ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingConvertedVideoDialogButton_actionAdapter(
+                       MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingConvertedVideoDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_ShowSavingCommentDialogButton_actionAdapter implements
+               ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingCommentDialogButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingCommentDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_ShowSavingVideoDialogButton_actionAdapter implements
+               ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_ShowSavingVideoDialogButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.ShowSavingVideoDialogButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_DoButton_actionAdapter implements ActionListener {
+       private MainFrame adaptee;
+
+       MainFrame_DoButton_actionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               adaptee.DoButton_actionPerformed(e);
+       }
+}
+
+class MainFrame_jMenuFileExit_ActionAdapter implements ActionListener {
+       MainFrame adaptee;
+
+       MainFrame_jMenuFileExit_ActionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent actionEvent) {
+               adaptee.jMenuFileExit_actionPerformed(actionEvent);
+       }
+}
+
+class MainFrame_jMenuHelpAbout_ActionAdapter implements ActionListener {
+       MainFrame adaptee;
+
+       MainFrame_jMenuHelpAbout_ActionAdapter(MainFrame adaptee) {
+               this.adaptee = adaptee;
+       }
+
+       public void actionPerformed(ActionEvent actionEvent) {
+               adaptee.jMenuHelpAbout_actionPerformed(actionEvent);
+       }
+}
diff --git a/frontend/src/saccubus/MainFrame_AboutBox.java b/frontend/src/saccubus/MainFrame_AboutBox.java
new file mode 100644 (file)
index 0000000..6e62196
--- /dev/null
@@ -0,0 +1,132 @@
+package saccubus;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import psi.lib.swing.PopupRightClick;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class MainFrame_AboutBox extends JDialog implements ActionListener {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = -4256413309312729840L;
+
+       String version = "ver1.22r(2008/04/27)";
+       
+       String product = 
+               "\82³\82«\82ã\82Î\82·\n"+
+               version + "\n\n"+
+               "Copyright (C) 2008 Saccubus Developers Team\n"+
+               "              2007-2008 PSI\n\n"+
+               "\83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91¶";
+       
+       JPanel panel1 = new JPanel();
+
+       JPanel panel2 = new JPanel();
+
+       JPanel insetsPanel1 = new JPanel();
+
+       JPanel insetsPanel2 = new JPanel();
+
+       JPanel insetsPanel3 = new JPanel();
+
+       JButton button1 = new JButton();
+
+       JLabel imageLabel = new JLabel();
+
+       JTextArea product_field = new JTextArea(product);
+
+       ImageIcon image1 = new ImageIcon();
+
+       BorderLayout borderLayout1 = new BorderLayout();
+
+       BorderLayout borderLayout2 = new BorderLayout();
+
+       FlowLayout flowLayout1 = new FlowLayout();
+
+       GridLayout gridLayout1 = new GridLayout();
+
+       public MainFrame_AboutBox(Frame parent) {
+               super(parent);
+               try {
+                       setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+                       jbInit();
+               } catch (Exception exception) {
+                       exception.printStackTrace();
+               }
+       }
+
+       public MainFrame_AboutBox() {
+               this(null);
+       }
+
+       /**
+        * \83R\83\93\83|\81[\83l\83\93\83g\82Ì\8f\89\8aú\89»\81B
+        * 
+        * @throws java.lang.Exception
+        */
+       private void jbInit() throws Exception {
+               image1 = new ImageIcon(saccubus.MainFrame.class.getResource("icon.png"));
+               imageLabel.setIcon(image1);
+               setTitle("\83o\81[\83W\83\87\83\93\8fî\95ñ");
+               panel1.setLayout(borderLayout1);
+               panel2.setLayout(borderLayout2);
+               insetsPanel1.setLayout(flowLayout1);
+               insetsPanel2.setLayout(flowLayout1);
+               insetsPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+               gridLayout1.setRows(1);
+               gridLayout1.setColumns(1);
+               insetsPanel3.setLayout(gridLayout1);
+               insetsPanel3.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+               button1.setText("OK");
+               button1.addActionListener(this);
+               insetsPanel2.add(imageLabel, null);
+               panel2.add(insetsPanel2, BorderLayout.WEST);
+               getContentPane().add(panel1, null);
+               product_field.setForeground(insetsPanel3.getForeground());
+               product_field.setBackground(insetsPanel3.getBackground());
+               product_field.addMouseListener(new PopupRightClick(product_field));
+               product_field.setEditable(false);
+               insetsPanel3.add(product_field, null);
+               panel2.add(insetsPanel3, BorderLayout.CENTER);
+               insetsPanel1.add(button1, null);
+               panel1.add(insetsPanel1, BorderLayout.SOUTH);
+               panel1.add(panel2, BorderLayout.NORTH);
+               setResizable(true);
+       }
+
+       /**
+        * \83{\83^\83\93\83C\83x\83\93\83g\82Å\83_\83C\83A\83\8d\83O\82ð\95Â\82\82é
+        * 
+        * @param actionEvent
+        *            ActionEvent
+        */
+       public void actionPerformed(ActionEvent actionEvent) {
+               if (actionEvent.getSource() == button1) {
+                       dispose();
+               }
+       }
+}
diff --git a/frontend/src/saccubus/Prompt.java b/frontend/src/saccubus/Prompt.java
new file mode 100644 (file)
index 0000000..b0df518
--- /dev/null
@@ -0,0 +1,45 @@
+package saccubus;
+
+import javax.swing.JLabel;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class Prompt {
+       public static void main(String[] args) {
+               String mail = args[0];
+               String pass = args[1];
+               String tag = args[2];
+               String time = args.length < 4 ? "" : args[3];
+               ConvertingSetting setting = ConvertingSetting.loadSetting(mail, pass);
+               Converter conv = new Converter(tag, time, setting, new JLabel(),
+                               new ConvertStopFlag(null, null, null, null));
+               System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
+               System.out.println("Saccubus on CUI");
+               System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
+               System.out.println("Mailaddr: " + mail);
+               System.out.println("Password: hidden");
+               System.out.println("VideoID: " + tag);
+               System.out.println("WaybackTime: " + time);
+               System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
+               conv.run();
+               System.out.println("Finished.");
+       }
+}
diff --git a/frontend/src/saccubus/Saccubus.java b/frontend/src/saccubus/Saccubus.java
new file mode 100644 (file)
index 0000000..69823c6
--- /dev/null
@@ -0,0 +1,75 @@
+package saccubus;
+
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class Saccubus {
+       boolean packFrame = false;
+
+       /**
+        * \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\8d\\92z\82Æ\95\\8e¦\81B
+        */
+       public Saccubus() {
+               // \83\81\83C\83\93\83t\83\8c\81[\83\80\82Ì\8f\80\94õ
+               MainFrame frame = new MainFrame();
+               // validate() \82Í\83T\83C\83Y\82ð\92²\90®\82·\82é
+               // pack() \82Í\97L\8cø\82È\83T\83C\83Y\8fî\95ñ\82ð\83\8c\83C\83A\83E\83g\82È\82Ç\82©\82ç\8eæ\93¾\82·\82é
+               if (packFrame) {
+                       frame.pack();
+               } else {
+                       frame.validate();
+               }
+
+               // \83E\83B\83\93\83h\83E\82ð\92\86\89\9b\82É\94z\92u
+               frame.setLocationByPlatform(true);
+
+               // \83X\83v\83\89\83b\83V\83\85\82Í\89B\82·
+               // \83\81\83C\83\93\83t\83\8c\81[\83\80\95\\8e¦
+               frame.setVisible(true);
+       }
+
+       /**
+        * \83A\83v\83\8a\83P\81[\83V\83\87\83\93\83G\83\93\83g\83\8a\83|\83C\83\93\83g\81B
+        * 
+        * @param args
+        *            String[]
+        */
+       public static void main(String[] args) {
+               if (args.length > 0) {
+                       Prompt.main(args);
+                       return;
+               }
+               SwingUtilities.invokeLater(new Runnable() {
+                       public void run() {
+                               try {
+                                       UIManager.setLookAndFeel(UIManager
+                                                       .getSystemLookAndFeelClassName());
+                               } catch (Exception exception) {
+                                       exception.printStackTrace();
+                               }
+
+                               new Saccubus();
+                       }
+               });
+       }
+}
diff --git a/frontend/src/saccubus/conv/Chat.java b/frontend/src/saccubus/conv/Chat.java
new file mode 100644 (file)
index 0000000..540b055
--- /dev/null
@@ -0,0 +1,229 @@
+package saccubus.conv;
+
+import java.io.*;
+
+import saccubus.util.Util;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class Chat {
+       private static final int CMD_LOC_DEF = 0;
+
+       private static final int CMD_LOC_TOP = 1;
+
+       private static final int CMD_LOC_BOTTOM = 2;
+
+       @SuppressWarnings("unused")
+       private static final int CMD_SIZE_MAX = 3;
+
+       private static final int CMD_SIZE_DEF = 0;
+
+       private static final int CMD_SIZE_BIG = 1;
+
+       private static final int CMD_SIZE_SMALL = 2;
+
+       @SuppressWarnings("unused")
+       private static final int COMMENT_FONT_SIZE[] = { 24, // DEF
+                       39, // BIG
+                       15, // SMALL
+       };
+
+       private static final int CMD_COLOR_DEF = 0;
+
+       private static final int CMD_COLOR_RED = 1;
+
+       private static final int CMD_COLOR_ORANGE = 2;
+
+       private static final int CMD_COLOR_YELLOW = 3;
+
+       private static final int CMD_COLOR_PINK = 4;
+
+       private static final int CMD_COLOR_BLUE = 5;
+
+       private static final int CMD_COLOR_PURPLE = 6;
+
+       private static final int CMD_COLOR_CYAN = 7;
+
+       private static final int CMD_COLOR_GREEN = 8;
+
+       private static final int CMD_COLOR_NICOWHITE = 9;
+
+       private static final int CMD_COLOR_MARINEBLUE = 10;
+
+       private static final int CMD_COLOR_MADYELLOW = 11;
+
+       private static final int CMD_COLOR_PASSIONORANGE = 12;
+
+       private static final int CMD_COLOR_NOBLEVIOLET = 13;
+
+       private static final int CMD_COLOR_ELEMENTALGREEN = 14;
+
+       private static final int CMD_COLOR_TRUERED = 15;
+
+       private static final int CMD_COLOR_BLACK = 16;
+
+       // "date"
+       @SuppressWarnings("unused")
+       private int Date = 0;
+
+       // "mail"
+       private int Color = 0;
+
+       private int Size = 0;
+
+       private int Location = 0;
+
+       // "No"
+       private int No = 0;
+
+       // "user_id"
+       @SuppressWarnings("unused")
+       private int UserID = 0;
+
+       // "vpos"
+       private int Vpos = 0;
+
+       private String Comment = "";
+
+       public Chat() {
+       }
+
+       public void setDate(String date_str) {
+               Date = Integer.parseInt(date_str);
+               // System.out.println("date:" + date_str);
+       }
+
+       public void setMail(String mail_str) {
+               // System.out.println("mail:" + mail_str);
+               Color = CMD_COLOR_DEF;
+               Size = CMD_SIZE_DEF;
+               Location = CMD_LOC_DEF;
+               if (mail_str == null) {
+                       return;
+               }
+               String element[] = mail_str.split(" ");
+               for (int i = 0; i < element.length; i++) {
+                       String str = element[i].toLowerCase();
+                       /* \83\8d\83P\81[\83V\83\87\83\93 */
+                       if (str.equals("ue")) {
+                               Location = CMD_LOC_TOP;
+                       } else if (str.equals("shita")) {
+                               Location = CMD_LOC_BOTTOM;
+                       } else if (str.equals("big")) {
+                               Size = CMD_SIZE_BIG;
+                       } else if (str.equals("small")) {
+                               Size = CMD_SIZE_SMALL;
+                       } else if (str.equals("red")) {
+                               Color = CMD_COLOR_RED;
+                       } else if (str.equals("orange")) {
+                               Color = CMD_COLOR_ORANGE;
+                       } else if (str.equals("yellow")) {
+                               Color = CMD_COLOR_YELLOW;
+                       } else if (str.equals("pink")) {
+                               Color = CMD_COLOR_PINK;
+                       } else if (str.equals("blue")) {
+                               Color = CMD_COLOR_BLUE;
+                       } else if (str.equals("purple")) {
+                               Color = CMD_COLOR_PURPLE;
+                       } else if (str.equals("cyan")) {
+                               Color = CMD_COLOR_CYAN;
+                       } else if (str.equals("green")) {
+                               Color = CMD_COLOR_GREEN;
+                       } else if (str.equals("niconicowhite") || str.equals("white2")) {
+                               Color = CMD_COLOR_NICOWHITE;
+                       } else if (str.equals("arineblue") || str.equals("blue2")) {
+                               Color = CMD_COLOR_MARINEBLUE;
+                       } else if (str.equals("madyellow") || str.equals("yellow2")) {
+                               Color = CMD_COLOR_MADYELLOW;
+                       } else if (str.equals("passionorange") || str.equals("orange2")) {
+                               Color = CMD_COLOR_PASSIONORANGE;
+                       } else if (str.equals("nobleviolet") || str.equals("purple2")) {
+                               Color = CMD_COLOR_NOBLEVIOLET;
+                       } else if (str.equals("elementalgreen") || str.equals("green2")) {
+                               Color = CMD_COLOR_ELEMENTALGREEN;
+                       } else if (str.equals("truered") || str.equals("red2")) {
+                               Color = CMD_COLOR_TRUERED;
+                       } else if (str.equals("black")) {
+                               Color = CMD_COLOR_BLACK;
+                       } else {
+                               // System.out.println("Unknown command:" + str);
+                       }
+               }
+       }
+
+       public void setNo(String no_str) {
+               try {
+                       No = Integer.parseInt(no_str);
+               } catch (Exception e) {
+                       No = -1;
+               }
+               // System.out.println("no:" + no_str);
+       }
+
+       public void setUserID(String user_id_str) {
+               // System.out.println("user_id:" + user_id_str);
+               try {
+                       UserID = Integer.parseInt(user_id_str);
+               } catch (Exception e) {
+                       UserID = -1;
+               }
+       }
+
+       public void setVpos(String vpos_str) {
+               // System.out.println("vpos:" + vpos_str);
+               try {
+                       Vpos = Integer.parseInt(vpos_str);
+               } catch (Exception e) {
+                       Vpos = -1;
+               }
+
+       }
+
+       public void setComment(String com_str) {
+               // System.out.println("Comment[" + com_str.length() + "]:" + com_str);
+               if (Comment.equals("")) {
+                       Comment += com_str;
+               } else {
+                       Comment += com_str;
+               }
+       }
+
+       public void write(OutputStream os) throws IOException {
+               byte[] a = null;
+               try {
+                       a = (Comment + "\0").getBytes("UnicodeLittleUnmarked");
+               } catch (UnsupportedEncodingException ex) {
+                       ex.printStackTrace();
+               }
+               Util.writeInt(os, No);
+               Util.writeInt(os, Vpos);
+               Util.writeInt(os, Location);
+               Util.writeInt(os, Size);
+               Util.writeInt(os, Color);
+               Util.writeInt(os, a.length);
+               try {
+                       os.write(a);
+               } catch (IOException ex1) {
+                       ex1.printStackTrace();
+               }
+       }
+
+}
diff --git a/frontend/src/saccubus/conv/ConvertToVideoHook.java b/frontend/src/saccubus/conv/ConvertToVideoHook.java
new file mode 100644 (file)
index 0000000..d07a51e
--- /dev/null
@@ -0,0 +1,63 @@
+package saccubus.conv;
+
+import java.io.*;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.SAXParser;
+import org.xml.sax.*;
+import javax.xml.parsers.*;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class ConvertToVideoHook {
+       public static boolean convert(File file, File out, String ng_id,
+                       String ng_word) {
+               try {
+                       Packet packet = new Packet();
+                       // SAX\83p\81[\83T\81[\83t\83@\83N\83g\83\8a\82ð\90\90¬
+                       SAXParserFactory spfactory = SAXParserFactory.newInstance();
+                       // SAX\83p\81[\83T\81[\82ð\90\90¬
+                       SAXParser parser = spfactory.newSAXParser();
+                       // XML\83t\83@\83C\83\8b\82ð\8ew\92è\82³\82ê\82½\83f\83t\83H\83\8b\83g\83n\83\93\83h\83\89\81[\82Å\8f\88\97\9d\82µ\82Ü\82·
+                       NicoXMLReader nico_reader = null;
+                       try {
+                               nico_reader = new NicoXMLReader(packet, ng_id, ng_word);
+                       } catch (java.util.regex.PatternSyntaxException e) {
+                               e.printStackTrace();
+                               return false;
+                       }
+                       if (nico_reader != null) {
+                               parser.parse(file, nico_reader);
+                       }
+                       // \95Ï\8a·\8c\8b\89Ê\82Ì\8f\91\82«\8d\9e\82Ý
+                       FileOutputStream fos = new FileOutputStream(out);
+                       packet.write(fos);
+                       fos.close();
+                       return true;
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+               } catch (SAXException ex) {
+                       ex.printStackTrace();
+               } catch (ParserConfigurationException ex) {
+                       ex.printStackTrace();
+               }
+               return false;
+       }
+}
diff --git a/frontend/src/saccubus/conv/NicoXMLReader.java b/frontend/src/saccubus/conv/NicoXMLReader.java
new file mode 100644 (file)
index 0000000..bd0ec95
--- /dev/null
@@ -0,0 +1,214 @@
+package saccubus.conv;
+
+import java.util.regex.Pattern;
+
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.Attributes;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class NicoXMLReader extends DefaultHandler {
+       private final Packet Packet;
+
+       private Chat item;
+
+       private boolean item_kicked;
+
+       Object waitObject = new Object();
+
+       private final Pattern NG_Word;
+
+       private final Pattern NG_ID;
+
+       public NicoXMLReader(Packet packet, String ng_id, String ng_word) {
+               Packet = packet;
+               NG_Word = makePattern(ng_word);
+               NG_ID = makePattern(ng_id);
+       }
+
+       private static final Pattern makePattern(String word) {
+               if (word == null || word.length() <= 0) {
+                       return null;
+               }
+               String tmp[] = word.split(" ");
+               String tmp2[] = new String[tmp.length];
+               int tmp_index = 0;
+               int index;
+               for (index = 0; index < tmp.length && tmp_index < tmp.length; index++) {
+                       if (tmp[tmp_index].startsWith("/")) {
+                               String str = tmp[tmp_index];
+                               for (tmp_index++; tmp_index < tmp.length; tmp_index++) {
+                                       str += " " + tmp[tmp_index];
+                                       if (tmp[tmp_index].endsWith("/")) {
+                                               tmp_index++;
+                                               break;
+                                       }
+                               }
+                               tmp2[index] = str;
+                       } else if (tmp[tmp_index].startsWith("\"")) {
+                               String str = tmp[tmp_index];
+                               for (tmp_index++; tmp_index < tmp.length; tmp_index++) {
+                                       str += " " + tmp[tmp_index];
+                                       if (tmp[tmp_index].endsWith("\"")) {
+                                               tmp_index++;
+                                               break;
+                                       }
+                               }
+                               tmp2[index] = str;
+                       } else {
+                               tmp2[index] = tmp[tmp_index];
+                               tmp_index++;
+                       }
+               }
+               String elt[] = new String[index];
+               for (int i = 0; i < index; i++) {
+                       elt[i] = tmp2[i];
+               }
+               String reg = "";
+               for (int i = 0; i < elt.length; i++) {
+                       String e = elt[i];
+                       System.out.println(e);
+                       if (i > 0) {
+                               reg += "|";
+                       }
+                       if (e.indexOf("/") == 0 && e.lastIndexOf("/") == e.length() - 1) {
+                               reg += "(" + e.substring(1, e.length() - 1) + ")";
+                       } else if (e.indexOf("\"") == 0
+                                       && e.lastIndexOf("\"") == e.length() - 1) {
+                               reg += "(" + Pattern.quote(e.substring(1, e.length() - 1))
+                                               + ")";
+                       } else {
+                               reg += "(.*(" + Pattern.quote(e) + ")+.*)";
+                       }
+               }
+               System.out.println("reg:" + reg);
+               return Pattern.compile(reg);
+       }
+
+       private static final boolean match(Pattern pat, String word) {
+               if (word == null || word.length() <= 0 || pat == null) {
+                       return false;
+               }
+               return pat.matcher(word).matches();
+       }
+
+       /**
+        * 
+        */
+       public void startDocument() {
+               System.out.println("Start converting to interval file.");
+       }
+
+       /**
+        * 
+        * @param uri
+        *            String
+        * @param localName
+        *            String
+        * @param qName
+        *            String
+        * @param attributes
+        *            Attributes
+        */
+       public void startElement(String uri, String localName, String qName,
+                       Attributes attributes) {
+               if (qName.toLowerCase().equals("chat")) {
+                       // System.out.println("----------");
+                       item = new Chat();
+                       item_kicked = false;
+                       //\83}\83C\83\81\83\82\83\8a\8dí\8f\9c\91Î\8fÛ
+                       String deleted = attributes.getValue("deleted");
+                       if(deleted != null && deleted.toLowerCase().equals("1")){
+                               item_kicked = true;
+                               return;
+                       }
+                       item.setDate(attributes.getValue("date"));
+                       String mail = attributes.getValue("mail");
+                       if (match(NG_Word, mail)) {
+                               item_kicked = true;
+                               return;
+                       }
+                       item.setMail(mail);
+                       item.setNo(attributes.getValue("no"));
+                       String user_id = attributes.getValue("user_id");
+                       if (match(NG_ID, user_id)) {
+                               item_kicked = true;
+                               return;
+                       }
+                       item.setUserID(user_id);
+                       item.setVpos(attributes.getValue("vpos"));
+
+               }
+       }
+
+       /**
+        * 
+        * @param ch
+        *            char[]
+        * @param offset
+        *            int
+        * @param length
+        *            int
+        */
+       public void characters(char[] ch, int offset, int length) {
+               char input[] = (new String(ch, offset, length)).toCharArray();
+               for (int i = 0; i < input.length; i++) {
+                       if (!Character.isDefined(input[i])) {
+                               input[i] = '?';
+                       }
+               }
+               if (item != null) {
+                       String com = new String(input);
+                       if (match(NG_Word, com)) {
+                               item_kicked = true;
+                               return;
+                       }
+                       item.setComment(com);
+               }
+       }
+
+       /**
+        * 
+        * @param uri
+        *            String
+        * @param localName
+        *            String
+        * @param qName
+        *            String
+        */
+       public void endElement(String uri, String localName, String qName) {
+               if (qName.toLowerCase().equals("chat")) {
+                       if (!item_kicked) {
+                               Packet.addChat(item);
+                       }
+                       item = null;
+               }
+       }
+
+       /**
+        * \83h\83L\83\85\83\81\83\93\83g\8fI\97¹
+        */
+       public void endDocument() {
+               // System.out.println("----------");
+               System.out.println("Converting finished.");
+       }
+
+}
diff --git a/frontend/src/saccubus/conv/Packet.java b/frontend/src/saccubus/conv/Packet.java
new file mode 100644 (file)
index 0000000..3974c93
--- /dev/null
@@ -0,0 +1,47 @@
+package saccubus.conv;
+
+import java.util.LinkedList;
+import java.io.*;
+import java.util.Iterator;
+
+import saccubus.util.Util;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class Packet {
+       LinkedList<Chat> ChatList = new LinkedList<Chat>();
+
+       public Packet() {
+       }
+
+       public void addChat(Chat chat) {
+               ChatList.add(chat);
+       }
+
+       public void write(OutputStream os) throws IOException {
+               Util.writeInt(os, ChatList.size());
+               Iterator<Chat> it = ChatList.iterator();
+               while (it.hasNext()) {
+                       Chat chat = it.next();
+                       chat.write(os);
+               }
+       }
+}
diff --git a/frontend/src/saccubus/icon.png b/frontend/src/saccubus/icon.png
new file mode 100644 (file)
index 0000000..ce7b4a6
Binary files /dev/null and b/frontend/src/saccubus/icon.png differ
diff --git a/frontend/src/saccubus/icon32.png b/frontend/src/saccubus/icon32.png
new file mode 100644 (file)
index 0000000..623c86e
Binary files /dev/null and b/frontend/src/saccubus/icon32.png differ
diff --git a/frontend/src/saccubus/net/NicoClient.java b/frontend/src/saccubus/net/NicoClient.java
new file mode 100644 (file)
index 0000000..c57bfe5
--- /dev/null
@@ -0,0 +1,550 @@
+package saccubus.net;
+
+import java.io.File;
+import java.net.URL;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.URLEncoder;
+import java.net.URLDecoder;
+import javax.swing.JLabel;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.regex.Pattern;
+import java.text.*;
+import javax.net.ssl.HttpsURLConnection;
+import saccubus.ConvertStopFlag;
+
+/**
+ * <p>
+ * \83^\83C\83g\83\8b\82³\82«\82ã\82Î\82·
+ * </p>
+ * 
+ * <p>
+ * \90à\96¾: \83j\83R\83j\83R\93®\89æ\82Ì\93®\89æ\82ð\83R\83\81\83\93\83g\82Â\82«\82Å\95Û\91
+ * </p>
+ * 
+ * <p>
+ * \92\98\8dì\8c : Copyright (c) 2007 PSI
+ * </p>
+ * 
+ * <p>
+ * \89ï\8eÐ\96¼:
+ * </p>
+ * 
+ * @author \96¢\93ü\97Í
+ * @version 1.0
+ */
+public class NicoClient {
+       private final String User;
+
+       private final String Pass;
+
+       private boolean Logged_in = false;
+
+       private final ConvertStopFlag StopFlag;
+
+       private final Proxy ConProxy;
+
+       public NicoClient(final String user, final String pass,
+                       final ConvertStopFlag flag, final String proxy, final int proxy_port) {
+               User = user;
+               Pass = pass;
+               if (proxy != null && proxy.length() > 0 && proxy_port >= 0
+                               && proxy_port <= 65535) {
+                       ConProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy,
+                                       proxy_port));
+               } else {
+                       ConProxy = Proxy.NO_PROXY;
+               }
+               // \83\8d\83O\83C\83\93
+               Logged_in = login();
+               StopFlag = flag;
+       }
+
+       private String Cookie = null;
+
+       private boolean login() {
+               try {
+                       HttpURLConnection con = (HttpsURLConnection) (new URL(
+                                       "https://secure.nicovideo.jp/secure/login?site=niconico"))
+                                       .openConnection(ConProxy);
+                       /* \8fo\97Í\82Ì\82Ý */
+                       con.setDoOutput(true);
+                       HttpURLConnection.setFollowRedirects(false);
+                       con.setInstanceFollowRedirects(false);
+                       con.setRequestMethod("POST");
+                       con.addRequestProperty("Connection", "close");
+                       con.connect();
+                       StringBuffer sb = new StringBuffer(4096);
+                       sb.append("next_url=&");
+                       sb.append("mail=");
+                       sb.append(URLEncoder.encode(User, "Shift_JIS"));
+                       sb.append("&password=");
+                       sb.append(URLEncoder.encode(Pass, "Shift_JIS"));
+                       sb.append("&submit.x=103&submit.y=16");
+                       OutputStream os = con.getOutputStream();
+                       os.write(sb.substring(0).getBytes());
+                       os.flush();
+                       os.close();
+                       int code = con.getResponseCode();
+                       if (code < 200 || code >= 400) {
+                               System.out.println("Can't login:" + con.getResponseMessage());
+                               return false;
+                       }
+                       int i = 1;
+                       String key;
+                       String value;
+                       while ((key = con.getHeaderFieldKey(i)) != null) {
+                               if (key.equalsIgnoreCase("Set-Cookie")) {
+                                       value = con.getHeaderField(i);
+                                       if (value != null) {
+                                               Cookie = value.substring(0, value.indexOf(";"));
+                                       }
+                               }
+                               i++;
+                       }
+                       con.disconnect();
+                       if (Cookie == null) {
+                               System.out.println("Can't login: cannot set cookie.");
+                               return false;
+                       }
+                       System.out.println("Logged in.");
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+                       return false;
+               }
+               return true;
+       }
+
+       public boolean isLoggedIn() {
+               return Logged_in;
+       }
+
+       public String getVideoTitle() {
+               return VideoTitle;
+       }
+
+       private static Pattern safeFileName_SPACE = Pattern.compile(" {2}+");
+       private static String safeFileName(String str) {
+               //\8eÀ\91Ì\8eQ\8fÆ\82Ì\83p\81[\83X
+               int old_index = 0;
+               int new_index = 0;
+               StringBuffer sb = new StringBuffer();
+               String ch;
+               while((new_index = str.indexOf("&#",old_index)) >= 0){
+                       sb.append(str,old_index,new_index);
+                       old_index = str.indexOf(";",new_index);
+                       ch = str.substring(new_index+2,old_index);
+                       sb.append(new String(new char[]{(char) Integer.parseInt(ch)}));
+                       old_index++;
+               }
+               //\8dÅ\8cã\82É\92Ç\89Á
+               sb.append(str,old_index,str.length());
+               str = sb.toString();
+               //\83t\83@\83C\83\8b\83V\83X\83e\83\80\82Å\88µ\82¦\82é\8c`\82É
+               str = str.replace('/', '\81^');
+               str = str.replace('\\', '\81\8f');
+               str = str.replace('?', '\81H');
+               str = str.replace('*', '\81\96');
+               str = str.replace(':', '\81F');
+               str = str.replace('|', '\81b');
+               str = str.replace('\"', '\81h');
+               str = str.replace('<', '\81\83');
+               str = str.replace('>', '\81\84');
+               str = str.replace('.', '\81D');
+               str = safeFileName_SPACE.matcher(str).replaceAll(" ");
+               return str;
+       }
+
+       private String VideoTitle = null;
+
+       private int VideoLength = -1;
+
+       private static final String TITLE_PARSE_STR_START = "<title>";
+
+       //RC2\82É\82È\82Á\82Ä\83^\83C\83g\83\8b\82ª\95Ï\8dX\81A\8eg\82í\82È\82­\82È\82Á\82½\81B
+       //private static final String TITLE_PARSE_STR_END = "</title>";
+
+       public boolean getVideoHistoryAndTitle(String tag) {
+               String url = "http://www.nicovideo.jp/watch/" + tag;
+               System.out.print("Getting video history...");
+               String new_cookie = null;
+               try {
+                       HttpURLConnection con = (HttpURLConnection) (new URL(url))
+                                       .openConnection(ConProxy);
+                       /* \83\8a\83N\83G\83X\83g\82Ì\90Ý\92è */
+                       con.setRequestMethod("GET");
+                       con.addRequestProperty("Cookie", Cookie);
+                       con.addRequestProperty("Connection", "close");
+                       con.connect();
+                       if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                               System.out.println("Can't getVideoHistory:" + url);
+                               return false;
+                       }
+                       int i = 1;
+                       String key;
+                       String value;
+                       while ((key = con.getHeaderFieldKey(i)) != null) {
+                               if (key.equalsIgnoreCase("Set-Cookie")) {
+                                       value = con.getHeaderField(i);
+                                       if (value != null) {
+                                               new_cookie = value.substring(0, value.indexOf(";"));
+                                       }
+                               }
+                               i++;
+                       }
+                       BufferedReader br = new BufferedReader(new InputStreamReader(con
+                                       .getInputStream(), "UTF-8"));
+                       String ret;
+                       int index = -1;
+                       while ((ret = br.readLine()) != null && index < 0) {
+                               if ((index = ret.indexOf(TITLE_PARSE_STR_START)) >= 0) {
+                                       VideoTitle = ret.substring(index+TITLE_PARSE_STR_START.length(), ret.indexOf("\81]", index));
+                                       VideoTitle = safeFileName(VideoTitle);
+                               }
+                       }
+                       br.close();
+                       con.disconnect();
+                       if (new_cookie == null) {
+                               System.out.println("Can't getVideoHistory: cannot get cookie.");
+                               return false;
+                       }
+                       System.out.println("ok.");
+                       Cookie += "; ";
+                       Cookie += new_cookie;
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+                       return false;
+               }
+
+               return true;
+       }
+
+       public boolean getVideoInfo(String tag, String time) {
+               if (!getVideoHistoryAndTitle(tag)) {
+                       return false;
+               }
+               try {
+                       String url = "http://www.nicovideo.jp/api/getflv?v=" + tag;
+                       System.out.print("Getting video informations...");
+                       HttpURLConnection con = (HttpURLConnection) (new URL(url))
+                                       .openConnection(ConProxy);
+                       /* \83\8a\83N\83G\83X\83g\82Ì\90Ý\92è */
+                       con.setRequestMethod("GET");
+                       con.addRequestProperty("Cookie", Cookie);
+                       con.addRequestProperty("Connection", "close");
+                       con.connect();
+                       if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                               System.out.println("Can't getVideoInfo:" + url);
+                               return false;
+                       }
+                       /* \96ß\82è\92l\82Ì\8eæ\93¾ */
+                       BufferedReader br = new BufferedReader(new InputStreamReader(con
+                                       .getInputStream()));
+                       String ret = br.readLine();
+                       br.close();
+                       con.disconnect();
+                       ret = URLDecoder.decode(ret, "Shift_JIS");
+                       String[] array = ret.split("&");
+                       int cnt = 0;
+                       for (int i = 0; i < array.length; i++) {
+                               int idx = array[i].indexOf("=");
+                               if (idx < 0) {
+                                       continue;
+                               }
+                               String key = array[i].substring(0, idx);
+                               String value = array[i].substring(idx + 1);
+                               if (ThreadID == null && key.equalsIgnoreCase("thread_id")) {
+                                       ThreadID = value;
+                                       cnt++;
+                               } else if (VideoUrl == null && key.equalsIgnoreCase("url")) {
+                                       VideoUrl = value;
+                                       cnt++;
+                               } else if (MsgUrl == null && key.equalsIgnoreCase("ms")) {
+                                       MsgUrl = value;
+                                       cnt++;
+                               } else if (UserID == null && key.equalsIgnoreCase("user_id")) {
+                                       UserID = value;
+                                       cnt++;
+                               } else if (VideoLength < 0 && key.equalsIgnoreCase("l")) {
+                                       try {
+                                               VideoLength = Integer.parseInt(value);
+                                       } catch (NumberFormatException e) {
+                                               VideoLength = -1;
+                                       }
+                               }
+                       }
+                       if (cnt < 4) {
+                               System.out
+                                               .println("ng.\nCan't getVideoInfo: Can't get video informations.");
+                               return false;
+                       }
+                       System.out.println("ok.");
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+                       return false;
+               }
+               if (!(time == null || time.equals("")) && !getWayBackKey(time)) { // WayBackKey
+                       return false;
+               }
+               return true;
+       }
+
+       private byte[] buf = new byte[1024 * 1024];
+
+       private String VideoUrl = null;
+
+       public File getVideo(final File file, final JLabel status) {
+               if (VideoUrl == null) {
+                       System.out.println("Video url is not detected.");
+                       return null;
+               }
+               try {
+                       if (file.canRead()) { // \83t\83@\83C\83\8b\82ª\82·\82Å\82É\91\8dÝ\82·\82é\82È\82ç\8dí\8f\9c\82·\82é\81B
+                               file.delete();
+                       }
+                       HttpURLConnection con = (HttpURLConnection) (new URL(VideoUrl))
+                                       .openConnection(ConProxy);
+                       /* \8fo\97Í\82Ì\82Ý */
+                       con.setDoInput(true);
+                       con.setRequestMethod("GET");
+                       con.addRequestProperty("Cookie", Cookie);
+                       con.connect();
+                       if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                               System.out.println("Can't get video:" + VideoUrl);
+                               return null;
+                       }
+                       InputStream is = con.getInputStream();
+                       OutputStream os = new FileOutputStream(file);
+                       String content_length_str = con.getHeaderField("Content-length");
+                       int max_size = 0;
+                       if (content_length_str != null && !content_length_str.equals("")) {
+                               max_size = Integer.parseInt(content_length_str);
+                       }
+                       int size = 0;
+                       System.out.print("Downloading video...");
+                       int read = 0;
+                       while ((read = is.read(buf, 0, buf.length)) > 0) {
+                               size += read;
+                               os.write(buf, 0, read);
+                               if (max_size != 0) {
+                                       String per = Double.toString((((double) size) * 100)
+                                                       / max_size);
+                                       per = per.substring(0, Math.min(per.indexOf(".") + 3, per
+                                                       .length()));
+                                       status.setText("\93®\89æ\83_\83E\83\93\83\8d\81[\83h\81F" + per + "\83p\81[\83Z\83\93\83g\8a®\97¹");
+                               } else {
+                                       status.setText("\93®\89æ\83_\83E\83\93\83\8d\81[\83h\92\86\81F" + Integer.toString(size >> 10)
+                                                       + "kbytes\83_\83E\83\93\83\8d\81[\83h");
+                               }
+                               if (StopFlag.needStop()) {
+                                       System.out.println("Stopped.");
+                                       is.close();
+                                       os.flush();
+                                       os.close();
+                                       con.disconnect();
+                                       file.delete();
+                                       return null;
+                               }
+                       }
+                       System.out.println("ok.");
+                       is.close();
+                       os.flush();
+                       os.close();
+                       con.disconnect();
+                       return file;
+               } catch (FileNotFoundException ex) {
+                       ex.printStackTrace();
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+               }
+               return null;
+       }
+
+       private String UserID = null;
+
+       private String ThreadID = null;
+
+       private String MsgUrl = null;
+
+       public File getComment(final File file, final JLabel status,
+                       String back_comment) {
+               System.out.print("Downloading comment size:" + back_comment + "...");
+               try {
+                       if (file.canRead()) { // \83t\83@\83C\83\8b\82ª\82·\82Å\82É\91\8dÝ\82·\82é\82È\82ç\8dí\8f\9c\82·\82é\81B
+                               file.delete();
+                       }
+                       OutputStream fos = new FileOutputStream(file);
+                       HttpURLConnection con = (HttpURLConnection) (new URL(MsgUrl))
+                                       .openConnection(ConProxy);
+                       con.setDoOutput(true);
+                       con.setDoInput(true);
+                       con.setRequestMethod("POST");
+                       con.addRequestProperty("Cookie", Cookie);
+                       con.addRequestProperty("Connection", "close");
+                       con.connect();
+                       OutputStream os = con.getOutputStream();
+                       String req = "<thread user_id=\"" + UserID + "\" when=\""
+                                       + WayBackTime + "\" waybackkey=\"" + WayBackKey
+                                       + "\" res_from=\"-" + back_comment
+                                       + "\" version=\"20061206\" thread=\"" + ThreadID + "\" />";
+                       os.write(req.getBytes());
+                       os.flush();
+                       os.close();
+                       if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                               System.out.println("ng.\nCan't download comment:" + MsgUrl);
+                               return null;
+                       }
+                       InputStream is = con.getInputStream();
+                       int read = 0;
+                       int max_size = 0;
+                       String content_length_str = con.getHeaderField("Content-length");
+                       if (content_length_str != null && !content_length_str.equals("")) {
+                               max_size = Integer.parseInt(content_length_str);
+                       }
+                       int size = 0;
+                       while ((read = is.read(buf, 0, buf.length)) > 0) {
+                               fos.write(buf, 0, read);
+                               size += read;
+                               if (max_size != 0) {
+                                       String per = Double.toString((((double) size) * 100)
+                                                       / max_size);
+                                       per = per.substring(0, Math.min(per.indexOf(".") + 3, per
+                                                       .length()));
+                                       status.setText("\83R\83\81\83\93\83g\83_\83E\83\93\83\8d\81[\83h\81F" + per + "\83p\81[\83Z\83\93\83g\8a®\97¹");
+                               } else {
+                                       status.setText("\83R\83\81\83\93\83g\83_\83E\83\93\83\8d\81[\83h\92\86\81F"
+                                                       + Integer.toString(size >> 10) + "kbytes\83_\83E\83\93\83\8d\81[\83h");
+                               }
+                               if (StopFlag.needStop()) {
+                                       System.out.println("Stopped.");
+                                       is.close();
+                                       os.flush();
+                                       os.close();
+                                       con.disconnect();
+                                       file.delete();
+                                       return null;
+                               }
+                       }
+                       System.out.println("ok.");
+                       is.close();
+                       fos.flush();
+                       fos.close();
+                       con.disconnect();
+                       return file;
+               } catch (IOException ex) {
+                       ex.printStackTrace();
+               }
+
+               return null;
+       }
+
+       private String WayBackKey = "0";
+
+       private String WayBackTime = "0";
+
+       private final static DateFormat DateFmt = new SimpleDateFormat(
+                       "yyyy/MM/dd HH:mm:ss");
+
+       private final static DateFormat DateFmt2 = new SimpleDateFormat(
+                       "yyyy/MM/dd HH:mm");
+
+       private final static String WAYBACKKEY_STR = "waybackkey=";
+
+       private boolean getWayBackKey(String time) {
+               System.out.print("Setting wayback time...");
+               Date date = null;
+               String waybacktime = "0";
+               try {
+                       date = DateFmt.parse(time);
+               } catch (ParseException ex2) {
+                       date = null;
+               }
+               if (date == null) {
+                       try {
+                               date = DateFmt2.parse(time);
+                       } catch (ParseException ex3) {
+                               date = null;
+                       }
+               }
+               if (date != null) {
+                       waybacktime = Long.toString(date.getTime() / 1000);
+                       System.out.println("ok.(" + date.toString() + "):" + waybacktime);
+               } else {
+                       try {
+                               long tmp_time = Long.parseLong(time);
+                               waybacktime = Long.toString(tmp_time);
+                               date = new Date(tmp_time * 1000);
+                               System.out.println("ok.(" + date.toString() + "):"
+                                               + waybacktime);
+                       } catch (NumberFormatException ex4) {
+                               System.out.println("ng.");
+                               System.out.println("Cannot parse wayback time.");
+                               return false;
+                       }
+               }
+               System.out.print("Getting wayback key...");
+               String url = "http://www.nicovideo.jp/api/getwaybackkey?thread="
+                               + ThreadID;
+               String ret = "";
+               try {
+                       HttpURLConnection con = (HttpURLConnection) (new URL(url))
+                                       .openConnection(ConProxy);
+                       /* \83\8a\83N\83G\83X\83g\82Ì\90Ý\92è */
+                       con.setRequestMethod("GET");
+                       con.addRequestProperty("Cookie", Cookie);
+                       con.addRequestProperty("Connection", "close");
+                       con.setDoInput(true);
+                       con.connect();
+                       if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
+                               System.out.println("Can't get WayBackKey:" + url);
+                               return false;
+                       }
+                       /* \96ß\82è\92l\82Ì\8eæ\93¾ */
+                       BufferedReader br = new BufferedReader(new InputStreamReader(con
+                                       .getInputStream()));
+                       ret = br.readLine();
+                       br.close();
+                       con.disconnect();
+               } catch (IOException ex1) {
+                       System.out.println("ng.");
+                       ex1.printStackTrace();
+                       return false;
+               }
+               int idx = 0;
+               if ((idx = ret.indexOf(WAYBACKKEY_STR)) < 0) {
+                       System.out.println("ng.");
+                       System.out.println("Cannot find wayback key from response.");
+                       return false;
+               }
+               int end_idx = Math.max(ret.length(), ret.indexOf("&"));
+               String waybackkey = ret.substring(idx + WAYBACKKEY_STR.length(),
+                               end_idx);
+               if (waybackkey == null || waybackkey.equals("")) {
+                       System.out.println("ng.");
+                       System.out.println("Cannot get wayback key.");
+                       return false;
+               }
+               System.out.println("ok. key:" + waybackkey);
+               WayBackTime = waybacktime;
+               WayBackKey = waybackkey;
+               return true;
+       }
+
+       public String getBackCommentFromLength(String def) {
+               if (VideoLength < 0) {
+                       return def;
+               } else if (VideoLength >= 0 && VideoLength < 60) {
+                       return "100";
+               } else if (VideoLength >= 60 && VideoLength < 300) {
+                       return "250";
+               } else if (VideoLength >= 300 && VideoLength < 600) {
+                       return "500";
+               } else {
+                       return "1000";
+               }
+       }
+}
diff --git a/frontend/src/saccubus/util/FileDropTarget.java b/frontend/src/saccubus/util/FileDropTarget.java
new file mode 100644 (file)
index 0000000..cc86e22
--- /dev/null
@@ -0,0 +1,60 @@
+package saccubus.util;
+
+import java.awt.datatransfer.*;
+import java.awt.dnd.*;
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.JTextField;
+
+public class FileDropTarget extends DropTargetAdapter {
+       private final JTextField Field;
+
+       private final boolean isFolder;
+
+       public FileDropTarget(JTextField field, boolean is_folder) {
+               isFolder = is_folder;
+               Field = field;
+       }
+
+       public void dragOver(DropTargetDragEvent dtde) {
+               if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                       dtde.acceptDrag(DnDConstants.ACTION_COPY);
+                       return;
+               }
+               dtde.rejectDrag();
+       }
+
+       public void drop(DropTargetDropEvent dtde) {
+               try {
+                       if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                               dtde.acceptDrop(DnDConstants.ACTION_COPY);
+                               Transferable t = dtde.getTransferable();
+                               java.util.List list = (java.util.List) t
+                                               .getTransferData(DataFlavor.javaFileListFlavor);
+                               for (Object o : list) {
+                                       if (o instanceof File) {
+                                               File file = (File) o;
+                                               if (isFolder) {
+                                                       if (file.isDirectory()) {
+                                                               Field.setText(file.getPath());
+                                                       } else {
+                                                               Field.setText(file.getParent());
+                                                       }
+                                               } else {
+                                                       if (file.isFile()) {
+                                                               Field.setText(file.getPath());
+                                                       }
+                                               }
+                                       }
+                               }
+                               dtde.dropComplete(true);
+                       }
+               } catch (UnsupportedFlavorException e) {
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+       }
+
+}
diff --git a/frontend/src/saccubus/util/Util.java b/frontend/src/saccubus/util/Util.java
new file mode 100644 (file)
index 0000000..7f83bd1
--- /dev/null
@@ -0,0 +1,26 @@
+package saccubus.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class Util {
+       /*
+        * OutputStream\82Ö\83f\81[\83^\82ð\8f\91\82«\8d\9e\82Þ
+        */
+       public static void writeInt(OutputStream os, int i) throws IOException {
+               // \83\8a\83g\83\8b\83G\83\93\83f\83B\83A\83\93
+               os.write((i >> 0) & 0xff);
+               os.write((i >> 8) & 0xff);
+               os.write((i >> 16) & 0xff);
+               os.write((i >> 24) & 0xff);
+       }
+       public static int readInt(InputStream is) throws IOException{
+               int num =       (is.read() & 0xff) + 
+               (is.read() & 0xff) << 8+
+               (is.read() & 0xff) << 16+
+               (is.read() & 0xff) << 24;
+               return num;
+       }
+
+}