import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
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;
import cx.fbn.nevernote.config.StartupConfig;
import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;
import cx.fbn.nevernote.gui.DateAttributeFilterTable;
+import cx.fbn.nevernote.gui.SearchEdit.SearchTarget;
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;
public class Global {
// Set current version and the known versions.
- // ICHANGED 自分用に変更
- public static String version = "0.1.1";
- public static String[] validVersions = {"0.1.1", "0.1"};
+ public static String version = "0.5.3";
+ public static String[] validVersions = {"0.5.3", "0.5.2", "0.5.1", "0.5", "0.4.1", "0.4", "0.3", "0.2", "0.1.3", "0.1.2", "0.1.1", "0.1"};
public static String username = "";
//public static String password = "";
//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;
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;
// 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();
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");
//messageLevel = 1;
setMessageLevel(msglevel);
keepRunning = true; // Make sure child threads stay running
- disableUploads = disableUploads(); // Should we upload anything? Normally false.\r
- //disableUploads = true; //***** DELETE THIS LINE *******\r
+ disableUploads = disableUploads(); // Should we upload anything? Normally false.
+ //disableUploads = true; //***** DELETE THIS LINE *******
enableCarriageReturnFix = enableCarriageReturnFix(); // Enable test fix?
enableHTMLEntitiesFix = enableHtmlEntitiesFix(); // Enable test fix?
}
// 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) {
settings.beginGroup("General");
Integer len;
try {
- len = (Integer)settings.value("recognitionWeight", 30);\r
+ len = (Integer)settings.value("recognitionWeight", 30);
} catch (Exception e) {
- len = 80;\r
+ len = 80;
}
settings.endGroup();
return len;
return val;
}
- // ICHANGED
// 操作履歴データベースのURL(フルパス)をゲット
public static String getBehaviorDatabaseUrl() {
settings.beginGroup("General");
settings.endGroup();
}
- // ICHANGED
public static void setBehaviorDatabaseUrl(String value) {
settings.beginGroup("General");
settings.setValue("BehaviorDatabaseURL", value);
// Should the toolbar be visible?
- public static boolean isToolbarButtonVisible(String window) {
+ public static boolean isToolbarButtonVisible(String window, Boolean val) {
settings.beginGroup("ToolbarButtonsVisible");
try {
- String text = (String)settings.value(window, "true");
+ String text = (String)settings.value(window, val.toString());
settings.endGroup();
if (text.equalsIgnoreCase("true"))
return true;
else
return false;
} catch (java.lang.ClassCastException e) {
- Boolean value = (Boolean) settings.value(window, true);
+ Boolean value = (Boolean) settings.value(window, val);
settings.endGroup();
return value;
}
settings.endGroup();
return text;
}
+ public static String getUpdateDownloadUrl() {
+ settings.beginGroup("Upgrade");
+ String text = (String)settings.value("downloadUrl", "http://puma.cis.ibaraki.ac.jp/products/neighbornote/download.html");
+ settings.endGroup();
+ return text;
+ }
//*******************
// Index settings
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
}
// 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() {
databaseCache = value;
}
- // ICHANGED
// 複数ノート同時閲覧操作に対する重み付け
public static void setBrowseWeight(int weight) {
settings.beginGroup("RensoNoteList");
return value;
}
- // ICHANGED
// ノート内容のコピー&ペースト操作に対する重み付け
public static void setCopyPasteWeight(int weight) {
settings.beginGroup("RensoNoteList");
return value;
}
- // ICHANGED
// 新規ノート追加操作に対する重み付け
public static void setAddNewNoteWeight(int weight) {
settings.beginGroup("RensoNoteList");
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;
}
return value;
}
- // ICHANGED
// 連想ノートクリック操作に対する重み付け
public static void setRensoItemClickWeight(int weight) {
settings.beginGroup("RensoNoteList");
return value;
}
- // ICHANGED
// タグ付け操作に対する重み付け
public static void setSameTagWeight(int weight) {
settings.beginGroup("RensoNoteList");
return value;
}
- // ICHANGED
// ノートブック変更操作に対する重み付け
public static void setSameNotebookWeight(int weight) {
settings.beginGroup("RensoNoteList");
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 {
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 {
}
}
- // ICHANGED
// 連想ノートリストからノートを除外するときに確認メッセージを表示するかどうか
public static boolean verifyExclude() {
settings.beginGroup("RensoNoteList");
return value;
}
}
- // ICHANGED
+
public static void setVerifyExclude(boolean val) {
settings.beginGroup("RensoNoteList");
if (val)
settings.endGroup();
}
- // ICHANGED
// 連想ノートリスト最大表示アイテム数
public static void setRensoListItemMaximum(int maximum) {
settings.beginGroup("RensoNoteList");
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", 20);
+ value = (Integer)settings.value("rensoListMaximum", 10);
} catch (Exception e1) {
- value = 20;
+ 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("<.+?>", ""); // <で始まり>で終わる文字列を除去
+
+ // HTML特殊文字のサニタイジングを解除
+ plainText = plainText.replaceAll("'", "'");
+ plainText = plainText.replaceAll(""", "\"");
+ plainText = plainText.replaceAll(">", ">");
+ plainText = plainText.replaceAll("<", "<");
+ plainText = plainText.replaceAll("&", "&");
+
+ 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("customENRelatedNotesWeight", 5);
+ } catch (Exception e1) {
+ 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();
+ }
+
+ // 全文検索の範囲
+ public static SearchTarget searchTarget() {
+ settings.beginGroup("General");
+ try {
+ String text = (String)settings.value("searchTarget", "0");
+ settings.endGroup();
+ int ordinal = Integer.parseInt(text);
+ SearchTarget target = fromOrdinal(SearchTarget.class, ordinal);
+ return target;
+ } catch (java.lang.ClassCastException e) {
+ int value = (Integer) settings.value("searchTarget", 0);
+ settings.endGroup();;
+ SearchTarget target = fromOrdinal(SearchTarget.class, value);
+ return target;
+ }
+ }
+
+ public static void setSearchTarget(SearchTarget target) {
+ settings.beginGroup("General");
+ settings.setValue("searchTarget", target.ordinal());
+ settings.endGroup();
+ }
}