OSDN Git Service

Evernote関連ノート取得数と連想ノート表示数を変更した
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / Global.java
index c633420..42f62c4 100644 (file)
@@ -23,6 +23,7 @@ package cx.fbn.nevernote;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -40,6 +41,7 @@ import com.evernote.edam.type.User;
 import com.evernote.edam.type.UserAttributes;
 import com.swabunga.spell.engine.Configuration;
 import com.trolltech.qt.core.QByteArray;
+import com.trolltech.qt.core.QFile;
 import com.trolltech.qt.core.QSettings;
 import com.trolltech.qt.core.QSize;
 import com.trolltech.qt.gui.QPalette;
@@ -51,6 +53,8 @@ import cx.fbn.nevernote.config.StartupConfig;
 import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;
 import cx.fbn.nevernote.gui.DateAttributeFilterTable;
 import cx.fbn.nevernote.gui.ShortcutKeys;
+import cx.fbn.nevernote.sql.DatabaseConnection;
+import cx.fbn.nevernote.sql.driver.NSqlQuery;
 import cx.fbn.nevernote.utilities.ApplicationLogger;
 import cx.fbn.nevernote.utilities.Pair;
 
@@ -64,9 +68,8 @@ import cx.fbn.nevernote.utilities.Pair;
 
 public class Global {
        // Set current version and the known versions.
-       // ICHANGED 自分用に変更
-       public static String version = "0.1.2";
-       public static String[] validVersions = {"0.1.2", "0.1.1", "0.1"};
+       public static String version = "0.3";
+       public static String[] validVersions = {"0.3", "0.2", "0.1.3", "0.1.2", "0.1.1", "0.1"};
        
     public static String username = ""; 
     //public static String password = "";     
@@ -137,7 +140,7 @@ public class Global {
     //public static int minimumWordCount = 2;
     
     // Regular expression to parse text with when indexing
-    private static String wordRegex;
+//    private static String wordRegex;
     
     // Experimental fixes.  Set via Edit/Preferences/Debugging
     public static boolean enableCarriageReturnFix = false;
@@ -157,8 +160,6 @@ public class Global {
        public static String    databaseName = new String("NeverNote");  // database name.  used for multiple databases to separate settings.
        public static String    indexDatabaseName = new String("Index"); // searchable words database
        public static String    resourceDatabaseName = new String("Resources");  // attachments database
-       
-       // ICHANGED
        public static String behaviorDatabaseName = new String("Behavior"); // 操作履歴データベース   
        
        public static DateAttributeFilterTable createdSinceFilter;
@@ -196,8 +197,19 @@ public class Global {
        
     // Do initial setup 
     public static void setup(StartupConfig startupConfig) throws InitializationException  {
-       // ICHANGED 設定値の保存先を変更
-        settings = new QSettings("NeighborNote.ini", QSettings.Format.IniFormat);
+       String settingFileName = new String("NeighborNote.ini");
+       
+       // バージョン0.1.2以下で作成された古い設定ファイルを見つけたら、ホームディレクトリに移動させる。
+       String oldSettingPath = new QSettings(settingFileName, QSettings.Format.IniFormat).fileName();
+       File homeDir = new File(FileManager.toPlatformPathSeparator(startupConfig.getHomeDirPath()));
+       String homePath = FileManager.slashTerminatePath(homeDir.getPath());
+       if (QFile.exists(oldSettingPath)) {
+               QFile file = new QFile(oldSettingPath);
+               file.copy(homePath + settingFileName);
+               file.remove();
+       }
+       
+        settings = new QSettings(homePath + settingFileName, QSettings.Format.IniFormat);
         
         disableViewing = startupConfig.getDisableViewing();
         syncOnly = startupConfig.isSyncOnly();
@@ -208,10 +220,10 @@ public class Global {
                getServer();  // Setup URL to connect to
                
                // Get regular expressions used to parse out words
-               settings.beginGroup("General");
-               String regex = (String) settings.value("regex", "[,\\s]+");
-               setWordRegex(regex);
-               settings.endGroup();
+//             settings.beginGroup("General");
+//             String regex = (String) settings.value("regex", "[,\\s]+");
+//             setWordRegex(regex);
+//             settings.endGroup();
                
                //Setup debugging information
                settings.beginGroup("Debug");
@@ -238,12 +250,12 @@ public class Global {
     }
 
     // Get/Set word parsing regular expression
-    public static String getWordRegex() {
-       return wordRegex;
-    }
-    public static void setWordRegex(String r) {
-       wordRegex = r;
-    }
+//    public static String getWordRegex() {
+//     return wordRegex;
+//    }
+//    public static void setWordRegex(String r) {
+//     wordRegex = r;
+//    }
 
    // Set the debug message level
    public static void setMessageLevel(String msglevel) {
@@ -1229,7 +1241,6 @@ public class Global {
                return val;
     }
     
-       // ICHANGED
        // 操作履歴データベースのURL(フルパス)をゲット
        public static String getBehaviorDatabaseUrl() {
                settings.beginGroup("General");
@@ -1258,7 +1269,6 @@ public class Global {
                settings.endGroup();
     }
     
-       // ICHANGED
        public static void setBehaviorDatabaseUrl(String value) {
                settings.beginGroup("General");
                settings.setValue("BehaviorDatabaseURL", value);
@@ -1867,18 +1877,18 @@ public class Global {
                settings.endGroup();    
     }
     // Get/Set characters that shouldn't be removed from a word
-    public static String getSpecialIndexCharacters() {
-               settings.beginGroup("Index");
-               String text = (String)settings.value("specialCharacters", "");
-               settings.endGroup();    
-               return text;
-    }
-    public static void setSpecialIndexCharacters(String value) {
-               settings.beginGroup("Index");
-               settings.setValue("specialCharacters", value);
-               settings.endGroup();    
-               databaseCache = value;
-    }
+//    public static String getSpecialIndexCharacters() {
+//             settings.beginGroup("Index");
+//             String text = (String)settings.value("specialCharacters", "");
+//             settings.endGroup();    
+//             return text;
+//    }
+//    public static void setSpecialIndexCharacters(String value) {
+//             settings.beginGroup("Index");
+//             settings.setValue("specialCharacters", value);
+//             settings.endGroup();    
+//             databaseCache = value;
+//    }
     
     //*****************************************************************************
     // Control how tag selection behaves (should they be "and" or "or" selections
@@ -2005,27 +2015,27 @@ public class Global {
     }
     
     // If we should automatically wildcard searches
-    public static boolean automaticWildcardSearches() {
-               settings.beginGroup("General");
-               try {
-                       String value = (String)settings.value("automaticWildcard", "false");
-                       settings.endGroup();
-                       if (value.equals("true"))
-                               return true;
-                       else
-                               return false;
-               } catch (java.lang.ClassCastException e) {
-                       Boolean value = (Boolean) settings.value("automaticWildcard", false);
-                       settings.endGroup();
-                       return value;
-               }
-
-    }
-    public static void setAutomaticWildcardSearches(boolean value) {
-               settings.beginGroup("General");
-               settings.setValue("automaticWildcard", value);
-               settings.endGroup();    
-    }
+//    public static boolean automaticWildcardSearches() {
+//             settings.beginGroup("General");
+//             try {
+//                     String value = (String)settings.value("automaticWildcard", "false");
+//                     settings.endGroup();
+//                     if (value.equals("true"))
+//                             return true;
+//                     else
+//                             return false;
+//             } catch (java.lang.ClassCastException e) {
+//                     Boolean value = (Boolean) settings.value("automaticWildcard", false);
+//                     settings.endGroup();
+//                     return value;
+//             }
+//
+//    }
+//    public static void setAutomaticWildcardSearches(boolean value) {
+//             settings.beginGroup("General");
+//             settings.setValue("automaticWildcard", value);
+//             settings.endGroup();    
+//    }
 
     // If we should automatically select the children of any tag
     public static boolean displayRightToLeft() {
@@ -2067,7 +2077,6 @@ public class Global {
                databaseCache = value;
     }
     
-    // ICHANGED
     // 複数ノート同時閲覧操作に対する重み付け
     public static void setBrowseWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2091,7 +2100,6 @@ public class Global {
                return value;
     }
     
-    // ICHANGED
     // ノート内容のコピー&ペースト操作に対する重み付け
     public static void setCopyPasteWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2115,7 +2123,6 @@ public class Global {
                return value;
     }
     
-    // ICHANGED
     // 新規ノート追加操作に対する重み付け
     public static void setAddNewNoteWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2126,11 +2133,11 @@ public class Global {
                settings.beginGroup("RensoNoteList");
                Integer value;
                try {
-                       String val  = (String)settings.value("addNewNoteWeight", 1);
+                       String val  = (String)settings.value("addNewNoteWeight", 3);
                        value = new Integer(val.trim());
                } catch (Exception e) {
                        try {
-                               value = (Integer)settings.value("addNewNoteWeight", 1);
+                               value = (Integer)settings.value("addNewNoteWeight", 3);
                        } catch (Exception e1) {
                                value = 1;
                        }
@@ -2139,7 +2146,6 @@ public class Global {
                return value;
        }
        
-       // ICHANGED
        // 連想ノートクリック操作に対する重み付け
     public static void setRensoItemClickWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2163,7 +2169,6 @@ public class Global {
                return value;
        }
        
-       // ICHANGED
        // タグ付け操作に対する重み付け
     public static void setSameTagWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2187,7 +2192,6 @@ public class Global {
                return value;
        }
        
-       // ICHANGED
        // ノートブック変更操作に対する重み付け
     public static void setSameNotebookWeight(int weight) {
                settings.beginGroup("RensoNoteList");
@@ -2210,17 +2214,39 @@ public class Global {
                settings.endGroup();
                return value;
        }
+       
+       // Evernote関連ノート機能統合に対する重み付け
+       public static void setENRelatedNotesWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("enRelatedNotesWeight", weight);
+               settings.endGroup();
+       }
+       public static int getENRelatedNotesWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val = (String)settings.value("enRelatedNotesWeight", 5);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("enRelatedNotesWeight", 5);
+                       } catch (Exception e1) {
+                               value = 10;
+                       }
+               }
+               settings.endGroup();
+               return value;
+       }
     
     //*******************
     // ノートのマージ・複製の関連ノートリストへの適用
     //*******************
-    // ICHANGED
     public static void setMergeRensoNote(boolean value) {
                settings.beginGroup("RensoNoteList");
                settings.setValue("mergeRensoNoteList", value);
                settings.endGroup();    
     }
-    // ICHANGED
+    
     public static boolean getMergeRensoNote() {
                settings.beginGroup("RensoNoteList");
                try {
@@ -2236,13 +2262,13 @@ public class Global {
                        return value;
                }
     }
-    // ICHANGED
+    
     public static void setDuplicateRensoNote(boolean value) {
                settings.beginGroup("RensoNoteList");
                settings.setValue("duplicateRensoNoteList", value);
                settings.endGroup();    
     }
-    // ICHANGED
+    
     public static boolean getDuplicateRensoNote() {
                settings.beginGroup("RensoNoteList");
                try {
@@ -2259,7 +2285,6 @@ public class Global {
                }
     }
     
-    // ICHANGED
     // 連想ノートリストからノートを除外するときに確認メッセージを表示するかどうか
     public static boolean verifyExclude() {
                settings.beginGroup("RensoNoteList");
@@ -2276,7 +2301,7 @@ public class Global {
                        return value;
                }
     }
-    // ICHANGED
+    
     public static void setVerifyExclude(boolean val) {
                settings.beginGroup("RensoNoteList");
                if (val)
@@ -2286,7 +2311,6 @@ public class Global {
                settings.endGroup();
     }
     
-       // ICHANGED
        // 連想ノートリスト最大表示アイテム数
     public static void setRensoListItemMaximum(int maximum) {
                settings.beginGroup("RensoNoteList");
@@ -2297,17 +2321,305 @@ public class Global {
                settings.beginGroup("RensoNoteList");
                Integer value;
                try {
-                       String val  = (String)settings.value("rensoListMaximum", 20);
+                       String val  = (String)settings.value("rensoListMaximum", 10);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("rensoListMaximum", 10);
+                       } catch (Exception e1) {
+                               value = 10;
+                       }
+               }
+               settings.endGroup();
+               return value;
+       }
+       
+       // タグを排除してプレーンテキストを抽出
+       public static String extractPlainText(String sourceText) {
+               String plainText = sourceText.replaceAll("<.+?>", "");  // タグを除去
+               plainText = plainText.replaceAll("\\s{2,}", " ");               // 2個以上の空白文字を1文字の空白に変換
+               String kaigyo = System.getProperty("line.separator");
+               plainText = plainText.replaceAll(kaigyo, "");                   // 改行を除去
+//             plainText = plainText.replaceAll("&lt;.+?&gt;", "");    // &lt;で始まり&gt;で終わる文字列を除去
+               
+               // HTML特殊文字のサニタイジングを解除
+               plainText = plainText.replaceAll("&#39;", "'");
+               plainText = plainText.replaceAll("&quot;", "\"");
+               plainText = plainText.replaceAll("&gt;", ">");
+               plainText = plainText.replaceAll("&lt;", "<");
+               plainText = plainText.replaceAll("&amp;", "&");
+               
+               plainText = plainText.replaceAll("&.+?;", "");                  // その他HTML特殊文字があれば除去
+               
+               return plainText;
+       }
+       
+       // 全文検索機能の対象となるテーブルとカラムを再構築
+       public static boolean rebuildFullTextNoteTarget(DatabaseConnection dbConn) {
+               NSqlQuery nQuery = new NSqlQuery(dbConn.getConnection());
+               StringBuilder noteTableTarget = new StringBuilder();
+               boolean success = true;
+               
+               if (Global.indexNoteBody()) {
+                       noteTableTarget.append("CONTENTTEXT");
+               }
+               if (Global.indexNoteTitle()) {
+                       if (noteTableTarget.length() > 0) {
+                               noteTableTarget.append(", ");
+                       }
+                       noteTableTarget.append("TITLE");
+               }
+               
+               if (noteTableTarget.length() > 0) {
+                       nQuery.prepare("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', :column);");
+                       nQuery.bindValue(":column", noteTableTarget.toString());
+                       if (!nQuery.exec()) {
+                               success = false;
+                       }
+               }
+               
+               return success;
+       }
+       
+       public static boolean rebuildFullTextResourceTarget(DatabaseConnection dbConn) {
+               NSqlQuery rQuery = new NSqlQuery(dbConn.getResourceConnection());
+               StringBuilder resourceTableTarget = new StringBuilder();
+               boolean success = true;
+               
+               if (Global.indexAttachmentsLocally()) {
+                       resourceTableTarget.append("RESOURCETEXT");
+               }
+               
+               if (resourceTableTarget.length() > 0) {
+                       rQuery.prepare("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTERESOURCES', :column);");
+                       rQuery.bindValue(":column", resourceTableTarget.toString());
+                       if (!rQuery.exec()) {
+                               success = false;
+                       }
+               }
+               
+               return success;
+       }
+       
+    // 操作ログを取らないモードのボタン状態
+    public static boolean isHaltLogButton() {
+               settings.beginGroup("RensoNoteList");
+               try {
+                       String text = (String)settings.value("haltOperationLog", "false");
+                       settings.endGroup();
+                       if (text.equalsIgnoreCase("true"))
+                               return true;
+                       else
+                               return false;
+               } catch (java.lang.ClassCastException e) {
+                       Boolean value = (Boolean) settings.value("haltOperationLog", true);
+                       settings.endGroup();
+                       return value;
+               }
+    }
+    public static void saveHaltLogButton(boolean val) {
+               settings.beginGroup("RensoNoteList");
+               if (val)
+                       settings.setValue("haltOperationLog", "true");
+               else
+                       settings.setValue("haltOperationLog", "false");
+               settings.endGroup();
+    }
+    
+    // 連想ノートリストの重み付けモードの状態
+    public static String rensoWeightingSelect() {
+               settings.beginGroup("RensoNoteList");
+               String text = (String)settings.value("rensoWeightingSelect", "Standard");
+               settings.endGroup();
+               return text;
+    }
+    public static void saveRensoWeightingSelect(String val) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("rensoWeightingSelect", val);
+               settings.endGroup();
+    }
+    
+    // ordinal から指定した Enum の要素に変換する汎用関数
+       public static <E extends Enum<E>> E fromOrdinal(Class<E> enumClass, int ordinal) {
+           E[] enumArray = enumClass.getEnumConstants();
+           return enumArray[ordinal];
+       }
+       
+       // 連想ノートリスト重み付けモード:カスタムの設定値(同時閲覧)
+    public static int customBrowseWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customBrowseWeight", 1);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customBrowseWeight", 1);
+                       } catch (Exception e1) {
+                               value = 1;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomBrowseWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customBrowseWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(コピー&ペースト)
+    public static int customCopyPasteWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customCopyPasteWeight", 3);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customCopyPasteWeight", 3);
+                       } catch (Exception e1) {
+                               value = 3;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomCopyPasteWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customCopyPasteWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(新規ノート追加)
+    public static int customAddNewNoteWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customAddNewNoteWeight", 3);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customAddNewNoteWeight", 3);
+                       } catch (Exception e1) {
+                               value = 3;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomAddNewNoteWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customAddNewNoteWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(連想ノートクリック)
+    public static int customRensoItemClickWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customRensoItemClickWeight", 10);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customRensoItemClickWeight", 10);
+                       } catch (Exception e1) {
+                               value = 10;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomRensoItemClickWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customRensoItemClickWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(同じタグ)
+    public static int customSameTagWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customSameTagWeight", 2);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customSameTagWeight", 2);
+                       } catch (Exception e1) {
+                               value = 2;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomSameTagWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customSameTagWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(同じノートブック)
+    public static int customSameNotebookWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customSameNotebookWeight", 2);
+                       value = new Integer(val.trim());
+               } catch (Exception e) {
+                       try {
+                               value = (Integer)settings.value("customSameNotebookWeight", 2);
+                       } catch (Exception e1) {
+                               value = 2;
+                       }
+               }
+               settings.endGroup();
+               return value;
+    }
+       public static void saveCustomSameNotebookWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customSameNotebookWeight", weight);
+               settings.endGroup();
+       }
+       // 連想ノートリスト重み付けモード:カスタムの設定値(Evernote関連ノート)
+    public static int customENRelatedNotesWeight() {
+               settings.beginGroup("RensoNoteList");
+               Integer value;
+               try {
+                       String val  = (String)settings.value("customENRelatedNotesWeight", 5);
                        value = new Integer(val.trim());
                } catch (Exception e) {
                        try {
-                               value = (Integer)settings.value("rensoListMaximum", 20);
+                               value = (Integer)settings.value("customENRelatedNotesWeight", 5);
                        } catch (Exception e1) {
-                               value = 20;
+                               value = 5;
                        }
                }
                settings.endGroup();
                return value;
+    }
+       public static void saveCustomENRelatedNotesWeight(int weight) {
+               settings.beginGroup("RensoNoteList");
+               settings.setValue("customENRelatedNotesWeight", weight);
+               settings.endGroup();
+       }
+
+       // ツールバーの「新規」ボタンを押した時、新規ノートをタブで開くかどうか
+       public static boolean toolBarNewAction() {
+               settings.beginGroup("General");
+               try {
+                       String text = (String)settings.value("toolBarNewAction", "true");
+                       settings.endGroup();
+                       if (text.equalsIgnoreCase("true"))
+                               return true;
+                       else
+                               return false;
+               } catch (java.lang.ClassCastException e) {
+                       Boolean value = (Boolean) settings.value("toolBarNewAction", true);
+                       settings.endGroup();
+                       return value;
+               }
+       }
+       public static void setToolBarNewAction(boolean value) {
+               settings.beginGroup("General");
+               settings.setValue("toolBarNewAction", value);
+               settings.endGroup();    
        }
 }