OSDN Git Service

0791c920a130940bc993ee938195673527220164
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / Global.java
1 /*\r
2  * This file is part of NeverNote \r
3  * Copyright 2009 Randy Baumgarte\r
4  * \r
5  * This file may be licensed under the terms of of the\r
6  * GNU General Public License Version 2 (the ``GPL'').\r
7  *\r
8  * Software distributed under the License is distributed\r
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
10  * express or implied. See the GPL for the specific language\r
11  * governing rights and limitations.\r
12  *\r
13  * You should have received a copy of the GPL along with this\r
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
15  * or write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
17  *\r
18 */\r
19 \r
20 package cx.fbn.nevernote;\r
21 \r
22 \r
23 //import java.io.ByteArrayOutputStream;\r
24 \r
25 import java.io.PrintStream;\r
26 import java.text.SimpleDateFormat;\r
27 import java.util.ArrayList;\r
28 import java.util.Calendar;\r
29 import java.util.HashMap;\r
30 import java.util.List;\r
31 \r
32 import com.evernote.edam.type.Accounting;\r
33 import com.evernote.edam.type.PrivilegeLevel;\r
34 import com.evernote.edam.type.User;\r
35 import com.evernote.edam.type.UserAttributes;\r
36 import com.swabunga.spell.engine.Configuration;\r
37 import com.trolltech.qt.core.QByteArray;\r
38 import com.trolltech.qt.core.QSettings;\r
39 import com.trolltech.qt.core.QSize;\r
40 import com.trolltech.qt.gui.QPalette;\r
41 \r
42 import cx.fbn.nevernote.config.FileManager;\r
43 import cx.fbn.nevernote.config.InitializationException;\r
44 import cx.fbn.nevernote.config.StartupConfig;\r
45 import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;\r
46 import cx.fbn.nevernote.gui.DateAttributeFilterTable;\r
47 import cx.fbn.nevernote.gui.ShortcutKeys;\r
48 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
49 import cx.fbn.nevernote.utilities.Pair;\r
50 \r
51 public class Global {\r
52         public static String version = "0.94";\r
53     public static String username = ""; \r
54     public static String password = "";     \r
55     \r
56 \r
57     public static final int mainThreadId=0;\r
58     public static final int syncThreadId=1;\r
59     public static final int tagCounterThreadId=2;\r
60     public static final int trashCounterThreadId=3;   // This should always be the highest thread ID\r
61     public static final int indexThreadId=4;    // Thread for indexing words\r
62     public static final int saveThreadId=5;     // Thread used for processing data to saving content\r
63     public static final int notebookCounterThreadId=6;   // Notebook Thread\r
64     public static final int indexThread03Id=7;   // unused\r
65     public static final int indexThread04Id=8;   // unused\r
66     public static final int dbThreadId=9;   // This should always be the highest thread ID\r
67     \r
68     \r
69     public static int View_List_Wide = 1;\r
70     public static int View_List_Narrow = 2;\r
71     public static QSize smallThumbnailSize = new QSize(50,50);\r
72     public static QSize largeThumbnailSize = new QSize(160,160);\r
73     public static boolean listView = true;\r
74     \r
75     public static HashMap<String,Pair> passwordSafe = new HashMap<String, Pair>();\r
76     public static List<Pair<String,String>> passwordRemember = new ArrayList<Pair<String,String>>();\r
77     public static String currentNotebookGuid;\r
78     public static User user; \r
79     public static long authTimeRemaining;\r
80     public static long authRefreshTime;\r
81     public static long failedRefreshes = 0;\r
82     public static boolean keepRunning;\r
83     \r
84     public static String userStoreUrl;\r
85     public static String noteStoreUrl;\r
86     public static String noteStoreUrlBase;\r
87     \r
88     public static int noteTableCreationPosition = 0;\r
89     public static int noteTableTitlePosition = 1;\r
90     public static int noteTableTagPosition = 2;\r
91     public static int noteTableNotebookPosition = 3;\r
92     public static int noteTableChangedPosition = 4;\r
93     public static int noteTableGuidPosition = 5;\r
94     public static int noteTableAuthorPosition = 6;\r
95     public static int noteTableSourceUrlPosition = 7;\r
96     public static int noteTableSubjectDatePosition = 8;\r
97     public static int noteTableSynchronizedPosition = 9;\r
98     public static int noteTableThumbnailPosition = 10;\r
99     public static int noteTableColumnCount = 11;\r
100     public static Integer cryptCounter = 0;\r
101     \r
102     public static int minimumWordCount = 2;\r
103     private static String wordRegex;\r
104     public static boolean enableCarriageReturnFix = false;\r
105     \r
106     public static String name = null;\r
107     public static QSettings     settings;\r
108     public static boolean isConnected;\r
109     public static boolean showDeleted = false;\r
110     public static boolean disableUploads = false;\r
111         public static int messageLevel;\r
112         public static String tagDelimeter = ",";\r
113         public static String attachmentNameDelimeter = "------";\r
114         \r
115         public static String    databaseName = new String("NeverNote");\r
116         public static DateAttributeFilterTable createdSinceFilter;\r
117         public static DateAttributeFilterTable createdBeforeFilter;\r
118         public static DateAttributeFilterTable changedSinceFilter;\r
119         public static DateAttributeFilterTable changedBeforeFilter;\r
120         public static ContainsAttributeFilterTable containsFilter;\r
121         public static ApplicationLogger    logger;\r
122         PrintStream stdoutStream;\r
123         public static QPalette                          originalPalette;\r
124         public static ShortcutKeys                      shortcutKeys;\r
125         public static boolean                           disableViewing;\r
126         \r
127         public static List<String>                              invalidElements = new ArrayList<String>();\r
128         public static HashMap<String, ArrayList<String>>        invalidAttributes = new HashMap<String, ArrayList<String>>();\r
129         public static boolean mimicEvernoteInterface;\r
130         public static HashMap<String,String> resourceMap;\r
131         public static String cipherPassword = "";\r
132         \r
133         static Calendar startTraceTime;\r
134         static Calendar intervalTraceTime;\r
135 \r
136         private static FileManager fileManager;\r
137         \r
138     // Do initial setup \r
139     public static void setup(StartupConfig startupConfig) throws InitializationException  {\r
140         settings = new QSettings("fbn.cx", startupConfig.getName());\r
141         disableViewing = startupConfig.getDisableViewing();\r
142 \r
143         fileManager = new FileManager(startupConfig.getHomeDirPath(), startupConfig.getProgramDirPath());\r
144 \r
145 \r
146                         getServer();\r
147                         settings.beginGroup("General");\r
148                         String regex = (String) settings.value("regex", "[,\\s]+");\r
149                         setWordRegex(regex);\r
150                         String wordString = settings.value("minimumWordLength", "4").toString();\r
151                         Integer wordLen = new Integer(wordString);\r
152                         Global.minimumWordCount = wordLen;\r
153                         settings.endGroup();\r
154                         settings.beginGroup("Debug");\r
155                         String msglevel = (String) settings.value("messageLevel", "Low");\r
156                         settings.endGroup();\r
157                         messageLevel = 1;\r
158                         setMessageLevel(msglevel);\r
159                         keepRunning = true;\r
160                         disableUploads = disableUploads();\r
161                         enableCarriageReturnFix = enableCarriageReturnFix();\r
162                         logger = new ApplicationLogger("global.log");\r
163                         shortcutKeys = new ShortcutKeys();\r
164                         mimicEvernoteInterface = getMimicEvernoteInterface();\r
165                         resourceMap = new HashMap<String,String>();\r
166                                 \r
167     }\r
168 \r
169     public static String getWordRegex() {\r
170         return wordRegex;\r
171     }\r
172     public static void setWordRegex(String r) {\r
173         wordRegex = r;\r
174     }\r
175     public static void setMessageLevel(String msglevel) {\r
176         if (msglevel.equalsIgnoreCase("low")) \r
177                         messageLevel = 1;\r
178                 if (msglevel.equalsIgnoreCase("medium")) \r
179                         messageLevel = 2;\r
180                 if (msglevel.equalsIgnoreCase("high")) \r
181                                 messageLevel = 3;\r
182                 if (msglevel.equalsIgnoreCase("extreme")) \r
183                                         messageLevel = 4;\r
184                 settings.beginGroup("Debug");\r
185                 settings.setValue("messageLevel", msglevel);\r
186                 settings.endGroup();            \r
187     }\r
188 \r
189     public static void saveUserInformation(User user) {\r
190         settings.beginGroup("User");\r
191                 settings.setValue("id", user.getId());\r
192                 settings.setValue("username", user.getUsername());\r
193                 settings.setValue("email", user.getEmail());\r
194                 settings.setValue("name", user.getName());\r
195                 settings.setValue("timezone", user.getTimezone());\r
196                 settings.setValue("privilege", user.getPrivilege().getValue());\r
197                 settings.setValue("created", user.getCreated());\r
198                 settings.setValue("updated", user.getUpdated());\r
199                 settings.setValue("deleted", user.getDeleted());\r
200                 settings.endGroup();\r
201                 isPremium();\r
202                 if (user.getAttributes()!=null)\r
203                         saveUserAttributes(user.getAttributes());\r
204                 if (user.getAccounting()!=null)\r
205                         saveUserAccounting(user.getAccounting());\r
206 \r
207     }\r
208     public static void saveUserAttributes(UserAttributes attrib) {\r
209         settings.beginGroup("UserAttributes");\r
210                 settings.setValue("defaultLocationName", attrib.getDefaultLocationName());\r
211                 settings.setValue("defaultLatitude", attrib.getDefaultLocationName());\r
212                 settings.setValue("defaultLongitude", attrib.getDefaultLocationName());\r
213                 settings.setValue("incomingEmailAddress", attrib.getIncomingEmailAddress());\r
214                 settings.endGroup();\r
215     }\r
216     public static UserAttributes getUserAttributes() {\r
217         settings.beginGroup("UserAttributes");\r
218         UserAttributes attrib = new UserAttributes();\r
219                 attrib.setDefaultLocationName((String)settings.value("defaultLocationName",""));\r
220                 attrib.setDefaultLatitudeIsSet(false);\r
221                 attrib.setDefaultLongitudeIsSet(false);\r
222                 attrib.setIncomingEmailAddress((String)settings.value("incomingEmailAddress", ""));\r
223                 settings.endGroup();\r
224                 return attrib;\r
225     }\r
226     public static void saveUserAccounting(Accounting acc) {\r
227         settings.beginGroup("UserAccounting");\r
228                 settings.setValue("uploadLimit", acc.getUploadLimit());\r
229                 settings.setValue("uploadLimitEnd", acc.getUploadLimitEnd());\r
230                 settings.setValue("uploadLimitNextMonth", acc.getUploadLimitNextMonth());\r
231                 settings.setValue("premiumServiceStart", acc.getPremiumServiceStart());\r
232                 settings.setValue("nextPaymentDue", acc.getNextPaymentDue());\r
233                 settings.setValue("uploadAmount", acc.getUpdated());\r
234                 settings.endGroup();\r
235     }\r
236     public static long getUploadLimitEnd() {\r
237         Long limit;\r
238         settings.beginGroup("UserAccounting");\r
239         \r
240         // Upload limit\r
241                 try {\r
242                         String val  = (String)settings.value("uploadLimitEnd", "0");\r
243                         limit = new Long(val.trim());\r
244                 } catch (Exception e) {\r
245                         try {\r
246                                 limit = (Long)settings.value("uploadLimitEnd", 0);\r
247                         } catch (Exception e1) {\r
248                                 limit = new Long(0);\r
249                         }\r
250                 }\r
251         \r
252                 // return value\r
253         settings.endGroup();\r
254         return limit;\r
255     }\r
256     public static void saveUploadAmount(long amount) {\r
257         settings.beginGroup("UserAccounting");\r
258                 settings.setValue("uploadAmount", amount);\r
259                 settings.endGroup();\r
260    }\r
261     public static long getUploadAmount() {\r
262                 long amt=0;\r
263                 settings.beginGroup("UserAccounting");\r
264                 try {\r
265                         String num = (String)settings.value("uploadAmount", "0");\r
266                         amt = new Long(num.trim());\r
267                 } catch (Exception e) {\r
268                         try {\r
269                                 amt = (Integer)settings.value("uploadAmount", 0);\r
270                         } catch (Exception e1) {\r
271                                 amt = 0;\r
272                         }\r
273                 }\r
274                 settings.endGroup();\r
275                 return amt;\r
276     }\r
277     public static void saveEvernoteUpdateCount(long amount) {\r
278         settings.beginGroup("UserAccounting");\r
279                 settings.setValue("updateCount", amount);\r
280                 settings.endGroup();\r
281     }\r
282     public static long getEvernoteUpdateCount() {\r
283                 long amt;\r
284                 settings.beginGroup("UserAccounting");\r
285                 try {\r
286                         String num = (String)settings.value("updateCount", new Long(0).toString());\r
287                         amt = new Long(num.trim());\r
288                 } catch (java.lang.ClassCastException e) {\r
289                         amt = 0;\r
290                 }\r
291                 settings.endGroup();\r
292                 return amt;\r
293     }\r
294     public static boolean isPremium() {\r
295                 int level;\r
296                 settings.beginGroup("User");\r
297                 try {\r
298                         String num = (String)settings.value("privilege", "1");\r
299                         level = new Integer(num.trim());\r
300                 } catch (java.lang.ClassCastException e) {\r
301                         try {\r
302                                 level = (Integer)settings.value("privilege", 1);\r
303                         } catch (Exception e1) {\r
304                                 level = 1;\r
305                         }\r
306                 }\r
307                 settings.endGroup();\r
308                 PrivilegeLevel userLevel = PrivilegeLevel.findByValue(level);\r
309                 if (userLevel == PrivilegeLevel.NORMAL)\r
310                         return false;\r
311                 return true;\r
312                 \r
313    }\r
314     public static long getUploadLimit() {\r
315                 settings.beginGroup("UserAccounting");\r
316                 long limit;\r
317                 try {\r
318                         String num = (String)settings.value("uploadLimit", new Long(0).toString());\r
319                         limit = new Long(num.trim());\r
320                 } catch (java.lang.ClassCastException e) {\r
321                         limit = 0;\r
322                 }\r
323                 settings.endGroup();\r
324                 return limit;\r
325     }\r
326     public static boolean showTrayIcon() {\r
327                 settings.beginGroup("General");\r
328                 String max = (String) settings.value("showTrayIcon", "true");\r
329                 settings.endGroup();\r
330                 if (!max.equalsIgnoreCase("true"))\r
331                         return false;\r
332                 return true;    \r
333     }\r
334     public static void setShowTrayIcon(boolean val) {\r
335                 settings.beginGroup("General");\r
336                 if (val)\r
337                         settings.setValue("showTrayIcon", "true");\r
338                 else\r
339                         settings.setValue("showTrayIcon", "false");\r
340                 settings.endGroup();\r
341     }\r
342     public static boolean wasWindowMaximized() {\r
343                 settings.beginGroup("General");\r
344                 String max = (String) settings.value("isMaximized", "true");\r
345                 settings.endGroup();\r
346                 if (!max.equalsIgnoreCase("true"))\r
347                         return false;\r
348                 return true;    \r
349     }\r
350     public static void saveWindowMaximized(boolean isMax) {\r
351                 settings.beginGroup("General");\r
352                 if (isMax)\r
353                         settings.setValue("isMaximized", "true");\r
354                 else\r
355                         settings.setValue("isMaximized", "false");\r
356                 settings.endGroup();\r
357     }\r
358     public static String getLastViewedNoteGuid() {\r
359                 settings.beginGroup("General");\r
360                 String guid = (String) settings.value("lastViewedNote", "");\r
361                 settings.endGroup();\r
362                 return guid;    \r
363     }\r
364     public static void saveCurrentNoteGuid(String guid) {\r
365                 settings.beginGroup("General");\r
366                 if (guid != null)\r
367                         settings.setValue("lastViewedNote", guid);\r
368                 else\r
369                         settings.setValue("lastViewedNote", "");\r
370                 settings.endGroup();\r
371     }\r
372     public static void setSortColumn(int i) {\r
373                 settings.beginGroup("General");\r
374                 settings.setValue("sortColumn", i);\r
375                 settings.endGroup();\r
376     }\r
377     public static int getSortColumn() {;\r
378         settings.beginGroup("General");\r
379         int order;      \r
380         try {\r
381                 String val  = settings.value("sortColumn", new Integer(0)).toString();\r
382                 order = new Integer(val.trim());\r
383         } catch (Exception e) {\r
384                 try {\r
385                         order = (Integer)settings.value("sortColumn", 0);\r
386                 } catch (Exception e1) {\r
387                     order = 0;\r
388                 }\r
389         }\r
390         \r
391         settings.endGroup();\r
392         return order;\r
393     }\r
394     public static void setSortOrder(int i) {\r
395                 settings.beginGroup("General");\r
396                 settings.setValue("sortOrder", i);\r
397                 settings.endGroup();\r
398     }\r
399     public static int getSortOrder() {\r
400                 settings.beginGroup("General");\r
401                 int order;      \r
402                 try {\r
403                         String val  = settings.value("sortOrder", new Integer(0)).toString();\r
404                         order = new Integer(val.trim());\r
405                 } catch (Exception e) {\r
406                         try {\r
407                                 order = (Integer)settings.value("sortOrder", 0);\r
408                         } catch (Exception e1) {\r
409                             order = 0;\r
410                         }\r
411                 }\r
412                 \r
413                 settings.endGroup();\r
414                 return order;\r
415     }\r
416     public static boolean automaticLogin() {\r
417                 settings.beginGroup("General");\r
418                 String text = (String)settings.value("automaticLogin", "false");\r
419                 settings.endGroup();\r
420                 if (text.equalsIgnoreCase("true"))\r
421                         return true;\r
422                 else\r
423                         return false;           \r
424     }\r
425     public static void setAutomaticLogin(boolean val) {\r
426                 settings.beginGroup("General");\r
427                 if (val)\r
428                         settings.setValue("automaticLogin", "true");\r
429                 else\r
430                         settings.setValue("automaticLogin", "false");\r
431                 settings.endGroup();\r
432     }\r
433     public static boolean rememberPassword() {\r
434                 settings.beginGroup("General");\r
435                 String text = (String)settings.value("rememberPassword", "false");\r
436                 settings.endGroup();\r
437                 if (text.equalsIgnoreCase("true"))\r
438                         return true;\r
439                 else\r
440                         return false;           \r
441     }\r
442     public static void setRememberPassword(boolean val) {\r
443                 settings.beginGroup("General");\r
444                 if (val)\r
445                         settings.setValue("rememberPassword", "true");\r
446                 else\r
447                         settings.setValue("rememberPassword", "false");\r
448                 settings.endGroup();\r
449     }\r
450     public static void setServer(String server) {\r
451                 settings.beginGroup("General");\r
452                 settings.setValue("server", server);\r
453                 settings.endGroup();            \r
454     }\r
455     public static String getServer() {\r
456                 settings.beginGroup("General");\r
457                 String text = (String)settings.value("server", "www.evernote.com");\r
458                 if (text.equals("www.evernote.com")) {\r
459                         userStoreUrl = "https://www.evernote.com/edam/user";\r
460                     noteStoreUrlBase = "www.evernote.com/edam/note/";   \r
461                 } else {\r
462                         userStoreUrl = "https://sandbox.evernote.com/edam/user";\r
463                         noteStoreUrlBase = "sandbox.evernote.com/edam/note/";\r
464                 }\r
465                 settings.endGroup();\r
466                 if (isPremium())\r
467                         noteStoreUrlBase = "https://" + noteStoreUrlBase;\r
468                 else\r
469                         noteStoreUrlBase = "http://" + noteStoreUrlBase;\r
470                 return text;\r
471     }\r
472     public static boolean disableUploads() {\r
473                 settings.beginGroup("General");\r
474                 String text = (String)settings.value("disableUploads", "false");\r
475                 settings.endGroup();\r
476                 if (text.equalsIgnoreCase("true"))\r
477                         return true;\r
478                 else\r
479                         return false;\r
480     }\r
481     public static void setDisableUploads(boolean val) {\r
482                 settings.beginGroup("General");\r
483                 if (val)\r
484                         settings.setValue("disableUploads", "true");\r
485                 else\r
486                         settings.setValue("disableUploads", "false");\r
487                 settings.endGroup();\r
488                 disableUploads = val;\r
489     }\r
490     public static boolean pdfPreview() {\r
491                 settings.beginGroup("General");\r
492                 String text = (String)settings.value("pdfPreview", "true");\r
493                 settings.endGroup();\r
494                 if (text.equalsIgnoreCase("true"))\r
495                         return true;\r
496                 else\r
497                         return false;\r
498     }\r
499     public static void setPdfPreview(boolean val) {\r
500                 settings.beginGroup("General");\r
501                 if (val)\r
502                         settings.setValue("pdfPreview", "true");\r
503                 else\r
504                         settings.setValue("pdfPreview", "false");\r
505                 settings.endGroup();\r
506     }\r
507     public static boolean newNoteWithSelectedTags() {\r
508                 settings.beginGroup("General");\r
509                 String text = (String)settings.value("newNoteWithSelectedTags", "false");\r
510                 settings.endGroup();\r
511                 if (text.equalsIgnoreCase("true"))\r
512                         return true;\r
513                 else\r
514                         return false;\r
515     }\r
516     public static void setNewNoteWithSelectedTags(boolean val) {\r
517                 settings.beginGroup("General");\r
518                 if (val)\r
519                         settings.setValue("newNoteWithSelectedTags", "true");\r
520                 else\r
521                         settings.setValue("newNoteWithSelectedTags", "false");\r
522                 settings.endGroup();\r
523     }\r
524     public static void setMinimumWordLength(int len) {\r
525                 settings.beginGroup("General");\r
526                 settings.setValue("minimumWordLength", len);\r
527                 settings.endGroup();            \r
528     }\r
529     public static int getMinimumWordLength() {\r
530                 settings.beginGroup("General");\r
531                 Integer len = 4;\r
532                 try {\r
533                         String val  = (String)settings.value("minimumWordLength", "4");\r
534                         len = new Integer(val);\r
535                 } catch (Exception e) {\r
536                         try {\r
537                                 len = (Integer)settings.value("minimumWordLength", 4);\r
538                         } catch (Exception e1) {\r
539                                 len = 4;\r
540                         }\r
541                 }\r
542                 settings.endGroup();\r
543                 return len;\r
544                 \r
545     }\r
546     public static void setRecognitionWeight(int len) {\r
547                 settings.beginGroup("General");\r
548                 settings.setValue("recognitionWeight", len);\r
549                 settings.endGroup();            \r
550     }\r
551     public static int getRecognitionWeight() {\r
552                 settings.beginGroup("General");\r
553                 Integer len;\r
554                 try {\r
555                         len = (Integer)settings.value("recognitionWeight", 80);\r
556                 } catch (Exception e) {\r
557                         len = 80;\r
558                 }\r
559                 settings.endGroup();\r
560                 return len;\r
561     }\r
562     public static String getMessageLevel() {\r
563                 settings.beginGroup("Debug");\r
564                 String text = (String)settings.value("messageLevel", "Low");\r
565                 settings.endGroup();\r
566                 return text;\r
567     }\r
568     public static void setDateFormat(String format) {\r
569                 settings.beginGroup("General");\r
570                 settings.setValue("dateFormat", format);\r
571                 settings.endGroup();            \r
572     }\r
573     public static String getDateFormat() {\r
574                 settings.beginGroup("General");\r
575                 String text = (String)settings.value("dateFormat", "MM/dd/yyyy");\r
576                 settings.endGroup();\r
577                 return text;\r
578     }\r
579     public static void setTimeFormat(String format) {\r
580                 settings.beginGroup("General");\r
581                 settings.setValue("timeFormat", format);\r
582                 settings.endGroup();            \r
583     }\r
584     public static String getTimeFormat() {\r
585                 settings.beginGroup("General");\r
586                 String text = (String)settings.value("timeFormat", "HH:mm:ss");\r
587                 settings.endGroup();\r
588                 return text;\r
589     }\r
590     public static String getSyncInterval() {\r
591                 settings.beginGroup("General");\r
592                 String text = (String)settings.value("syncInterval", "15 minutes");\r
593                 settings.endGroup();\r
594                 return text;            \r
595     }\r
596     public static void setSyncInterval(String format) {\r
597                 settings.beginGroup("General");\r
598                 settings.setValue("syncInterval", format);\r
599                 settings.endGroup();            \r
600     }\r
601     public static void setColumnWidth(String col, int width) {\r
602                 settings.beginGroup("ColumnWidths");\r
603                 settings.setValue(col, width);\r
604                 settings.endGroup();\r
605     }\r
606     public static int getColumnWidth(String col) {\r
607                 settings.beginGroup("ColumnWidths");\r
608                 Integer width;\r
609                 try {\r
610                         String val  = (String)settings.value(col, "0");\r
611                         width = new Integer(val.trim());\r
612                 } catch (Exception e) {\r
613                         try {\r
614                                 width = (Integer)settings.value(col, 0);\r
615                         } catch (Exception e1) {\r
616                                 width = 0;\r
617                         }\r
618                 }\r
619                 settings.endGroup();\r
620                 return width;\r
621     }\r
622     public static void setColumnPosition(String col, int width) {\r
623                 settings.beginGroup("ColumnPosition");\r
624                 settings.setValue(col, width);\r
625                 settings.endGroup();\r
626     }\r
627     public static int getColumnPosition(String col) {\r
628                 settings.beginGroup("ColumnPosition");\r
629                 Integer width;\r
630                 try {\r
631                         String val  = (String)settings.value(col, "-1");\r
632                         width = new Integer(val.trim());\r
633                 } catch (Exception e) {\r
634                         try {\r
635                                 width = (Integer)settings.value(col, 0);\r
636                         } catch (Exception e1) {\r
637                                 width = 0;\r
638                         }\r
639                 }\r
640                 settings.endGroup();\r
641                 return width;\r
642     }\r
643     public static boolean verifyDelete() {\r
644                 settings.beginGroup("General");\r
645                 String text = (String)settings.value("verifyDelete", "true");\r
646                 settings.endGroup();\r
647                 if (text.equalsIgnoreCase("true"))\r
648                         return true;\r
649                 else\r
650                         return false;           \r
651     }\r
652     public static void setVerifyDelete(boolean val) {\r
653                 settings.beginGroup("General");\r
654                 if (val)\r
655                         settings.setValue("verifyDelete", "true");\r
656                 else\r
657                         settings.setValue("verifyDelete", "false");\r
658                 settings.endGroup();\r
659     }\r
660     public static boolean startMinimized() {\r
661                 settings.beginGroup("General");\r
662                 String text = (String)settings.value("startMinimized", "false");\r
663                 settings.endGroup();\r
664                 if (text.equalsIgnoreCase("true"))\r
665                         return true;\r
666                 else\r
667                         return false;           \r
668     }\r
669     public static void setStartMinimized(boolean val) {\r
670                 settings.beginGroup("General");\r
671                 if (val)\r
672                         settings.setValue("startMinimized", "true");\r
673                 else\r
674                         settings.setValue("startMinimized", "false");\r
675                 settings.endGroup();\r
676     }\r
677     public static boolean synchronizeDeletedContent() {\r
678                 settings.beginGroup("General");\r
679                 String text = (String)settings.value("syncDeletedContent", "false");\r
680                 settings.endGroup();\r
681                 if (text.equalsIgnoreCase("true"))\r
682                         return true;\r
683                 else\r
684                         return false;           \r
685     }\r
686     public static void setSynchronizeDeletedContent(boolean val) {\r
687                 settings.beginGroup("General");\r
688                 if (val)\r
689                         settings.setValue("syncDeletedContent", "true");\r
690                 else\r
691                         settings.setValue("syncDeletedContent", "false");\r
692                 settings.endGroup();\r
693     }\r
694     public static boolean isWindowVisible(String window) {\r
695                 settings.beginGroup("WindowsVisible");\r
696                 String defaultValue = "true";\r
697                 if (window.equalsIgnoreCase("noteInformation"))\r
698                         defaultValue = "false";\r
699                 String text = (String)settings.value(window, defaultValue);\r
700                 settings.endGroup();\r
701                 if (text.equalsIgnoreCase("true"))\r
702                         return true;\r
703                 else\r
704                         return false;           \r
705     }\r
706     public static void saveWindowVisible(String window, boolean val) {\r
707                 settings.beginGroup("WindowsVisible");\r
708                 if (val)\r
709                         settings.setValue(window, "true");\r
710                 else\r
711                         settings.setValue(window, "false");\r
712                 settings.endGroup();\r
713     }\r
714     public static boolean isColumnVisible(String window) {\r
715         String defaultValue = "true";\r
716                 settings.beginGroup("ColumnsVisible");\r
717                 if (window.equalsIgnoreCase("thumbnail"))\r
718                         defaultValue = "false";\r
719                 if (window.equalsIgnoreCase("Guid"))\r
720                         defaultValue = "false";\r
721                 String text = (String)settings.value(window, defaultValue);\r
722                 settings.endGroup();\r
723                 if (text.equalsIgnoreCase("true"))\r
724                         return true;\r
725                 else\r
726                         return false;   \r
727     }\r
728     public static void saveColumnVisible(String column, boolean val) {\r
729                 settings.beginGroup("ColumnsVisible");\r
730                 if (val)\r
731                         settings.setValue(column, "true");\r
732                 else\r
733                         settings.setValue(column, "false");\r
734                 settings.endGroup();\r
735     }\r
736     public static boolean isEditorButtonVisible(String window) {\r
737                 settings.beginGroup("EditorButtonsVisible");\r
738                 String text = (String)settings.value(window, "true");\r
739                 settings.endGroup();\r
740                 if (text.equalsIgnoreCase("true"))\r
741                         return true;\r
742                 else\r
743                         return false;   \r
744     }\r
745     public static void saveEditorButtonsVisible(String column, boolean val) {\r
746                 settings.beginGroup("EditorButtonsVisible");\r
747                 if (val)\r
748                         settings.setValue(column, "true");\r
749                 else\r
750                         settings.setValue(column, "false");\r
751                 settings.endGroup();\r
752     }\r
753     public static boolean enableCarriageReturnFix() {\r
754                 settings.beginGroup("Debug");\r
755                 String text = (String)settings.value("enableCarriageReturnFix", "false");\r
756                 settings.endGroup();\r
757                 if (text.equalsIgnoreCase("true"))\r
758                         return true;\r
759                 else\r
760                         return false;   \r
761     }\r
762     public static void saveCarriageReturnFix(boolean val) {\r
763                 settings.beginGroup("Debug");\r
764                 if (val)\r
765                         settings.setValue("enableCarriageReturnFix", "true");\r
766                 else\r
767                         settings.setValue("enableCarriageReturnFix", "false");\r
768                 settings.endGroup();\r
769     }\r
770     public static void setIndexThreads(int val) {\r
771                 settings.beginGroup("General");\r
772                 settings.setValue("indexThreads", val);\r
773                 settings.endGroup();\r
774     }\r
775     public static int getIndexThreads() {\r
776                 settings.beginGroup("General");\r
777                 Integer threads;\r
778                 try {\r
779                         String val  = (String)settings.value("indexThreads", "1");\r
780                         threads = new Integer(val.trim());\r
781                 } catch (Exception e) {\r
782                         try {\r
783                                 threads = (Integer)settings.value("indexThreads", 1);\r
784                         } catch (Exception e1) {\r
785                                 threads = 1;\r
786                         }\r
787                 }\r
788                 settings.endGroup();\r
789                 threads = 1;\r
790                 return threads;\r
791     }\r
792     public static void setZoomFactor(double val) {\r
793                 settings.beginGroup("General");\r
794                 settings.setValue("zoomFactor", val);\r
795                 settings.endGroup();\r
796     }\r
797     public static double getZoomFactor() {\r
798                 settings.beginGroup("General");\r
799                 Double threads;\r
800                 try {\r
801                         String val  = (String)settings.value("zoomFactor", "1.0");\r
802                         threads = new Double(val.trim());\r
803                 } catch (Exception e) {\r
804                         try {\r
805                                 threads = (Double)settings.value("zoomFactor", 1.0);\r
806                         } catch (Exception e1) {\r
807                                 threads = new Double(1);\r
808                         }\r
809                 }\r
810                 settings.endGroup();\r
811                 return threads;\r
812     }\r
813     public static void setTextSizeMultiplier(double val) {\r
814                 settings.beginGroup("General");\r
815                 settings.setValue("textMultiplier", val);\r
816                 settings.endGroup();\r
817     }\r
818     public static double getTextSizeMultiplier() {\r
819                 settings.beginGroup("General");\r
820                 Double threads;\r
821                 try {\r
822                         String val  = (String)settings.value("textMultiplier", "1");\r
823                         threads = new Double(val.trim());\r
824                 } catch (Exception e) {\r
825                         try {\r
826                                 threads = (Double)settings.value("textMultiplier", 1);\r
827                         } catch (Exception e1) {\r
828                                 threads = new Double(1);\r
829                         }\r
830                 }\r
831                 settings.endGroup();\r
832                 return threads;\r
833     }\r
834 \r
835     public static boolean getMimicEvernoteInterface() {\r
836                 settings.beginGroup("General");\r
837                 String text = (String)settings.value("mimicEvernoteInterface", "true");\r
838                 settings.endGroup();\r
839                 if (text.equalsIgnoreCase("true"))\r
840                         return true;\r
841                 else\r
842                         return false;\r
843     }\r
844     public static void setMimicEvernoteInterface(boolean value) {\r
845         settings.beginGroup("General");\r
846         if (value)\r
847                 settings.setValue("mimicEvernoteInterface", "true");\r
848         else\r
849                 settings.setValue("mimicEvernoteInterface", "false"); \r
850         settings.endGroup();\r
851     }\r
852     \r
853     public static boolean synchronizeOnClose() {\r
854                 settings.beginGroup("General");\r
855                 String text = (String)settings.value("synchronizeOnClose", "false");\r
856                 settings.endGroup();\r
857                 if (text.equalsIgnoreCase("true"))\r
858                         return true;\r
859                 else\r
860                         return false;\r
861     }\r
862     public static void setSynchronizeOnClose(boolean val) {\r
863                 settings.beginGroup("General");\r
864                 if (val)\r
865                         settings.setValue("synchronizeOnClose", "true");\r
866                 else\r
867                         settings.setValue("synchronizeOnClose", "false");\r
868                 settings.endGroup();\r
869     }\r
870     public static void setDatabaseVersion(String version) {\r
871                 settings.beginGroup("General");\r
872                 settings.setValue("databaseVersion", version);\r
873                 settings.endGroup();\r
874     }\r
875     public static String getDatabaseVersion() {\r
876                 settings.beginGroup("General");\r
877                 String val  = (String)settings.value("databaseVersion", "0.70");\r
878                 settings.endGroup();\r
879                 return val;\r
880     }\r
881     public static String getDatabaseUrl() {\r
882                 settings.beginGroup("General");\r
883                 String val  = (String)settings.value("DatabaseURL", "");\r
884                 settings.endGroup();\r
885                 if (val.equals(""))\r
886                         val = "jdbc:h2:"+Global.getFileManager().getDbDirPath(Global.databaseName);\r
887                 return val;\r
888     }\r
889     public static void setDatabaseUrl(String value) {\r
890                 settings.beginGroup("General");\r
891                 settings.setValue("DatabaseURL", value);\r
892                 settings.endGroup();\r
893     }\r
894     public static String getDatabaseUserid() {\r
895                 settings.beginGroup("General");\r
896                 String val  = (String)settings.value("databaseUserid", "");\r
897                 settings.endGroup();\r
898                 return val;\r
899     }\r
900     public static String getDatabaseUserPassword() {\r
901                 settings.beginGroup("General");\r
902                 String val  = (String)settings.value("databaseUserPassword", "");\r
903                 settings.endGroup();\r
904                 return val;\r
905     }\r
906     public static void setStyle(String style) {\r
907                 settings.beginGroup("General");\r
908                 settings.setValue("style", style);\r
909                 settings.endGroup();\r
910     }\r
911     public static String getStyle() {\r
912                 settings.beginGroup("General");\r
913                 String val  = (String)settings.value("style", "");\r
914                 settings.endGroup();\r
915                 return val;\r
916     }\r
917     public static boolean useStandardPalette() {\r
918                 settings.beginGroup("General");\r
919                 String text = (String)settings.value("standardPalette", "true");\r
920                 settings.endGroup();\r
921                 if (text.equalsIgnoreCase("true"))\r
922                         return true;\r
923                 else\r
924                         return false;\r
925     }\r
926     public static void setStandardPalette(boolean val) {\r
927                 settings.beginGroup("General");\r
928                 if (val)\r
929                         settings.setValue("standardPalette", "true");\r
930                 else\r
931                         settings.setValue("standardPalette", "false");\r
932                 settings.endGroup();\r
933     }\r
934     \r
935     // Get/Set interval when the index thread wakes up.\r
936     public static void setIndexThreadSleepInterval(int sleep) {\r
937                 settings.beginGroup("General");\r
938                 settings.setValue("IndexThreadSleepInterval", sleep);\r
939                 settings.endGroup();\r
940     }\r
941     public static int getIndexThreadSleepInterval() {\r
942                 settings.beginGroup("General");\r
943                 Integer sleep;\r
944                 try {\r
945                         String val  = (String)settings.value("IndexThreadSleepInterval", "300");\r
946                         sleep = new Integer(val.trim());\r
947                 } catch (Exception e) {\r
948                         try {\r
949                                 sleep = (Integer)settings.value("IndexThreadSleepInterval", 0);\r
950                         } catch (Exception e1) {\r
951                                 sleep = 300;\r
952                         }\r
953                 }\r
954                 settings.endGroup();\r
955                 return sleep;\r
956     }\r
957     \r
958     public static void saveState(String name, QByteArray state) {\r
959                 settings.beginGroup("SaveState");\r
960                 settings.setValue(name, state);\r
961                 settings.endGroup();\r
962     }\r
963     \r
964     public static QByteArray restoreState(String name) {\r
965                 settings.beginGroup("SaveState");\r
966                 QByteArray state = (QByteArray)settings.value(name);\r
967                 settings.endGroup();\r
968                 return state;\r
969     }\r
970     public static void saveGeometry(String name, QByteArray state) {\r
971                 settings.beginGroup("SaveGeometry");\r
972                 settings.setValue(name, state);\r
973                 settings.endGroup();\r
974     }\r
975     \r
976     public static QByteArray restoreGeometry(String name) {\r
977                 settings.beginGroup("SaveGeometry");\r
978                 QByteArray state = (QByteArray)settings.value(name);\r
979                 settings.endGroup();\r
980                 return state;\r
981     }\r
982     \r
983     public static void setAutoSaveInterval(int interval) {\r
984                 settings.beginGroup("General");\r
985                 settings.setValue("autoSaveInterval", interval);\r
986                 settings.endGroup();\r
987     }\r
988     public static int getAutoSaveInterval() {\r
989                 settings.beginGroup("General");\r
990                 Integer value;\r
991                 try {\r
992                         String val  = (String)settings.value("autoSaveInterval", "5");\r
993                         value = new Integer(val.trim());\r
994                 } catch (Exception e) {\r
995                         try {\r
996                                 value = (Integer)settings.value("autoSaveInterval", 5);\r
997                         } catch (Exception e1) {\r
998                                 value = 5;\r
999                         }\r
1000                 }\r
1001                 settings.endGroup();\r
1002                 return value;\r
1003     }\r
1004      \r
1005     // Add invalid attributes\r
1006     public static void addInvalidAttribute(String element, String attribute) {\r
1007         \r
1008                 List<String> attributes = invalidAttributes.get(element);\r
1009                 if (attributes != null) {\r
1010                         for (int i=0; i<attributes.size(); i++)\r
1011                                 if (attribute.equalsIgnoreCase(attributes.get(i))) {\r
1012                                         return;\r
1013                         }\r
1014         }\r
1015         \r
1016         ArrayList<String> attributeList;\r
1017         if (!invalidAttributes.containsKey(element)) {\r
1018                 attributeList = new ArrayList<String>();\r
1019                 attributeList.add(attribute);\r
1020                 invalidAttributes.put(element, attributeList);\r
1021         }\r
1022         else {\r
1023                 attributeList = invalidAttributes.get(element);\r
1024                 attributeList.add(attribute);\r
1025                 invalidAttributes.put(element,attributeList);\r
1026         }\r
1027     }\r
1028 \r
1029     \r
1030     // Add invalid attributes\r
1031     public static void addInvalidElement(String element) {\r
1032                 for (int i=0; i<invalidElements.size(); i++) {\r
1033                         if (element.equalsIgnoreCase(invalidElements.get(i)))\r
1034                                 return;\r
1035                 }\r
1036         invalidElements.add(element);\r
1037     }\r
1038     \r
1039     // Proxy settings\r
1040     public static String getProxyValue(String key) {\r
1041                 settings.beginGroup("Proxy");\r
1042                 String val  = (String)settings.value(key, "");\r
1043                 settings.endGroup();\r
1044                 return val;\r
1045     }\r
1046     public static void setProxyValue(String key, String value) {\r
1047                 settings.beginGroup("Proxy");\r
1048                 settings.setValue(key, value);\r
1049                 settings.endGroup();\r
1050     }\r
1051     \r
1052     \r
1053     // Convert a byte array to a hex string\r
1054         public static String byteArrayToHexString(byte data[]) {\r
1055                 StringBuffer buf = new StringBuffer();\r
1056             for (byte element : data) {\r
1057                 int halfbyte = (element >>> 4) & 0x0F;\r
1058                 int two_halfs = 0;\r
1059                 do {\r
1060                         if ((0 <= halfbyte) && (halfbyte <= 9))\r
1061                                buf.append((char) ('0' + halfbyte));\r
1062                            else\r
1063                                 buf.append((char) ('a' + (halfbyte - 10)));\r
1064                         halfbyte = element & 0x0F;\r
1065                 } while(two_halfs++ < 1);\r
1066             }\r
1067             return buf.toString();              \r
1068         }\r
1069 \r
1070     public static boolean getSpellSetting(String value) {\r
1071                 settings.beginGroup("Spell");\r
1072                 String text = (String)settings.value(value, "");\r
1073                 settings.endGroup();\r
1074                 if (text.equalsIgnoreCase("true"))\r
1075                         return true;\r
1076                 if (text.equalsIgnoreCase("false"))\r
1077                         return false;\r
1078                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREDIGITWORDS))\r
1079                         return true;\r
1080                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREINTERNETADDRESSES))\r
1081                         return true;\r
1082                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREUPPERCASE))\r
1083                         return true;\r
1084                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNORESENTENCECAPITALIZATION))\r
1085                         return true;\r
1086                 return false;\r
1087     }\r
1088     public static void setSpellSetting(String setting, boolean val) {\r
1089                 settings.beginGroup("Spell");\r
1090                 if (val)\r
1091                         settings.setValue(setting, "true");\r
1092                 else\r
1093                         settings.setValue(setting, "false");\r
1094                 settings.endGroup();\r
1095     }\r
1096         \r
1097         \r
1098         // What to do with inactive tags?\r
1099         public static String tagBehavior() {\r
1100                 settings.beginGroup("General");\r
1101                 String text = (String)settings.value("tagBehavior", "DoNothing");\r
1102                 settings.endGroup();\r
1103                 return text;\r
1104         }\r
1105         // What to do with inactive tags?\r
1106         public static void setTagBehavior(String value) {\r
1107                 settings.beginGroup("General");\r
1108                 settings.setValue("tagBehavior", value);\r
1109                 settings.endGroup();\r
1110         }\r
1111 \r
1112     public static boolean isToolbarButtonVisible(String window) {\r
1113                 settings.beginGroup("ToolbarButtonsVisible");\r
1114                 String text = (String)settings.value(window, "true");\r
1115                 settings.endGroup();\r
1116                 if (text.equalsIgnoreCase("true"))\r
1117                         return true;\r
1118                 else\r
1119                         return false;   \r
1120     }\r
1121     public static void saveToolbarButtonsVisible(String column, boolean val) {\r
1122                 settings.beginGroup("ToolbarButtonsVisible");\r
1123                 if (val)\r
1124                         settings.setValue(column, "true");\r
1125                 else\r
1126                         settings.setValue(column, "false");\r
1127                 settings.endGroup();\r
1128     }\r
1129         \r
1130         \r
1131         // Print date/time.  Used mainly for performance tracing\r
1132         public static void trace(boolean resetInterval) {\r
1133                 String fmt = "MM/dd/yy HH:mm:ss.SSSSSS";\r
1134                 String dateTimeFormat = new String(fmt);\r
1135                 SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
1136                 Calendar cal = Calendar.getInstance();\r
1137                 if (intervalTraceTime == null) \r
1138                         intervalTraceTime = Calendar.getInstance();\r
1139                 if (startTraceTime == null)\r
1140                         startTraceTime = Calendar.getInstance();\r
1141                 \r
1142                 float interval = (cal.getTimeInMillis() - intervalTraceTime.getTimeInMillis());\r
1143                 float total = (cal.getTimeInMillis() - startTraceTime.getTimeInMillis());\r
1144                 \r
1145 //              if (interval > 00.0) {\r
1146                         StackTraceElement[] exceptions = Thread.currentThread().getStackTrace();\r
1147                         System.out.println("------------------------------------------");\r
1148 \r
1149                         System.out.println("Date/Time " +simple.format(cal.getTime()));\r
1150                         System.out.format("Interval Time: %-10.6f%n", interval);\r
1151                         System.out.format("Total Time: %-10.6f%n", total);\r
1152                         for (int i=2; i<5 && i<exceptions.length; i++) {\r
1153                                 System.out.println(exceptions[i]);\r
1154                         }\r
1155 //              }\r
1156                 if (resetInterval)\r
1157                         intervalTraceTime = cal;\r
1158         }\r
1159         public static void traceReset() {\r
1160                 intervalTraceTime = null;\r
1161                 startTraceTime = null;\r
1162         }\r
1163 \r
1164     public static FileManager getFileManager() {\r
1165         return fileManager;\r
1166     }\r
1167     public static boolean getDisableViewing() {\r
1168         return disableViewing;\r
1169     }\r
1170 \r
1171     \r
1172     //**********************\r
1173     //* List View settings \r
1174     //**********************\r
1175     public static void setListView(int view) {\r
1176                 settings.beginGroup("General");\r
1177                 settings.setValue("listView", view);\r
1178                 settings.endGroup();\r
1179     }\r
1180     public static int getListView() {\r
1181                 settings.beginGroup("General");\r
1182                 Integer value;\r
1183                 try {\r
1184                         String val  = (String)settings.value("listView", View_List_Wide);\r
1185                         value = new Integer(val.trim());\r
1186                 } catch (Exception e) {\r
1187                         try {\r
1188                                 value = (Integer)settings.value("listView", View_List_Wide);\r
1189                         } catch (Exception e1) {\r
1190                                 value = View_List_Wide;\r
1191                         }\r
1192                 }\r
1193                 settings.endGroup();\r
1194                 return value;\r
1195     }\r
1196 \r
1197     \r
1198     \r
1199     //*******************\r
1200     // Font Settings\r
1201     //*******************\r
1202     public static boolean overrideDefaultFont() {\r
1203                 settings.beginGroup("Font");\r
1204                 String text = (String)settings.value("overrideFont", "false");\r
1205                 settings.endGroup();\r
1206                 if (text.equalsIgnoreCase("true"))\r
1207                         return true;\r
1208                 else\r
1209                         return false;   \r
1210     }\r
1211     public static void setOverrideDefaultFont(boolean value) {\r
1212                 settings.beginGroup("Font");\r
1213                 settings.setValue("overrideFont", value);\r
1214                 settings.endGroup();    \r
1215     }\r
1216     public static String getDefaultFont() {\r
1217                 settings.beginGroup("Font");\r
1218                 String val  = (String)settings.value("font", "");\r
1219                 settings.endGroup();\r
1220                 return val;\r
1221     }\r
1222     public static void setDefaultFont(String value) {\r
1223                 settings.beginGroup("Font");\r
1224                 settings.setValue("font", value);\r
1225                 settings.endGroup();\r
1226     }\r
1227     public static String getDefaultFontSize() {\r
1228                 settings.beginGroup("Font");\r
1229                 String val  = (String)settings.value("fontSize", "");\r
1230                 settings.endGroup();\r
1231                 return val;\r
1232     }\r
1233     public static void setDefaultFontSize(String value) {\r
1234                 settings.beginGroup("Font");\r
1235                 settings.setValue("fontSize", value);\r
1236                 settings.endGroup();\r
1237     }\r
1238     \r
1239 \r
1240 }\r
1241 \r