OSDN Git Service

Upgrade version number to 0.96
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / Global.java
index 11f2106..d676199 100644 (file)
@@ -21,79 +21,66 @@ package cx.fbn.nevernote;
 \r
 \r
 //import java.io.ByteArrayOutputStream;\r
-import java.io.File;\r
+\r
 import java.io.PrintStream;\r
 import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
 import java.util.Calendar;\r
 import java.util.HashMap;\r
 import java.util.List;\r
-import java.util.concurrent.ArrayBlockingQueue;\r
+\r
+import org.apache.commons.lang.StringEscapeUtils;\r
 \r
 import com.evernote.edam.type.Accounting;\r
 import com.evernote.edam.type.PrivilegeLevel;\r
 import com.evernote.edam.type.User;\r
 import com.evernote.edam.type.UserAttributes;\r
+import com.swabunga.spell.engine.Configuration;\r
 import com.trolltech.qt.core.QByteArray;\r
-import com.trolltech.qt.core.QMutex;\r
 import com.trolltech.qt.core.QSettings;\r
+import com.trolltech.qt.core.QSize;\r
 import com.trolltech.qt.gui.QPalette;\r
 \r
+import cx.fbn.nevernote.config.FileManager;\r
+import cx.fbn.nevernote.config.InitializationException;\r
+import cx.fbn.nevernote.config.StartupConfig;\r
 import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;\r
 import cx.fbn.nevernote.gui.DateAttributeFilterTable;\r
 import cx.fbn.nevernote.gui.ShortcutKeys;\r
-import cx.fbn.nevernote.signals.DBRunnerSignal;\r
-import cx.fbn.nevernote.threads.DBRunner;\r
 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
