OSDN Git Service

Initial contents of nt2chview
[nt2chview/stable.git] / NT2chView45 / NTUserPreference.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using NT2chView.NtFile;\r
5 using NT2chCtrl;\r
6 using NT2chView.NtNet;\r
7 using NT2chObject;\r
8 using NT2chView.NtUI;\r
9 \r
10 namespace NT2chView\r
11 {\r
12     static class NTUserPreference\r
13     {\r
14         const string KEY_DEBUG_OPTION = "debug_option";\r
15         const string KEY_P2ID = "p2id";\r
16         const string KEY_P2PASS = "p2pass";\r
17         const string KEY_P2ENABLE = "p2enable";\r
18         const string KEY_MARUID = "maru_id";\r
19         const string KEY_MARUPASS = "maru_pass";\r
20         const string KEY_MARUENABLE = "maru_enable";\r
21         const string KEY_NTCLOUDID = "ntcloud_id";\r
22         const string KEY_NTCLOUDPASS = "ntcloud_pass";\r
23         const string KEY_NTCLOUDENABLE = "ntcloud_enable";\r
24         const string KEY_NTCLOUDURL = "ntcloud_url";\r
25         const string KEY_NTUSERCLOUDENABLE = "nt_usercloud_enable";\r
26         const string KEY_NTUSERCLOUD_SEED = "nt_usercloud_seed";\r
27         const string KEY_NTUSERCLOUDURL = "nt_usercloud_url";\r
28         const string KEY_NTUSERCLOUDSCRIPTURL = "nt_usercloud_script_url";\r
29         const string KEY_NTUSERCLOUDFILEURL = "nt_usercloud_file_url";\r
30         const string KEY_WRITE_SAGE = "sage";\r
31         const string KEY_ZOOM_VALUE = "zoom";\r
32         const string KEY_WINDOW_MAXIMIZED = "window_maximized";\r
33         const string KEY_RESVIEW_TOOLBAR_POSITION = "resview_toolbar_position";\r
34         const string KEY_THREADTITLEVIEW_TOOLBAR_POSITION = "threadtitleview_toolbar_position";\r
35         const string KEY_WINDOW_HEIGHT = "window_height";\r
36         const string KEY_WINDOW_WIDTH = "window_width";\r
37         const string KEY_WINDOW_TOP = "window_top";\r
38         const string KEY_WINDOW_LEFT = "window_left";\r
39         const string KEY_WINDOW_COLUMN1 = "window_column1";\r
40         const string KEY_WINDOW_ROW1 = "window_row1";\r
41         const string KEY_WINDOW_LEFT_PANEL_ROW1 = "window_left_panel_row1";\r
42         const string KEY_NT_SHOW_ONLY_CLOUD_READ_COUNT = "nt_only_cloud_read_count";\r
43         const string KEY_USE_RES_FONT = "use_explicit_res_font";\r
44         const string KEY_RES_FONT_TYPEFACE = "res_font_name";\r
45         const string KEY_USE_AA_FONT = "use_explicit_aa_font";\r
46         const string KEY_AA_FONT_TYPEFACE = "aa_font_name";\r
47         const string KEY_AESPASS = "aes_pass";\r
48         const string KEY_AESENABLE = "aes_enable";\r
49         const string KEY_POPUPENABLE_MOUSEHOVER = "mousehover_enable";\r
50         const string KEY_OPEN_YOUTUBE_ON_APP = "open_youtube_on_app";\r
51         const string KEY_RESVIEW_SHOW_THUMBNAIL = "resview_show_thumbnail";\r
52         const string KEY_RESVIEW_THUMBNAIL_WIDTH = "resview_thumbnail_width";\r
53         const string KEY_RESVIEW_THUMBNAIL_HEIGHT = "resview_thumbnail_height";\r
54         const string KEY_RESVIEW_THUMBNAIL_CONNECTION_COUNT = "resview_thumbnail_connection_count";\r
55         const string KEY_RESVIEW_TEXTSEL_MODE = "resview_textsel_mode";\r
56         const string KEY_THREADTITLE_LISTVIEW_FONTSIZE = "threadtitle_listview_fontsize";\r
57         //const string KEY_IMAGE_VIEW_WIDTH = "imageview_width";\r
58         //const string KEY_IMAGE_VIEW_HEIGHT = "imageview_height";\r
59         const string KEY_FAVORITE_UPDATE_DURATION = "favorite_update_duration";\r
60         public const int DEFAULT_FAVORITE_UPDATE_DURATION = 10;\r
61 \r
62 \r
63         public static bool DebugOption\r
64         {\r
65             get\r
66             {\r
67                 object o;\r
68                 if (mDictExportPreference.TryGetValue(PREF_PARAM.DEGUB_MODE, out o))\r
69                 {\r
70                     bool? b = o as bool?;\r
71                     if (b == null)\r
72                         return false;\r
73                     return (bool)b;\r
74                 }\r
75                 else\r
76                 {\r
77                     return false;\r
78                 }\r
79             }\r
80             set\r
81             {\r
82                 mDictExportPreference.Remove(PREF_PARAM.DEGUB_MODE);\r
83                 mDictExportPreference.Add(\r
84                     PREF_PARAM.DEGUB_MODE, value);\r
85 \r
86             }\r
87         }\r
88 \r
89         public static int FavoriteUpdateDuration\r
90         {\r
91             get;\r
92             set;\r
93         }\r
94 \r
95         static bool mResViewTextSelMode;\r
96         public static bool ResViewTextSelMode {\r
97             get\r
98             {\r
99 #if DOTNET45\r
100                 return mResViewTextSelMode;\r
101 #else\r
102                 return true;\r
103 #endif\r
104             }\r
105             set\r
106             {\r
107                 mResViewTextSelMode = value;\r
108                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_TEXTSEL_MODE);\r
109                 mDictExportPreference.Add(\r
110                     PREF_PARAM.RES_VIEW_TEXTSEL_MODE, mResViewTextSelMode);\r
111 \r
112             }\r
113         }\r
114 \r
115         private static int mResViewThumbnailConnectionCount;\r
116         private static int mResViewThumbnailHeight;\r
117         private static int mResViewThumbnailWidth;\r
118         private static bool mResViewShowThumbnail;\r
119 \r
120         //public static int ImageViewWidth { get; set; }\r
121         //public static int ImageViewHeight { get; set; }\r
122         public static int ResViewThumbnailConnectionCount\r
123         {\r
124             get\r
125             {\r
126                 return mResViewThumbnailConnectionCount;\r
127             }\r
128             set\r
129             {\r
130                 if (value < 1)\r
131                     mResViewThumbnailConnectionCount = 1;\r
132                 else if (value > 20)\r
133                     mResViewThumbnailConnectionCount = 20;\r
134                 else\r
135                     mResViewThumbnailConnectionCount = value;\r
136                 NTExportUtil.Worker.resetConnectionCount(\r
137                     mResViewThumbnailConnectionCount);\r
138             }\r
139         }\r
140         public static int ResViewThumbnailWidth\r
141         {\r
142             get\r
143             {\r
144                 return mResViewThumbnailWidth;\r
145             }\r
146             set\r
147             {\r
148                 mResViewThumbnailWidth = value;\r
149                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_THUMBNAIL_WIDTH);\r
150                 mDictExportPreference.Add(\r
151                     PREF_PARAM.RES_VIEW_THUMBNAIL_WIDTH, ResViewThumbnailWidth);\r
152             }\r
153         }\r
154         public static int ResViewThumbnailHeight\r
155         { \r
156             get\r
157             {\r
158                 return mResViewThumbnailHeight;\r
159             }\r
160             set\r
161             {\r
162                 mResViewThumbnailHeight = value;\r
163                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_THUMBNAIL_HEIGHT);\r
164                 mDictExportPreference.Add(\r
165                     PREF_PARAM.RES_VIEW_THUMBNAIL_HEIGHT, ResViewThumbnailHeight);\r
166             }\r
167         }\r
168         public static bool ResViewShowThumbnail\r
169         {\r
170             get\r
171             {\r
172                 return mResViewShowThumbnail;\r
173             }\r
174             set\r
175             {\r
176                 mResViewShowThumbnail = value;\r
177                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_SHOW_THUMBNAIL);\r
178                 mDictExportPreference.Add(\r
179                     PREF_PARAM.RES_VIEW_SHOW_THUMBNAIL, mResViewShowThumbnail.ToString());\r
180              }\r
181         }\r
182 \r
183 \r
184         static bool mP2Enabled;\r
185         static bool mMaruEnabled;\r
186         static bool mNTCloudEnabled;\r
187         static bool mNTUserCloudEnabled;\r
188         static bool mSage;\r
189         static double mZoom;\r
190         static bool mShowCloudReadCnt;\r
191         static bool mUseExplicitResFont;\r
192         static bool mUseExplicitAAFont;\r
193 \r
194         static bool mAvoidSaveToPreferenceFile = false;\r
195 \r
196         static string[] mAADataText;\r
197 \r
198         static Dictionary<PREF_PARAM, object> mDictExportPreference\r
199             = new Dictionary<PREF_PARAM, object>();\r
200         public static Dictionary<PREF_PARAM, object> getExportPreference()\r
201         {\r
202             return mDictExportPreference;\r
203         }\r
204 \r
205         public static string[] AAData\r
206         {\r
207             get { return mAADataText; }\r
208             set \r
209             { \r
210                 mAADataText = value;\r
211 \r
212                 if (mDictExportPreference.ContainsKey(PREF_PARAM.RES_VIEW_AA_STRING_LIST))\r
213                     mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_AA_STRING_LIST);\r
214                 \r
215                 mDictExportPreference.Add(\r
216                         PREF_PARAM.RES_VIEW_AA_STRING_LIST, mAADataText);\r
217                 \r
218             }\r
219         }\r
220 \r
221 \r
222         const string VALUE_STRING_TRUE = "True";\r
223         const string VALUE_STRING_FALSE = "False";\r
224 \r
225         static string getBoolValueString(bool value)\r
226         {\r
227             if (value)\r
228                 return VALUE_STRING_TRUE;\r
229             else\r
230                 return VALUE_STRING_FALSE;\r
231         }\r
232 \r
233         public static bool EnableTouch { get; set;} \r
234         public static double WindowTop { get; set; }\r
235         public static double WindowLeft { get; set; }\r
236         public static double WindowWidth { get; set; }\r
237         public static double WindowHeight { get; set; }\r
238         public static bool WindowMaximized { get; set; }\r
239         public static int ResViewToolbarPosition { get; set; }\r
240         public static int ThreadTitleViewToolbarPosition { get; set; }\r
241         public static double WindowColumn1 { get; set; }\r
242         public static double WindowRow1 { get; set; }\r
243         public static double WindowLeftPanelRow1 { get; set; }\r
244         public static string P2ID { get; set; }\r
245         public static string P2PSS { get; set; }\r
246         public static bool P2IsEnabled\r
247        {\r
248             get \r
249             {\r
250                 return mP2Enabled; \r
251             }\r
252             set\r
253             {\r
254                 if (mP2Enabled != value)\r
255                 {\r
256                     mP2Enabled = value;\r
257                     savePreferences();\r
258                 }\r
259             }\r
260         }\r
261 \r
262         public static string MaruID { get; set; }\r
263         public static string MaruPSS { get; set; }\r
264         public static bool MaruIsEnabled\r
265         {\r
266             get\r
267             {\r
268                 return mMaruEnabled;\r
269             }\r
270             set\r
271             {\r
272                 if (mMaruEnabled != value)\r
273                 {\r
274                     mMaruEnabled = value;\r
275                     savePreferences();\r
276                 }\r
277             }\r
278         }\r
279 \r
280         static string mAESPass = string.Empty;\r
281         public static string AESPass\r
282         {\r
283             get\r
284             {\r
285                 return mAESPass;\r
286             }\r
287             set\r
288             {\r
289                 mAESPass = value;\r
290                 NTCrypt.setPassword(value);\r
291             }\r
292         }\r
293         static bool mUseAES;\r
294         public static bool AESEnabled\r
295         {\r
296             get\r
297             {\r
298                 return mUseAES && mAESPass != null && mAESPass.Length > 0;\r
299             }\r
300             set\r
301             {\r
302                 mUseAES = value;\r
303             }\r
304         }\r
305 \r
306         public static string ResFontTypeface { get; set; }\r
307         public static bool UseResFontTypeface\r
308         {\r
309             get { return mUseExplicitResFont; }\r
310             set { mUseExplicitResFont = value; }\r
311         }\r
312 \r
313         public static string AAFontTypeface { get; set; }\r
314         public static bool UseAAFontTypeface\r
315         {\r
316             get { return mUseExplicitAAFont; }\r
317             set { mUseExplicitAAFont = value; }\r
318         }\r
319         \r
320         public static string NTCloudID { get; set; }\r
321         public static string NTCloudPSS { get; set; }\r
322         public static string NTCloudUrl { get; set; }\r
323         public static bool NTCloudIsEnabled\r
324         {\r
325             get\r
326             {\r
327                 return mNTCloudEnabled;\r
328             }\r
329             set\r
330             {\r
331                 if (mNTCloudEnabled != value)\r
332                 {\r
333                     mNTCloudEnabled = value;\r
334                     savePreferences();\r
335                 }\r
336             }\r
337         }\r
338 \r
339         public static string NTUserCloudSeed { get; set; }\r
340         public static string NTUserCloudScriptUrl { get; set; }\r
341         public static string NTUserCloudFileUrl { get; set; }\r
342         public static string NTUserCloudUrl { get; set; }\r
343         public static bool NTUserCloudIsEnabled\r
344         {\r
345             get\r
346             {\r
347                 return mNTUserCloudEnabled;\r
348             }\r
349             set\r
350             {\r
351                 if (mNTUserCloudEnabled != value)\r
352                 {\r
353                     mNTUserCloudEnabled = value;\r
354                     savePreferences();\r
355                 }\r
356             }\r
357         }\r
358         private static string mUserCloudHashedPasswd = null;\r
359         public static string NTUserCloudGetHashedPasswd()\r
360         {\r
361             if (null == mUserCloudHashedPasswd)\r
362             {\r
363                 mUserCloudHashedPasswd = NTCrypt.getSHA256Hashed(\r
364                     NTUserPreference.NTCloudPSS + NTUserPreference.NTUserCloudSeed);\r
365             }\r
366             return mUserCloudHashedPasswd;\r
367         }\r
368 \r
369         public static bool NTShowOnlyCloudReadCount\r
370         {\r
371             set\r
372             {\r
373                 mShowCloudReadCnt = value;\r
374             }\r
375 \r
376             get\r
377             {\r
378                 if (NTCloudIsEnabled)\r
379                     return mShowCloudReadCnt;\r
380                 else\r
381                     return false;\r
382             }\r
383         }\r
384 \r
385         public static bool SageIsEnabled\r
386         {\r
387             get \r
388             {\r
389                 return mSage; \r
390             }\r
391             set\r
392             {\r
393                 if (mSage != value)\r
394                 {\r
395                     mSage = value;\r
396                     savePreferences();\r
397                 }\r
398             }\r
399         }\r
400 \r
401         public static bool EnablePopupMouseHover\r
402         {\r
403             set;\r
404             get;\r
405         }\r
406 \r
407         public static bool OpenYoutubeOnApp\r
408         {\r
409             set;\r
410             get;\r
411         }\r
412 \r
413         public static double ThreadtitleListViewFontSize { get; set; }\r
414 \r
415         public static void init()\r
416         {\r
417             mP2Enabled = false;\r
418             mMaruEnabled = false;\r
419             mNTCloudEnabled = false;\r
420             mNTUserCloudEnabled = false;\r
421             mUseExplicitResFont = false;\r
422             mUseExplicitAAFont = false;\r
423 \r
424             mSage = true;\r
425             mZoom = 95;\r
426             WindowTop = 50;\r
427             WindowLeft = 50;\r
428             WindowHeight = 640;\r
429             WindowWidth = 920;\r
430             WindowColumn1 = 310.0;\r
431             WindowRow1 = 310.0;\r
432             WindowLeftPanelRow1 = 250.0;\r
433             WindowMaximized = false;\r
434 \r
435             EnableTouch = false;\r
436 \r
437 #if DOTNET45\r
438             ResViewToolbarPosition = NTDragDrop.TOOLBAR_LOCATION_RIGHT;\r
439             ThreadTitleViewToolbarPosition = NTDragDrop.TOOLBAR_LOCATION_RIGHT;\r
440 #else\r
441             ResViewToolbarPosition = NTDragDrop.TOOLBAR_LOCATION_LEFT;\r
442             ThreadTitleViewToolbarPosition = NTDragDrop.TOOLBAR_LOCATION_LEFT;\r
443 #endif\r
444 \r
445 \r
446             mShowCloudReadCnt = true;\r
447 \r
448             P2ID = string.Empty;\r
449             P2PSS = string.Empty;\r
450             MaruID = string.Empty;\r
451             MaruPSS = string.Empty;\r
452             AESPass = string.Empty;\r
453             NTCloudID = string.Empty;\r
454             NTCloudPSS = string.Empty;\r
455             NTUserCloudUrl = string.Empty;\r
456             NTUserCloudSeed = string.Empty;\r
457             NTUserCloudScriptUrl = string.Empty;\r
458             NTUserCloudFileUrl = string.Empty;\r
459             ResFontTypeface = string.Empty;\r
460             AAFontTypeface = string.Empty;\r
461 \r
462             EnablePopupMouseHover = false;\r
463             OpenYoutubeOnApp = true;\r
464 \r
465             ResViewThumbnailConnectionCount = 5;\r
466             mResViewThumbnailHeight = 80;\r
467             mResViewThumbnailWidth = 80;\r
468             mResViewShowThumbnail = false;\r
469 \r
470             //ImageViewHeight = 300;\r
471             //ImageViewWidth = 300;\r
472 \r
473             ThreadtitleListViewFontSize = 14;\r
474 \r
475             FavoriteUpdateDuration = 10;\r
476 \r
477 #if DOTNET45\r
478             ResViewTextSelMode = false;\r
479 #else\r
480             ResViewTextSelMode = true;\r
481 #endif\r
482 \r
483 \r
484             loadPreferences();\r
485 \r
486 \r
487             if (!NTUserCloudIsEnabled)\r
488             {\r
489                 if (NTCloudID.Length == 0 ||\r
490                 NTCloudPSS.Length == 0 ||\r
491                 NTCloudUrl.Length == 0)\r
492                 {\r
493                     NTCloudIsEnabled = false;\r
494                 }\r
495             }\r
496             else\r
497             {\r
498                 if (NTUserCloudUrl.Length == 0 ||\r
499                 NTUserCloudSeed.Length == 0 ||\r
500                 NTUserCloudScriptUrl.Length == 0 ||\r
501                 NTUserCloudFileUrl.Length == 0)\r
502                 {\r
503                     NTCloudIsEnabled = false;\r
504                 }\r
505             }\r
506         }\r
507 \r
508 \r
509         static void loadPreferences()\r
510         {\r
511             try\r
512             {\r
513                 mAvoidSaveToPreferenceFile = true;\r
514 \r
515                 List<KeyValuePair<string, string>> list\r
516                     = NTPersistentFileAccess.retrieveUserPreferences();\r
517                 foreach (KeyValuePair<string, string> pair in list)\r
518                 {\r
519                     switch (pair.Key)\r
520                     {\r
521                         case KEY_FAVORITE_UPDATE_DURATION:\r
522                             try\r
523                             {\r
524                                int duration = int.Parse(pair.Value);\r
525                                if (duration < 0 || duration > 60)\r
526                                    FavoriteUpdateDuration = \r
527                                        DEFAULT_FAVORITE_UPDATE_DURATION;\r
528                                else\r
529                                    FavoriteUpdateDuration = duration;\r
530                             }\r
531                             catch (Exception e)\r
532                             {\r
533                                 NTDebug.l(e.Message);\r
534                             }\r
535                             break;\r
536                         case KEY_P2ID:\r
537                             P2ID = pair.Value;\r
538                             break;\r
539                         case KEY_P2PASS:\r
540                             P2PSS = pair.Value;\r
541                             break;\r
542                         case KEY_P2ENABLE:\r
543                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
544                                 P2IsEnabled = true;\r
545                             else\r
546                                 P2IsEnabled = false;\r
547                             break;\r
548                         case KEY_MARUID:\r
549                             MaruID = pair.Value;\r
550                             break;\r
551                         case KEY_MARUPASS:\r
552                             MaruPSS = pair.Value;\r
553                             break;\r
554                         case KEY_MARUENABLE:\r
555                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
556                                 MaruIsEnabled = true;\r
557                             else\r
558                                 MaruIsEnabled = false;\r
559                             break;\r
560                         case KEY_AESPASS:\r
561                             AESPass = pair.Value;\r
562                             break;\r
563                         case KEY_AESENABLE:\r
564                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
565                                 AESEnabled = true;\r
566                             else\r
567                                 AESEnabled = false;\r
568                             break;\r
569                         case KEY_NTCLOUDID:\r
570                             NTCloudID = pair.Value;\r
571                             break;\r
572                         case KEY_NTCLOUDPASS:\r
573                             NTCloudPSS = pair.Value;\r
574                             break;\r
575                         case KEY_NTCLOUDURL:\r
576                             NTCloudUrl = pair.Value;\r
577                             break;\r
578                         case KEY_NTUSERCLOUDURL:\r
579                             NTUserCloudUrl = pair.Value;\r
580                             break;\r
581 \r
582                         case KEY_NTUSERCLOUD_SEED:\r
583                             NTUserCloudSeed = pair.Value;\r
584                             break;\r
585                         case KEY_NTUSERCLOUDSCRIPTURL:\r
586                             NTUserCloudScriptUrl = pair.Value;\r
587                             break;\r
588                         case KEY_NTUSERCLOUDFILEURL:\r
589                             NTUserCloudFileUrl = pair.Value;\r
590                             break;\r
591 \r
592                         case KEY_NTCLOUDENABLE:\r
593                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
594                                 NTCloudIsEnabled = true;\r
595                             else\r
596                                 NTCloudIsEnabled = false;\r
597                             break;\r
598                         case KEY_NTUSERCLOUDENABLE:\r
599                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
600                                 NTUserCloudIsEnabled = true;\r
601                             else\r
602                                 NTUserCloudIsEnabled = false;\r
603                             break;\r
604                         case KEY_NT_SHOW_ONLY_CLOUD_READ_COUNT:\r
605                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
606                                 mShowCloudReadCnt = true;\r
607                             else\r
608                                 mShowCloudReadCnt = false;\r
609                             break;\r
610 \r
611                         case KEY_WRITE_SAGE:\r
612                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
613                                 SageIsEnabled = true;\r
614                             else\r
615                                 SageIsEnabled = false;\r
616                             break;\r
617                         case KEY_ZOOM_VALUE:\r
618                             try\r
619                             {\r
620                                 mZoom = double.Parse(pair.Value);\r
621                             }\r
622                             catch (Exception e)\r
623                             {\r
624                                 NTDebug.l(e.Message);\r
625                             }\r
626                             break;\r
627                         case KEY_WINDOW_TOP:\r
628                             try\r
629                             {\r
630                                 WindowTop = double.Parse(pair.Value);\r
631                             }\r
632                             catch (Exception e)\r
633                             {\r
634                                 NTDebug.l(e.Message);\r
635                             }\r
636                             break;\r
637                         case KEY_WINDOW_LEFT:\r
638                             try\r
639                             {\r
640                                 WindowLeft = double.Parse(pair.Value);\r
641                             }\r
642                             catch (Exception e)\r
643                             {\r
644                                 NTDebug.l(e.Message);\r
645                             }\r
646                             break;\r
647                         case KEY_WINDOW_MAXIMIZED:\r
648                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
649                                 WindowMaximized = true;\r
650                             else\r
651                                 WindowMaximized = false;\r
652                             break;\r
653                         case KEY_RESVIEW_TOOLBAR_POSITION:\r
654                             try\r
655                             {\r
656                                 ResViewToolbarPosition = int.Parse(pair.Value);\r
657                             }\r
658                             catch (Exception e)\r
659                             {\r
660                                 NTDebug.l(e.Message);\r
661                             }\r
662                             break;\r
663                         case KEY_THREADTITLEVIEW_TOOLBAR_POSITION:\r
664                             try\r
665                             {\r
666                                 ThreadTitleViewToolbarPosition = int.Parse(pair.Value);\r
667                             }\r
668                             catch (Exception e)\r
669                             {\r
670                                 NTDebug.l(e.Message);\r
671                             }\r
672                             break;\r
673                         case KEY_WINDOW_HEIGHT:\r
674                             try\r
675                             {\r
676                                 WindowHeight = double.Parse(pair.Value);\r
677                             }\r
678                             catch (Exception e)\r
679                             {\r
680                                 NTDebug.l(e.Message);\r
681                             }\r
682                             break;\r
683                         case KEY_WINDOW_WIDTH:\r
684                             try\r
685                             {\r
686                                 WindowWidth = double.Parse(pair.Value);\r
687                             }\r
688                             catch (Exception e)\r
689                             {\r
690                                 NTDebug.l(e.Message);\r
691                             }\r
692                             break;\r
693                         case KEY_WINDOW_COLUMN1:\r
694                             try\r
695                             {\r
696                                 WindowColumn1 = double.Parse(pair.Value);\r
697                             }\r
698                             catch (Exception e)\r
699                             {\r
700                                 NTDebug.l(e.Message);\r
701                             }\r
702                             break;\r
703                         case KEY_WINDOW_ROW1:\r
704                             try\r
705                             {\r
706                                 WindowRow1 = double.Parse(pair.Value);\r
707                             }\r
708                             catch (Exception e)\r
709                             {\r
710                                 NTDebug.l(e.Message);\r
711                             }\r
712                             break;\r
713                         case KEY_WINDOW_LEFT_PANEL_ROW1:\r
714                             try\r
715                             {\r
716                                 WindowLeftPanelRow1 = double.Parse(pair.Value);\r
717                             }\r
718                             catch (Exception e)\r
719                             {\r
720                                 NTDebug.l(e.Message);\r
721                             }\r
722                             break;\r
723                         case KEY_THREADTITLE_LISTVIEW_FONTSIZE:\r
724                             try\r
725                             {\r
726                                 ThreadtitleListViewFontSize = double.Parse(pair.Value);\r
727                             }\r
728                             catch (Exception e)\r
729                             {\r
730                                 NTDebug.l(e.Message);\r
731                             }\r
732                             break;\r
733                         case KEY_USE_RES_FONT:\r
734                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
735                                 mUseExplicitResFont = true;\r
736                             else\r
737                                 mUseExplicitResFont = false;\r
738                             break;\r
739                         case KEY_RES_FONT_TYPEFACE:\r
740                             ResFontTypeface = pair.Value;\r
741                             break;\r
742                         case KEY_USE_AA_FONT:\r
743                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
744                                 mUseExplicitAAFont = true;\r
745                             else\r
746                                 mUseExplicitAAFont = false;\r
747                             break;\r
748                         case KEY_POPUPENABLE_MOUSEHOVER:\r
749                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
750                                 EnablePopupMouseHover = true;\r
751                             else\r
752                                 EnablePopupMouseHover = false;\r
753                             break;\r
754                         case KEY_OPEN_YOUTUBE_ON_APP:\r
755                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
756                                 OpenYoutubeOnApp = true;\r
757                             else\r
758                                 OpenYoutubeOnApp = false;\r
759                             break;\r
760                         case KEY_AA_FONT_TYPEFACE:\r
761                             AAFontTypeface = pair.Value;\r
762                             break;\r
763                         case KEY_RESVIEW_SHOW_THUMBNAIL:\r
764                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
765                                 ResViewShowThumbnail = true;\r
766                             else\r
767                                 ResViewShowThumbnail = false;\r
768                             break;\r
769                         case KEY_RESVIEW_THUMBNAIL_CONNECTION_COUNT:\r
770                             try\r
771                             {\r
772                                 ResViewThumbnailConnectionCount = int.Parse(pair.Value);\r
773                             }\r
774                             catch (Exception e)\r
775                             {\r
776                                 NTDebug.l(e.Message);\r
777                             }\r
778                             break;\r
779                         case KEY_RESVIEW_THUMBNAIL_HEIGHT:\r
780                             try\r
781                             {\r
782                                 ResViewThumbnailHeight = int.Parse(pair.Value);\r
783                             }\r
784                             catch (Exception e)\r
785                             {\r
786                                 NTDebug.l(e.Message);\r
787                             }\r
788                             break;\r
789                         case KEY_RESVIEW_THUMBNAIL_WIDTH:\r
790                             try\r
791                             {\r
792                                 ResViewThumbnailWidth = int.Parse(pair.Value);\r
793                             }\r
794                             catch (Exception e)\r
795                             {\r
796                                 NTDebug.l(e.Message);\r
797                             }\r
798                             break;\r
799                         case KEY_RESVIEW_TEXTSEL_MODE:\r
800                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
801                                 mResViewTextSelMode = true;\r
802                             else\r
803                                 mResViewTextSelMode = false;\r
804                             break;\r
805                         case KEY_DEBUG_OPTION:\r
806                             if (VALUE_STRING_TRUE.Equals(pair.Value))\r
807                                 DebugOption = true;\r
808                             else\r
809                                 DebugOption = false;\r
810                             break;\r
811 \r
812                     }\r
813                 }\r
814 \r
815                 mAADataText = NTPersistentFileAccess.retrieveAAData();\r
816                 if (mAADataText == null)\r
817                 {\r
818                     mAADataText = new string[1];\r
819                     mAADataText[0] = "  ";\r
820                 }\r
821 \r
822                 resetExportPreference();\r
823 \r
824             }\r
825             finally\r
826             {\r
827                 mAvoidSaveToPreferenceFile = false;\r
828             }\r
829 \r
830         }\r
831 \r
832         static void resetExportPreference()\r
833         {\r
834             if (mAADataText != null)\r
835             {\r
836                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_AA_STRING_LIST);\r
837                 mDictExportPreference.Add(\r
838                     PREF_PARAM.RES_VIEW_AA_STRING_LIST, mAADataText);\r
839             }\r
840             if (mUseExplicitAAFont && AAFontTypeface != null)\r
841             {\r
842                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_AA_FONT_TYPEFACE);\r
843                 mDictExportPreference.Add(\r
844                     PREF_PARAM.RES_VIEW_AA_FONT_TYPEFACE, AAFontTypeface);\r
845             }\r
846             if (mUseExplicitResFont && ResFontTypeface != null)\r
847             {\r
848                 mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_FONT_TYPEFACE);\r
849                 mDictExportPreference.Add(\r
850                     PREF_PARAM.RES_VIEW_FONT_TYPEFACE, ResFontTypeface);\r
851             }\r
852             \r
853             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_ZOOM_VALUE);\r
854             mDictExportPreference.Add(\r
855                 PREF_PARAM.RES_VIEW_ZOOM_VALUE, mZoom.ToString());\r
856             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_POPUP_MOUSEHOVER);\r
857             mDictExportPreference.Add(\r
858                 PREF_PARAM.RES_VIEW_POPUP_MOUSEHOVER, EnablePopupMouseHover.ToString());\r
859 \r
860             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_SHOW_THUMBNAIL);\r
861             mDictExportPreference.Add(\r
862                 PREF_PARAM.RES_VIEW_SHOW_THUMBNAIL, ResViewShowThumbnail.ToString());\r
863             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_THUMBNAIL_WIDTH);\r
864             mDictExportPreference.Add(\r
865                 PREF_PARAM.RES_VIEW_THUMBNAIL_WIDTH, ResViewThumbnailWidth);\r
866             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_THUMBNAIL_HEIGHT);\r
867             mDictExportPreference.Add(\r
868                 PREF_PARAM.RES_VIEW_THUMBNAIL_HEIGHT, ResViewThumbnailHeight);\r
869 \r
870             mDictExportPreference.Remove(PREF_PARAM.THREADTITLE_LIST_FONT_SIZE);\r
871             mDictExportPreference.Add(\r
872                 PREF_PARAM.THREADTITLE_LIST_FONT_SIZE, ThreadtitleListViewFontSize);\r
873 \r
874             mDictExportPreference.Remove(PREF_PARAM.RES_VIEW_TEXTSEL_MODE);\r
875             mDictExportPreference.Add(\r
876                 PREF_PARAM.RES_VIEW_TEXTSEL_MODE, mResViewTextSelMode);\r
877 \r
878         }\r
879 \r
880         \r
881 \r
882         public static void savePreferences()\r
883         {\r
884             if (mAvoidSaveToPreferenceFile)\r
885                 return;\r
886 \r
887             List<KeyValuePair<string, string>> list\r
888                 = new List<KeyValuePair<string, string>>();\r
889 \r
890             KeyValuePair<string, string> pair \r
891                 = new KeyValuePair<string, string>(KEY_P2ID, P2ID);\r
892             list.Add(pair);\r
893 \r
894             pair = new KeyValuePair<string, string>(KEY_P2PASS, P2PSS);\r
895             list.Add(pair);\r
896 \r
897             pair = new KeyValuePair<string, string>(KEY_P2ENABLE, getBoolValueString(P2IsEnabled));\r
898             list.Add(pair);\r
899 \r
900             pair = new KeyValuePair<string, string>(KEY_MARUID, MaruID);\r
901             list.Add(pair);\r
902 \r
903             pair = new KeyValuePair<string, string>(KEY_MARUPASS, MaruPSS);\r
904             list.Add(pair);\r
905 \r
906             pair = new KeyValuePair<string, string>(KEY_MARUENABLE, getBoolValueString(MaruIsEnabled));\r
907             list.Add(pair);\r
908 \r
909             pair = new KeyValuePair<string, string>(KEY_AESPASS, AESPass);\r
910             list.Add(pair);\r
911 \r
912             pair = new KeyValuePair<string, string>(KEY_AESENABLE, getBoolValueString(AESEnabled));\r
913             list.Add(pair);\r
914 \r
915 \r
916             pair = new KeyValuePair<string, string>(KEY_WRITE_SAGE, getBoolValueString(SageIsEnabled));\r
917             list.Add(pair);\r
918 \r
919             object o;\r
920             if (mDictExportPreference.TryGetValue(PREF_PARAM.RES_VIEW_ZOOM_VALUE, out o))\r
921             {\r
922                 double zoom;\r
923                 String s = o as String;\r
924                 if (s != null)\r
925                     if(double.TryParse(s, out zoom))\r
926                         mZoom = zoom;\r
927             }\r
928             pair = new KeyValuePair<string, string>(KEY_ZOOM_VALUE, mZoom.ToString());\r
929             list.Add(pair);\r
930 \r
931             pair = new KeyValuePair<string, string>(KEY_THREADTITLEVIEW_TOOLBAR_POSITION, ThreadTitleViewToolbarPosition.ToString());\r
932             list.Add(pair);\r
933             pair = new KeyValuePair<string, string>(KEY_RESVIEW_TOOLBAR_POSITION, ResViewToolbarPosition.ToString());\r
934             list.Add(pair);\r
935 \r
936             pair = new KeyValuePair<string, string>(KEY_WINDOW_MAXIMIZED, getBoolValueString(WindowMaximized));\r
937             list.Add(pair);\r
938             pair = new KeyValuePair<string, string>(KEY_WINDOW_HEIGHT, WindowHeight.ToString());\r
939             list.Add(pair);\r
940             pair = new KeyValuePair<string, string>(KEY_WINDOW_WIDTH, WindowWidth.ToString());\r
941             list.Add(pair);\r
942 \r
943             pair = new KeyValuePair<string, string>(KEY_WINDOW_TOP, WindowTop.ToString());\r
944             list.Add(pair);\r
945             pair = new KeyValuePair<string, string>(KEY_WINDOW_LEFT, WindowLeft.ToString());\r
946             list.Add(pair);\r
947 \r
948             pair = new KeyValuePair<string, string>(KEY_WINDOW_COLUMN1, WindowColumn1.ToString());\r
949             list.Add(pair);\r
950             pair = new KeyValuePair<string, string>(KEY_WINDOW_ROW1, WindowRow1.ToString());\r
951             list.Add(pair);\r
952             pair = new KeyValuePair<string, string>(KEY_WINDOW_LEFT_PANEL_ROW1, WindowLeftPanelRow1.ToString());\r
953             list.Add(pair);\r
954 \r
955             pair = new KeyValuePair<string, string>(KEY_NTCLOUDID, NTCloudID);\r
956             list.Add(pair);\r
957 \r
958             pair = new KeyValuePair<string, string>(KEY_NTCLOUDPASS, NTCloudPSS);\r
959             list.Add(pair);\r
960 \r
961             pair = new KeyValuePair<string, string>(KEY_NTCLOUDURL, NTCloudUrl);\r
962             list.Add(pair);\r
963 \r
964             pair = new KeyValuePair<string, string>(KEY_NTCLOUDENABLE, getBoolValueString(NTCloudIsEnabled));\r
965             list.Add(pair);\r
966 \r
967             pair = new KeyValuePair<string, string>(KEY_NTUSERCLOUDURL, NTUserCloudUrl);\r
968             list.Add(pair);\r
969 \r
970             pair = new KeyValuePair<string, string>(KEY_NTUSERCLOUD_SEED, NTUserCloudSeed);\r
971             list.Add(pair);\r
972             pair = new KeyValuePair<string, string>(KEY_NTUSERCLOUDSCRIPTURL, NTUserCloudScriptUrl);\r
973             list.Add(pair);\r
974             pair = new KeyValuePair<string, string>(KEY_NTUSERCLOUDFILEURL, NTUserCloudFileUrl);\r
975             list.Add(pair);\r
976 \r
977 \r
978             pair = new KeyValuePair<string, string>(KEY_NTUSERCLOUDENABLE, getBoolValueString(NTUserCloudIsEnabled));\r
979             list.Add(pair);\r
980 \r
981             pair = new KeyValuePair<string, string>(KEY_NT_SHOW_ONLY_CLOUD_READ_COUNT, getBoolValueString(mShowCloudReadCnt));\r
982             list.Add(pair);\r
983 \r
984             pair = new KeyValuePair<string, string>(KEY_USE_RES_FONT, getBoolValueString(mUseExplicitResFont));\r
985             list.Add(pair);\r
986 \r
987             pair = new KeyValuePair<string, string>(KEY_RES_FONT_TYPEFACE, ResFontTypeface);\r
988             list.Add(pair);\r
989 \r
990             pair = new KeyValuePair<string, string>(KEY_USE_AA_FONT, getBoolValueString(mUseExplicitAAFont));\r
991             list.Add(pair);\r
992 \r
993             pair = new KeyValuePair<string, string>(KEY_AA_FONT_TYPEFACE, AAFontTypeface);\r
994             list.Add(pair);\r
995 \r
996             pair = new KeyValuePair<string, string>(KEY_POPUPENABLE_MOUSEHOVER, getBoolValueString(EnablePopupMouseHover));\r
997             list.Add(pair);\r
998 \r
999             pair = new KeyValuePair<string, string>(KEY_OPEN_YOUTUBE_ON_APP, getBoolValueString(OpenYoutubeOnApp));\r
1000             list.Add(pair);\r
1001 \r
1002             pair = new KeyValuePair<string, string>(KEY_RESVIEW_SHOW_THUMBNAIL, getBoolValueString(mResViewShowThumbnail));\r
1003             list.Add(pair);\r
1004             pair = new KeyValuePair<string, string>(KEY_RESVIEW_THUMBNAIL_HEIGHT, mResViewThumbnailHeight.ToString());\r
1005             list.Add(pair);\r
1006             pair = new KeyValuePair<string, string>(KEY_RESVIEW_THUMBNAIL_WIDTH, mResViewThumbnailWidth.ToString());\r
1007             list.Add(pair);\r
1008             pair = new KeyValuePair<string, string>(\r
1009                     KEY_RESVIEW_THUMBNAIL_CONNECTION_COUNT, \r
1010                     mResViewThumbnailConnectionCount.ToString());\r
1011             list.Add(pair);\r
1012 \r
1013             pair = new KeyValuePair<string, string>(\r
1014                 KEY_THREADTITLE_LISTVIEW_FONTSIZE, ThreadtitleListViewFontSize.ToString());\r
1015             list.Add(pair);\r
1016 \r
1017             pair = new KeyValuePair<string, string>(\r
1018                  KEY_FAVORITE_UPDATE_DURATION, FavoriteUpdateDuration.ToString());\r
1019             list.Add(pair);\r
1020 \r
1021             pair = new KeyValuePair<string, string>(KEY_RESVIEW_TEXTSEL_MODE, getBoolValueString(ResViewTextSelMode));\r
1022             list.Add(pair);\r
1023 \r
1024             pair = new KeyValuePair<string, string>(KEY_DEBUG_OPTION, getBoolValueString(DebugOption));\r
1025             list.Add(pair);\r
1026 \r
1027             NTPersistentFileAccess.storeUserPreferences(list);\r
1028 \r
1029             NTPersistentFileAccess.storeAAData(mAADataText);\r
1030 \r
1031             resetExportPreference();\r
1032 \r
1033             NTFontUtil.clear();\r
1034 \r
1035             mUserCloudHashedPasswd = null;\r
1036 \r
1037         }\r
1038     }\r
1039 }\r