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.gui.ContainsAttributeFilterTable;
import cx.fbn.nevernote.gui.DateAttributeFilterTable;
import cx.fbn.nevernote.gui.ShortcutKeys;
+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";
- public static String[] validVersions = {"0.1"};
+ public static String version = "0.1.3";
+ public static String[] validVersions = {"0.1.3", "0.1.2", "0.1.1", "0.1"};
public static String username = "";
//public static String password = "";
// 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();
}
public static String getUpdatesAvailableUrl() {
settings.beginGroup("Upgrade");
- String text = (String)settings.value("avialableUrl", "http://nevernote.sourceforge.net/versions.txt");
+ String text = (String)settings.value("avialableUrl", "http://puma.cis.ibaraki.ac.jp/products/neighbornote/develop/versions.txt");
settings.endGroup();
return text;
}
public static String getUpdateAnnounceUrl() {
settings.beginGroup("Upgrade");
- String text = (String)settings.value("announceUrl", "http://nevernote.sourceforge.net/upgrade.html");
+ String text = (String)settings.value("announceUrl", "http://puma.cis.ibaraki.ac.jp/products/neighbornote/develop/upgrade.html");
+ 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;
}
}
// 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() {
return value;
}
- // 最後に開いていたノート群を取得
- public static HashMap<Integer, String> getLastViewedTabs() {
- settings.beginGroup("General");
+ // タグを排除してプレーンテキストを抽出
+ 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("<.+?>", ""); // <で始まり>で終わる文字列を除去
- @SuppressWarnings("unchecked")
- HashMap<Integer, String> tabWindows = (HashMap<Integer, String>) settings.value("lastViewedTabs", null);
+ // HTML特殊文字のサニタイジングを解除
+ plainText = plainText.replaceAll("'", "'");
+ plainText = plainText.replaceAll(""", "\"");
+ plainText = plainText.replaceAll(">", ">");
+ plainText = plainText.replaceAll("<", "<");
+ plainText = plainText.replaceAll("&", "&");
- settings.endGroup();
- return tabWindows;
+ plainText = plainText.replaceAll("&.+?;", ""); // その他HTML特殊文字があれば除去
+
+ return plainText;
}
- // 最後に開いていたノート群をセット
- public static void setLastViewedTabs(HashMap<Integer, String> tabs) {
- settings.beginGroup("General");
- if (tabs != null) {
- settings.setValue("lastViewedTabs", tabs);
- } else {
- settings.setValue("lastViewedTabs", "");
+ // 全文検索機能の対象となるテーブルとカラムを再構築
+ public static boolean rebuildFullTextTarget(NSqlQuery query) {
+ StringBuilder noteTableTarget = new StringBuilder();
+ boolean success = true;
+
+ if (Global.indexNoteBody()) {
+ noteTableTarget.append("CONTENTTEXT");
}
- settings.endGroup();
+ if (Global.indexNoteTitle()) {
+ if (noteTableTarget.length() > 0) {
+ noteTableTarget.append(", ");
+ }
+ noteTableTarget.append("TITLE");
+ }
+
+ // TODO 他の項目もあとで追加
+
+ if (noteTableTarget.length() > 0) {
+ query.prepare("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', :column);");
+ query.bindValue(":column", noteTableTarget.toString());
+ if (!query.exec()) {
+ success = false;
+ }
+ }
+
+ return success;
}
}