+import cx.fbn.nevernote.utilities.Pair;\r
 \r
 public class Global {\r
-       public static String version = "0.88";\r
+       public static String version = "0.96";\r
     public static String username = ""; \r
-    public static String password = ""; \r
-\r
-    public static DBRunner                             dbRunner;                       // Database thread\r
-    public static DBRunnerSignal               dbRunnerSignal;         // Signals to the database runner\r
-    public static QMutex                               dbrunnerWorkLock;       // mutex lock for work queue\r
-    \r
-\r
-    public static int mainThreadId=0;\r
-    private static ArrayBlockingQueue<Boolean> mainThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-    \r
-    public static int syncThreadId=1;\r
-    private static ArrayBlockingQueue<Boolean> syncThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
+    public static String password = "";     \r
     \r
-    public static int tagCounterThreadId=2;\r
-    private static ArrayBlockingQueue<Boolean> tagCounterThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-    \r
-    public static int trashCounterThreadId=3;   // This should always be the highest thread ID\r
-    private static ArrayBlockingQueue<Boolean> trashCounterThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-\r
-    public static int indexThreadId=4;         // Thread for indexing words\r
-    private static ArrayBlockingQueue<Boolean> indexThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-\r
-    public static int saveThreadId=5;          // Thread used for processing data to saving content\r
-    private static ArrayBlockingQueue<Boolean> saveThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
 \r
-    public static int notebookCounterThreadId=6;   // Notebook Thread\r
-    private static ArrayBlockingQueue<Boolean> notebookCounterThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-\r
-    public static int indexThread03Id=7;   // unused\r
-    private static ArrayBlockingQueue<Boolean> indexThread03ThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
-\r
-    public static int indexThread04Id=8;   // unused\r
-    private static ArrayBlockingQueue<Boolean> indexThread04ThreadWaiter = new ArrayBlockingQueue<Boolean>(1);\r
+    public static final int mainThreadId=0;\r
+    public static final int syncThreadId=1;\r
+    public static final int tagCounterThreadId=2;\r
+    public static final int trashCounterThreadId=3;   // This should always be the highest thread ID\r
+    public static final int indexThreadId=4;           // Thread for indexing words\r
+    public static final int saveThreadId=5;    // Thread used for processing data to saving content\r
+    public static final int notebookCounterThreadId=6;   // Notebook Thread\r
+    public static final int indexThread03Id=7;   // unused\r
+    public static final int indexThread04Id=8;   // unused\r
+    public static final int dbThreadId=9;   // This should always be the highest thread ID\r
     \r
-    public static int dbThreadId=9;   // This should always be the highest thread ID\r
     \r
+    public static int View_List_Wide = 1;\r
+    public static int View_List_Narrow = 2;\r
+    public static QSize smallThumbnailSize = new QSize(100,75);\r
+    public static QSize largeThumbnailSize = new QSize(300,225);\r
+//    public static boolean listView = true;\r
     \r
-    public static HashMap<String,String> passwordSafe = new HashMap<String, String>();\r
-    public static List<String> passwordRemember = new ArrayList<String>();\r
+    public static HashMap<String,Pair<String,String>> passwordSafe = new HashMap<String, Pair<String,String>>();\r
+    public static List<Pair<String,String>> passwordRemember = new ArrayList<Pair<String,String>>();\r
     public static String currentNotebookGuid;\r
     public static User user; \r
     public static long authTimeRemaining;\r
     public static long authRefreshTime;\r
     public static long failedRefreshes = 0;\r
-    public static String currentDir;\r
     public static boolean keepRunning;\r
     \r
     public static String userStoreUrl;\r
@@ -110,7 +97,8 @@ public class Global {
     public static int noteTableSourceUrlPosition = 7;\r
     public static int noteTableSubjectDatePosition = 8;\r
     public static int noteTableSynchronizedPosition = 9;\r
-    public static int noteTableColumnCount = 10;\r
+    public static int noteTableThumbnailPosition = 10;\r
+    public static int noteTableColumnCount = 11;\r
     public static Integer cryptCounter = 0;\r
     \r
     public static int minimumWordCount = 2;\r
@@ -127,19 +115,16 @@ public class Global {
        public static String attachmentNameDelimeter = "------";\r
        \r
        public static String    databaseName = new String("NeverNote");\r
-       public static String    indexDatabaseName = new String("IndexDatabase.db");\r
        public static DateAttributeFilterTable createdSinceFilter;\r
        public static DateAttributeFilterTable createdBeforeFilter;\r
        public static DateAttributeFilterTable changedSinceFilter;\r
        public static DateAttributeFilterTable changedBeforeFilter;\r
        public static ContainsAttributeFilterTable containsFilter;\r
-//     public static DBLock                            dbLock;\r
-//     public static DBLock                            indexLock;\r
        public static ApplicationLogger    logger;\r
        PrintStream stdoutStream;\r
        public static QPalette                          originalPalette;\r
        public static ShortcutKeys                      shortcutKeys;\r
-       public static boolean                           disableViewing = false;\r
+       public static boolean                           disableViewing;\r
        \r
        public static List<String>                              invalidElements = new ArrayList<String>();\r
        public static HashMap<String, ArrayList<String>>        invalidAttributes = new HashMap<String, ArrayList<String>>();\r
@@ -149,18 +134,22 @@ public class Global {
        \r
        static Calendar startTraceTime;\r
        static Calendar intervalTraceTime;\r
+\r
+       private static FileManager fileManager;\r
        \r
     // Do initial setup \r
-    public static void setup()  {\r
-               if (name == null)\r
-                       name = "NeverNote";\r
-               settings = new QSettings("fbn.cx", name);\r
-                   currentDir = getDirectoryPath();\r
+    public static void setup(StartupConfig startupConfig) throws InitializationException  {\r
+        settings = new QSettings("fbn.cx", startupConfig.getName());\r
+        disableViewing = startupConfig.getDisableViewing();\r
+\r
+        fileManager = new FileManager(startupConfig.getHomeDirPath(), startupConfig.getProgramDirPath());\r
+\r
+\r
                        getServer();\r
                        settings.beginGroup("General");\r
                        String regex = (String) settings.value("regex", "[,\\s]+");\r
                        setWordRegex(regex);\r
-                       String wordString = settings.value("wordLength", "4").toString();\r
+                       String wordString = settings.value("minimumWordLength", "4").toString();\r
                        Integer wordLen = new Integer(wordString);\r
                        Global.minimumWordCount = wordLen;\r
                        settings.endGroup();\r
@@ -172,36 +161,13 @@ public class Global {
                        keepRunning = true;\r
                        disableUploads = disableUploads();\r
                        enableCarriageReturnFix = enableCarriageReturnFix();\r
-//                     dbLock = new DBLock();\r
-//                     indexLock = new DBLock();\r
                        logger = new ApplicationLogger("global.log");\r
                        shortcutKeys = new ShortcutKeys();\r
-                       dbrunnerWorkLock = new QMutex();\r
                        mimicEvernoteInterface = getMimicEvernoteInterface();\r
                        resourceMap = new HashMap<String,String>();\r
                                \r
     }\r
-    public static void setName(String n) {\r
-       if (!n.trim().equals("")) {\r
-               name = "NeverNote-"+n;\r
-       }\r
-    }\r
-    public static String getDirectoryPath() {\r
-               if (currentDir == null) {\r
-                       currentDir = System.getProperty("user.dir");\r
-               }\r
-               if (!currentDir.substring(currentDir.length()-1).equals(File.separator)) {\r
-                       currentDir = currentDir+File.separator;\r
-               }\r
-               return currentDir;\r
-    }\r
-    public static void setDirectoryPath(String path) {\r
-       if (path.trim().equals(""))\r
-               path = System.getProperty("user.dir");\r
-       if (!path.substring(path.length()-1).equals(File.separator)) \r
-                       path = path+File.separator;\r
-       currentDir = path;\r
-    }\r
+\r
     public static String getWordRegex() {\r
        return wordRegex;\r
     }\r
@@ -361,11 +327,18 @@ public class Global {
     }\r
     public static boolean showTrayIcon() {\r
                settings.beginGroup("General");\r
-               String max = (String) settings.value("showTrayIcon", "true");\r
-               settings.endGroup();\r
-               if (!max.equalsIgnoreCase("true"))\r
-                       return false;\r
-               return true;    \r
+               try {\r
+                       String max = (String) settings.value("showTrayIcon", "true");\r
+                       settings.endGroup();\r
+                       if (!max.equalsIgnoreCase("true"))\r
+                               return false;\r
+                       else\r
+                               return true;    \r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("showTrayIcon", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setShowTrayIcon(boolean val) {\r
                settings.beginGroup("General");\r
@@ -376,12 +349,18 @@ public class Global {
                settings.endGroup();\r
     }\r
     public static boolean wasWindowMaximized() {\r
-               settings.beginGroup("General");\r
-               String max = (String) settings.value("isMaximized", "true");\r
-               settings.endGroup();\r
-               if (!max.equalsIgnoreCase("true"))\r
-                       return false;\r
-               return true;    \r
+       try {\r
+                       settings.beginGroup("General");\r
+                       String max = (String) settings.value("isMaximized", "true");\r
+                       settings.endGroup();\r
+                       if (!max.equalsIgnoreCase("true"))\r
+                               return false;\r
+                       return true;    \r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("isMaximized", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void saveWindowMaximized(boolean isMax) {\r
                settings.beginGroup("General");\r
@@ -406,19 +385,29 @@ public class Global {
                settings.endGroup();\r
     }\r
     public static void setSortColumn(int i) {\r
+       int view = Global.getListView();\r
                settings.beginGroup("General");\r
-               settings.setValue("sortColumn", i);\r
+       if (view == Global.View_List_Wide)\r
+               settings.setValue("sortColumn", i);\r
+       else\r
+               settings.setValue("sortColumn-Narrow", i);\r
                settings.endGroup();\r
     }\r
     public static int getSortColumn() {;\r
+    String key;\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               key = "sortColumn";\r
+       else\r
+               key = "sortColumn-Narrow";\r
+\r
        settings.beginGroup("General");\r
        int order;      \r
        try {\r
-               String val  = settings.value("sortColumn", new Integer(0)).toString();\r
+               String val  = settings.value(key, new Integer(0)).toString();\r
                order = new Integer(val.trim());\r
        } catch (Exception e) {\r
                try {\r
-                       order = (Integer)settings.value("sortColumn", 0);\r
+                       order = (Integer)settings.value(key, 0);\r
                } catch (Exception e1) {\r
                    order = 0;\r
                }\r
@@ -428,19 +417,30 @@ public class Global {
        return order;\r
     }\r
     public static void setSortOrder(int i) {\r
+       int view = Global.getListView();\r
                settings.beginGroup("General");\r
-               settings.setValue("sortOrder", i);\r
+       if (view == Global.View_List_Wide)\r
+               settings.setValue("sortOrder", i);\r
+       else\r
+               settings.setValue("sortOrder-Narrow", i);\r
                settings.endGroup();\r
     }\r
     public static int getSortOrder() {\r
+       int view = Global.getListView();\r
                settings.beginGroup("General");\r
+               String key;\r
+       if (view == Global.View_List_Wide)\r
+               key = "sortOrder";\r
+               else\r
+                       key = "sortOrder-Narrow";\r
+\r
                int order;      \r
                try {\r
-                       String val  = settings.value("sortOrder", new Integer(0)).toString();\r
+                       String val  = settings.value(key, new Integer(0)).toString();\r
                        order = new Integer(val.trim());\r
                } catch (Exception e) {\r
                        try {\r
-                               order = (Integer)settings.value("sortOrder", 0);\r
+                               order = (Integer)settings.value(key, 0);\r
                        } catch (Exception e1) {\r
                            order = 0;\r
                        }\r
@@ -450,13 +450,19 @@ public class Global {
                return order;\r
     }\r
     public static boolean automaticLogin() {\r
-               settings.beginGroup("General");\r
-               String text = (String)settings.value("automaticLogin", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;           \r
+       try {\r
+               settings.beginGroup("General");\r
+               String text = (String)settings.value("automaticLogin", "false");\r
+               settings.endGroup();\r
+               if (text.equalsIgnoreCase("true"))\r
+                       return true;\r
+               else\r
+                       return false;           \r
+       } catch (java.lang.ClassCastException e) {\r
+               Boolean value = (Boolean) settings.value("automaticLogin", false);\r
+               settings.endGroup();\r
+               return value;\r
+       }\r
     }\r
     public static void setAutomaticLogin(boolean val) {\r
                settings.beginGroup("General");\r
@@ -467,13 +473,19 @@ public class Global {
                settings.endGroup();\r
     }\r
     public static boolean rememberPassword() {\r
-               settings.beginGroup("General");\r
-               String text = (String)settings.value("rememberPassword", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;           \r
+       try {\r
+                       settings.beginGroup("General");\r
+                       String text = (String)settings.value("rememberPassword", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;   \r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("rememberPassword", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setRememberPassword(boolean val) {\r
                settings.beginGroup("General");\r
@@ -499,20 +511,26 @@ public class Global {
                        noteStoreUrlBase = "sandbox.evernote.com/edam/note/";\r
                }\r
                settings.endGroup();\r
-               if (isPremium())\r
+//             if (isPremium())\r
                        noteStoreUrlBase = "https://" + noteStoreUrlBase;\r
-               else\r
-                       noteStoreUrlBase = "http://" + noteStoreUrlBase;\r
+//             else\r
+//                     noteStoreUrlBase = "http://" + noteStoreUrlBase;\r
                return text;\r
     }\r
     public static boolean disableUploads() {\r
-               settings.beginGroup("General");\r
-               String text = (String)settings.value("disableUploads", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;\r
+       settings.beginGroup("General");\r
+       try {\r
+               String text = (String)settings.value("disableUploads", "false");\r
+               settings.endGroup();\r
+               if (text.equalsIgnoreCase("true"))\r
+                       return true;\r
+               else\r
+                       return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("disableUploads", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setDisableUploads(boolean val) {\r
                settings.beginGroup("General");\r
@@ -525,12 +543,18 @@ public class Global {
     }\r
     public static boolean pdfPreview() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("pdfPreview", "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;\r
+               try {\r
+                       String text = (String)settings.value("pdfPreview", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("pdfPreview", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setPdfPreview(boolean val) {\r
                settings.beginGroup("General");\r
@@ -540,27 +564,28 @@ public class Global {
                        settings.setValue("pdfPreview", "false");\r
                settings.endGroup();\r
     }\r
-    public static void setMinimumWordLength(int len) {\r
-               settings.beginGroup("General");\r
-               settings.setValue("minimumWordLength", len);\r
-               settings.endGroup();            \r
-    }\r
-    public static int getMinimumWordLength() {\r
+    public static boolean newNoteWithSelectedTags() {\r
                settings.beginGroup("General");\r
-               Integer len = 4;\r
                try {\r
-                       String val  = (String)settings.value("minimumWordLength", "4");\r
-                       len = new Integer(val);\r
-               } catch (Exception e) {\r
-                       try {\r
-                               len = (Integer)settings.value("minimumWordLength", 4);\r
-                       } catch (Exception e1) {\r
-                               len = 4;\r
-                       }\r
+                       String text = (String)settings.value("newNoteWithSelectedTags", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("newNoteWithSelectedTags", false);\r
+                       settings.endGroup();\r
+                       return value;\r
                }\r
+    }\r
+    public static void setNewNoteWithSelectedTags(boolean val) {\r
+               settings.beginGroup("General");\r
+               if (val)\r
+                       settings.setValue("newNoteWithSelectedTags", "true");\r
+               else\r
+                       settings.setValue("newNoteWithSelectedTags", "false");\r
                settings.endGroup();\r
-               return len;\r
-               \r
     }\r
     public static void setRecognitionWeight(int len) {\r
                settings.beginGroup("General");\r
@@ -571,7 +596,7 @@ public class Global {
                settings.beginGroup("General");\r
                Integer len;\r
                try {\r
-                       len = (Integer)settings.value("recognitionWeight", 80);\r
+                       len = (Integer)settings.value("recognitionWeight", 30);\r
                } catch (Exception e) {\r
                        len = 80;\r
                }\r
@@ -618,12 +643,19 @@ public class Global {
                settings.endGroup();            \r
     }\r
     public static void setColumnWidth(String col, int width) {\r
-               settings.beginGroup("ColumnWidths");\r
-               settings.setValue(col, width);\r
-               settings.endGroup();\r
-    }\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnWidths");\r
+       else \r
+               settings.beginGroup("ColumnWidths-Narrow");\r
+               settings.setValue(col, width);\r
+               settings.endGroup();\r
+       }\r
     public static int getColumnWidth(String col) {\r
-               settings.beginGroup("ColumnWidths");\r
+       int view = Global.getListView();\r
+       if (view == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnWidths");\r
+       else\r
+               settings.beginGroup("ColumnWidths-Narrow");\r
                Integer width;\r
                try {\r
                        String val  = (String)settings.value(col, "0");\r
@@ -639,12 +671,18 @@ public class Global {
                return width;\r
     }\r
     public static void setColumnPosition(String col, int width) {\r
-               settings.beginGroup("ColumnPosition");\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnPosition");\r
+       else\r
+               settings.beginGroup("ColumnPosition-Narrow");\r
                settings.setValue(col, width);\r
                settings.endGroup();\r
     }\r
     public static int getColumnPosition(String col) {\r
-               settings.beginGroup("ColumnPosition");\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnPosition");\r
+       else\r
+               settings.beginGroup("ColumnPosition-Narrow");\r
                Integer width;\r
                try {\r
                        String val  = (String)settings.value(col, "-1");\r
@@ -661,12 +699,18 @@ public class Global {
     }\r
     public static boolean verifyDelete() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("verifyDelete", "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;           \r
+               try {\r
+                       String text = (String)settings.value("verifyDelete", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("verifyDelete", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setVerifyDelete(boolean val) {\r
                settings.beginGroup("General");\r
@@ -676,15 +720,44 @@ public class Global {
                        settings.setValue("verifyDelete", "false");\r
                settings.endGroup();\r
     }\r
-    public static boolean synchronizeDeletedContent() {\r
+    public static boolean startMinimized() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("syncDeletedContent", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
+               try {\r
+                       String text = (String)settings.value("startMinimized", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("startMinimized", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void setStartMinimized(boolean val) {\r
+               settings.beginGroup("General");\r
+               if (val)\r
+                       settings.setValue("startMinimized", "true");\r
                else\r
-                       return false;           \r
+                       settings.setValue("startMinimized", "false");\r
+               settings.endGroup();\r
     }\r
+    public static boolean synchronizeDeletedContent() {\r
+               settings.beginGroup("General");\r
+               try {\r
+                       String text = (String)settings.value("syncDeletedContent", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("syncDeletedContent", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }  \r
     public static void setSynchronizeDeletedContent(boolean val) {\r
                settings.beginGroup("General");\r
                if (val)\r
@@ -695,12 +768,24 @@ public class Global {
     }\r
     public static boolean isWindowVisible(String window) {\r
                settings.beginGroup("WindowsVisible");\r
-               String text = (String)settings.value(window, "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
+               try {\r
+                       String defaultValue = "true";\r
+                       if (window.equalsIgnoreCase("noteInformation"))\r
+                               defaultValue = "false";\r
+                       String text = (String)settings.value(window, defaultValue);\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
                else\r
                        return false;           \r
+               } catch (java.lang.ClassCastException e) {\r
+                       boolean defaultValue = true;\r
+                       if (window.equalsIgnoreCase("noteInformation"))\r
+                               defaultValue = false;\r
+                       Boolean value = (Boolean) settings.value("showTrayIcon", defaultValue);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void saveWindowVisible(String window, boolean val) {\r
                settings.beginGroup("WindowsVisible");\r
@@ -711,16 +796,41 @@ public class Global {
                settings.endGroup();\r
     }\r
     public static boolean isColumnVisible(String window) {\r
-               settings.beginGroup("ColumnsVisible");\r
-               String text = (String)settings.value(window, "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;   \r
+       String defaultValue = "true";\r
+       int view = Global.getListView();\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnsVisible");\r
+       else\r
+               settings.beginGroup("ColumnsVisible-Narrow"); \r
+               if (window.equalsIgnoreCase("thumbnail") && view == Global.View_List_Wide)\r
+                       defaultValue = "false";\r
+               if (window.equalsIgnoreCase("thumbnail"))\r
+                       defaultValue = "false";\r
+               if (window.equalsIgnoreCase("Guid"))\r
+                       defaultValue = "false";\r
+               try {\r
+                       String text = (String)settings.value(window, defaultValue);\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       boolean defBool = false;\r
+                       if (window.equalsIgnoreCase("true"))\r
+                               defBool = true;\r
+                       else\r
+                               defBool = false;\r
+                       Boolean value = (Boolean) settings.value(window, defBool);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void saveColumnVisible(String column, boolean val) {\r
-               settings.beginGroup("ColumnsVisible");\r
+       if (Global.getListView() == Global.View_List_Wide)\r
+               settings.beginGroup("ColumnsVisible");\r
+       else\r
+               settings.beginGroup("ColumnsVisible-Narrow");                   \r
                if (val)\r
                        settings.setValue(column, "true");\r
                else\r
@@ -729,12 +839,18 @@ public class Global {
     }\r
     public static boolean isEditorButtonVisible(String window) {\r
                settings.beginGroup("EditorButtonsVisible");\r
-               String text = (String)settings.value(window, "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;   \r
+               try {\r
+                       String text = (String)settings.value(window, "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value(window, true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void saveEditorButtonsVisible(String column, boolean val) {\r
                settings.beginGroup("EditorButtonsVisible");\r
@@ -745,13 +861,19 @@ public class Global {
                settings.endGroup();\r
     }\r
     public static boolean enableCarriageReturnFix() {\r
-               settings.beginGroup("Debug");\r
-               String text = (String)settings.value("enableCarriageReturnFix", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;   \r
+       try {\r
+               settings.beginGroup("Debug");\r
+               String text = (String)settings.value("enableCarriageReturnFix", "false");\r
+               settings.endGroup();\r
+               if (text.equalsIgnoreCase("true"))\r
+                       return true;\r
+               else\r
+                       return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("enableCarriageReturnFix", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void saveCarriageReturnFix(boolean val) {\r
                settings.beginGroup("Debug");\r
@@ -825,15 +947,21 @@ public class Global {
                settings.endGroup();\r
                return threads;\r
     }\r
-\r
+    \r
     public static boolean getMimicEvernoteInterface() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("mimicEvernoteInterface", "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;\r
+               try {\r
+                       String text = (String)settings.value("mimicEvernoteInterface", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("mimicEvernoteInterface", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setMimicEvernoteInterface(boolean value) {\r
        settings.beginGroup("General");\r
@@ -846,12 +974,18 @@ public class Global {
     \r
     public static boolean synchronizeOnClose() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("synchronizeOnClose", "false");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;\r
+               try {\r
+                       String text = (String)settings.value("synchronizeOnClose", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("synchronizeOnClose", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setSynchronizeOnClose(boolean val) {\r
                settings.beginGroup("General");\r
@@ -877,9 +1011,14 @@ public class Global {
                String val  = (String)settings.value("DatabaseURL", "");\r
                settings.endGroup();\r
                if (val.equals(""))\r
-                       val = "jdbc:h2:"+Global.getDirectoryPath() +File.separator +"db" +File.separator +Global.databaseName;\r
+                       val = "jdbc:h2:"+Global.getFileManager().getDbDirPath(Global.databaseName);\r
                return val;\r
     }\r
+    public static void setDatabaseUrl(String value) {\r
+               settings.beginGroup("General");\r
+               settings.setValue("DatabaseURL", value);\r
+               settings.endGroup();\r
+    }\r
     public static String getDatabaseUserid() {\r
                settings.beginGroup("General");\r
                String val  = (String)settings.value("databaseUserid", "");\r
@@ -905,12 +1044,18 @@ public class Global {
     }\r
     public static boolean useStandardPalette() {\r
                settings.beginGroup("General");\r
-               String text = (String)settings.value("standardPalette", "true");\r
-               settings.endGroup();\r
-               if (text.equalsIgnoreCase("true"))\r
-                       return true;\r
-               else\r
-                       return false;\r
+               try {\r
+                       String text = (String)settings.value("standardPalette", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("standardPalette", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
     }\r
     public static void setStandardPalette(boolean val) {\r
                settings.beginGroup("General");\r
@@ -921,91 +1066,63 @@ public class Global {
                settings.endGroup();\r
     }\r
     \r
-    public static void dbWait() {\r
- //    Global.dbThreadWait.wait(Global.dbThreadWaitMutex);\r
-    }\r
-    public static void dbContinue() {\r
-//     Global.dbThreadWait.wakeAll();\r
-    }\r
-    public static synchronized void dbClientWait(int id) {\r
-       if (id == mainThreadId) {\r
-                       try {mainThreadWaiter.take(); } catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == syncThreadId) {\r
-                       try {syncThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == tagCounterThreadId) {\r
-               try {tagCounterThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == trashCounterThreadId) {\r
-               try {trashCounterThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == indexThreadId) {\r
-               try {indexThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == saveThreadId) {\r
-               try {saveThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == notebookCounterThreadId) {\r
-               try {notebookCounterThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == indexThread03Id) {\r
-               try {indexThread03ThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
-       if (id == indexThread04Id) {\r
-               try {indexThread04ThreadWaiter.take();} catch (InterruptedException e) {e.printStackTrace();}\r
-       }\r
+    // Get/Set interval when the index thread wakes up.\r
+    public static void setIndexThreadSleepInterval(int sleep) {\r
+               settings.beginGroup("General");\r
+               settings.setValue("IndexThreadSleepInterval", sleep);\r
+               settings.endGroup();\r
     }\r
-    public static void dbClientContinue(int id) {\r
-       if (id == mainThreadId) {\r
-                       try { mainThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-       }\r
-       if (id == syncThreadId) {\r
-                       try { syncThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-       }\r
-               if (id == tagCounterThreadId) { \r
-                       try { tagCounterThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == trashCounterThreadId) { \r
-                       try { trashCounterThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == indexThreadId) { \r
-                       try { indexThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == saveThreadId) { \r
-                       try { saveThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == notebookCounterThreadId) { \r
-                       try { notebookCounterThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == indexThread03Id) { \r
-                       try { indexThread03ThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
-               }\r
-               if (id == indexThread04Id) { \r
-                       try { indexThread04ThreadWaiter.put(true); } catch (InterruptedException e) { e.printStackTrace();}\r
+    public static int getIndexThreadSleepInterval() {\r
+               settings.beginGroup("General");\r
+               Integer sleep;\r
+               try {\r
+                       String val  = (String)settings.value("IndexThreadSleepInterval", "300");\r
+                       sleep = new Integer(val.trim());\r
+               } catch (Exception e) {\r
+                       try {\r
+                               sleep = (Integer)settings.value("IndexThreadSleepInterval", 0);\r
+                       } catch (Exception e1) {\r
+                               sleep = 300;\r
+                       }\r
                }\r
+               settings.endGroup();\r
+               return sleep;\r
     }\r
     \r
     public static void saveState(String name, QByteArray state) {\r
+       int view = Global.getListView();\r
+       if (view == Global.View_List_Narrow)\r
+               name = name +"Narrow";\r
                settings.beginGroup("SaveState");\r
                settings.setValue(name, state);\r
                settings.endGroup();\r
     }\r
     \r
     public static QByteArray restoreState(String name) {\r
+       int view = Global.getListView();\r
+       if (view == Global.View_List_Narrow)\r
+               name = name +"Narrow";\r
                settings.beginGroup("SaveState");\r
                QByteArray state = (QByteArray)settings.value(name);\r
                settings.endGroup();\r
                return state;\r
     }\r
     public static void saveGeometry(String name, QByteArray state) {\r
-               settings.beginGroup("SaveGeometry");\r
+       int view = Global.getListView();\r
+       if (view == Global.View_List_Narrow)\r
+               settings.beginGroup("SaveGeometryNarrow");\r
+       else\r
+               settings.beginGroup("SaveGeometry");\r
                settings.setValue(name, state);\r
                settings.endGroup();\r
     }\r
     \r
     public static QByteArray restoreGeometry(String name) {\r
-               settings.beginGroup("SaveGeometry");\r
+       int view = Global.getListView();\r
+       if (view == Global.View_List_Narrow)\r
+               settings.beginGroup("SaveGeometryNarrow");\r
+       else\r
+               settings.beginGroup("SaveGeometry");\r
                QByteArray state = (QByteArray)settings.value(name);\r
                settings.endGroup();\r
                return state;\r
@@ -1026,7 +1143,7 @@ public class Global {
                        try {\r
                                value = (Integer)settings.value("autoSaveInterval", 5);\r
                        } catch (Exception e1) {\r
-                               value = 0;\r
+                               value = 5;\r
                        }\r
                }\r
                settings.endGroup();\r
@@ -1067,6 +1184,20 @@ public class Global {
        invalidElements.add(element);\r
     }\r
     \r
+    // Proxy settings\r
+    public static String getProxyValue(String key) {\r
+               settings.beginGroup("Proxy");\r
+               String val  = (String)settings.value(key, "");\r
+               settings.endGroup();\r
+               return val;\r
+    }\r
+    public static void setProxyValue(String key, String value) {\r
+               settings.beginGroup("Proxy");\r
+               settings.setValue(key, value);\r
+               settings.endGroup();\r
+    }\r
+    \r
+    \r
     // Convert a byte array to a hex string\r
        public static String byteArrayToHexString(byte data[]) {\r
                StringBuffer buf = new StringBuffer();\r
@@ -1084,6 +1215,33 @@ public class Global {
            return buf.toString();              \r
        }\r
 \r
+    public static boolean getSpellSetting(String value) {\r
+               settings.beginGroup("Spell");\r
+               String text = (String)settings.value(value, "");\r
+               settings.endGroup();\r
+               if (text.equalsIgnoreCase("true"))\r
+                       return true;\r
+               if (text.equalsIgnoreCase("false"))\r
+                       return false;\r
+               if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREDIGITWORDS))\r
+                       return true;\r
+               if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREINTERNETADDRESSES))\r
+                       return true;\r
+               if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREUPPERCASE))\r
+                       return true;\r
+               if (value.equalsIgnoreCase(Configuration.SPELL_IGNORESENTENCECAPITALIZATION))\r
+                       return true;\r
+               return false;\r
+    }\r
+    public static void setSpellSetting(String setting, boolean val) {\r
+               settings.beginGroup("Spell");\r
+               if (val)\r
+                       settings.setValue(setting, "true");\r
+               else\r
+                       settings.setValue(setting, "false");\r
+               settings.endGroup();\r
+    }\r
+       \r
        \r
        // What to do with inactive tags?\r
        public static String tagBehavior() {\r
@@ -1099,6 +1257,54 @@ public class Global {
                settings.endGroup();\r
        }\r
 \r
+    public static boolean isToolbarButtonVisible(String window) {\r
+               settings.beginGroup("ToolbarButtonsVisible");\r
+               try {\r
+                       String text = (String)settings.value(window, "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;   \r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value(window, true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void saveToolbarButtonsVisible(String column, boolean val) {\r
+               settings.beginGroup("ToolbarButtonsVisible");\r
+               if (val)\r
+                       settings.setValue(column, "true");\r
+               else\r
+                       settings.setValue(column, "false");\r
+               settings.endGroup();\r
+    }\r
+       \r
+    \r
+    public static boolean enableThumbnails() {\r
+               settings.beginGroup("Debug");\r
+               try {\r
+                       String text = (String)settings.value("thumbnails", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("thumbnails", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void setEnableThumbnails(boolean val) {\r
+               settings.beginGroup("Debug");\r
+               if (val)\r
+                       settings.setValue("thumbnails", "true");\r
+               else\r
+                       settings.setValue("thumbnails", "false");\r
+               settings.endGroup();\r
+    }\r
        \r
        // Print date/time.  Used mainly for performance tracing\r
        public static void trace(boolean resetInterval) {\r
@@ -1133,5 +1339,196 @@ public class Global {
                startTraceTime = null;\r
        }\r
 \r
+    public static FileManager getFileManager() {\r
+        return fileManager;\r
+    }\r
+    public static boolean getDisableViewing() {\r
+        return disableViewing;\r
+    }\r
+\r
+    //**********************\r
+    //* Thumbnail zoom level\r
+    //**********************\r
+    public static int calculateThumbnailZoom(String content) {\r
+       int zoom = 1;\r
+               if (content.indexOf("application/pdf") == -1) {\r
+                       if (content.indexOf("image/") == -1) {\r
+                               String text =  StringEscapeUtils.unescapeHtml(content.replaceAll("\\<.*?\\>", ""));\r
+                               zoom = 2;\r
+                               if (text.length() < 500) \r
+                                       zoom = 2;\r
+                               if (text.length() < 250)\r
+                                       zoom = 3;\r
+                               if (text.length() < 100)\r
+                                       zoom = 4;\r
+                               if (text.length() < 50)\r
+                                       zoom = 5;\r
+                               if (text.length() < 10)\r
+                                       zoom = 6;\r
+                       }\r
+               }\r
+               return zoom;\r
+    }\r
+    \r
+    //**********************\r
+    //* List View settings \r
+    //**********************\r
+    public static void setListView(int view) {\r
+               settings.beginGroup("General");\r
+               settings.setValue("listView", view);\r
+               settings.endGroup();\r
+    }\r
+    public static int getListView() {\r
+               settings.beginGroup("General");\r
+               Integer value;\r
+               try {\r
+                       String val  = (String)settings.value("listView", View_List_Wide);\r
+                       value = new Integer(val.trim());\r
+               } catch (Exception e) {\r
+                       try {\r
+                               value = (Integer)settings.value("listView", View_List_Wide);\r
+                       } catch (Exception e1) {\r
+                               value = View_List_Wide;\r
+                       }\r
+               }\r
+               settings.endGroup();\r
+               return value;\r
+    }\r
+\r
+    \r
+    \r
+    //*******************\r
+    // Font Settings\r
+    //*******************\r
+    public static boolean overrideDefaultFont() {\r
+               settings.beginGroup("Font");\r
+               try {\r
+                       String text = (String)settings.value("overrideFont", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;   \r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("overrideFont", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+\r
+    }\r
+    public static void setOverrideDefaultFont(boolean value) {\r
+               settings.beginGroup("Font");\r
+               settings.setValue("overrideFont", value);\r
+               settings.endGroup();    \r
+    }\r
+    public static String getDefaultFont() {\r
+               settings.beginGroup("Font");\r
+               String val  = (String)settings.value("font", "");\r
+               settings.endGroup();\r
+               return val;\r
+    }\r
+    public static void setDefaultFont(String value) {\r
+               settings.beginGroup("Font");\r
+               settings.setValue("font", value);\r
+               settings.endGroup();\r
+    }\r
+    public static String getDefaultFontSize() {\r
+               settings.beginGroup("Font");\r
+               String val  = (String)settings.value("fontSize", "");\r
+               settings.endGroup();\r
+               return val;\r
+    }\r
+    public static void setDefaultFontSize(String value) {\r
+               settings.beginGroup("Font");\r
+               settings.setValue("fontSize", value);\r
+               settings.endGroup();\r
+    }\r
+    \r
+    \r
+    //*******************\r
+    // Close/Minimize\r
+    //*******************\r
+    public static boolean minimizeOnClose() {\r
+               settings.beginGroup("General");\r
+               try {\r
+                       String text = (String)settings.value("minimizeOnClose", "false");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("minimizeOnClose", false);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void setMinimizeOnClose(boolean value) {\r
+               settings.beginGroup("General");\r
+               settings.setValue("minimizeOnClose", value);\r
+               settings.endGroup();    \r
+    }\r
+\r
+    //*******************\r
+    // Check version information\r
+    //*******************\r
+    public static boolean checkVersionUpgrade() {\r
+               settings.beginGroup("Upgrade");\r
+               try {\r
+                       String text = (String)settings.value("checkForUpdates", "true");\r
+                       settings.endGroup();\r
+                       if (text.equalsIgnoreCase("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("checkForUpdates", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void setCheckVersionUpgrade(boolean value) {\r
+               settings.beginGroup("Upgrade");\r
+               settings.setValue("checkForUpdates", value);\r
+               settings.endGroup();    \r
+    }\r
+    public static String getUpdatesAvailableUrl() {\r
+               settings.beginGroup("Upgrade");\r
+               String text = (String)settings.value("avialableUrl", "http://nevernote.sourceforge.net/versions.txt");\r
+               settings.endGroup();    \r
+               return text;\r
+    }\r
+    public static String getUpdateAnnounceUrl() {\r
+               settings.beginGroup("Upgrade");\r
+               String text = (String)settings.value("announceUrl", "http://nevernote.sourceforge.net/upgrade.html");\r
+               settings.endGroup();    \r
+               return text;\r
+    }\r
+    \r
+    //*******************\r
+    // Index attachments\r
+    //*******************\r
+    public static boolean indexAttachmentsLocally() {\r
+               settings.beginGroup("Debug");\r
+               try {\r
+                       String value = (String)settings.value("indexAttachmentsLocally", "true");\r
+                       settings.endGroup();\r
+                       if (value.equals("true"))\r
+                               return true;\r
+                       else\r
+                               return false;\r
+               } catch (java.lang.ClassCastException e) {\r
+                       Boolean value = (Boolean) settings.value("indexAttachmentsLocally", true);\r
+                       settings.endGroup();\r
+                       return value;\r
+               }\r
+    }\r
+    public static void setIndexAttachmentsLocally(boolean value) {\r
+               settings.beginGroup("Debug");\r
+               settings.setValue("indexAttachmentsLocally", value);\r
+               settings.endGroup();    \r
+    }\r
+\r
+\r
 }\r
 \r