OSDN Git Service

Initial contents of nt2chview
[nt2chview/stable.git] / NT2chView45 / NTHistory.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Collections.ObjectModel;\r
4 using System.Text;\r
5 \r
6 namespace NT2chView\r
7 {\r
8     public class NTHistory\r
9     {\r
10         NTBoard.DelegateMsgOnNotifyBoardUpdate mOnNotifyBoardUpdate;\r
11 \r
12         private static string mStrState = string.Empty;\r
13         public static string getLastState()\r
14         {\r
15             return mStrState;\r
16         }\r
17         public NTHistory()\r
18         {\r
19             mOnNotifyBoardUpdate \r
20                 = new NTBoard.DelegateMsgOnNotifyBoardUpdate(OnNotifyBoardUpdate);\r
21         }\r
22 \r
23         private ObservableCollection<NTHistoryThread> mThreadList = new ObservableCollection<NTHistoryThread>();\r
24         public ObservableCollection<NTHistoryThread> getThreadList()\r
25         {\r
26             return mThreadList;\r
27         }\r
28 \r
29         public void onDetach()\r
30         {\r
31             Dictionary<string, NTBoard> boardDic = new Dictionary<string,NTBoard>();\r
32             foreach (NTHistoryThread ht in mThreadList)\r
33             {\r
34                 if(boardDic.ContainsKey(ht.BoardName))\r
35                     continue;\r
36                 NTBoard board = NTDataRoot.getBoardByName(ht.BoardName);\r
37                 if (board == null)\r
38                     continue;\r
39                 boardDic.Add(ht.BoardName, board);\r
40             }\r
41             foreach (NTBoard board in boardDic.Values)\r
42             {\r
43                 if(mOnNotifyBoardUpdate != null)\r
44                     board.OnNotifyBoardUpdate -= mOnNotifyBoardUpdate;\r
45             }\r
46 \r
47             mThreadList.Clear();\r
48         }\r
49 \r
50         void OnNotifyBoardUpdate(NTBoard board)\r
51         {\r
52             if (mThreadList == null)\r
53                 return;\r
54 \r
55             foreach (NTHistoryThread ht in mThreadList)\r
56             {\r
57                 if (board.mName.Equals(ht.BoardName))\r
58                     ht.update(board);\r
59             }\r
60 \r
61         }\r
62         \r
63  \r
64         public bool parse(string source)\r
65         {\r
66             onDetach();\r
67 \r
68             if (source == null || source.Length == 0)\r
69                 return false;\r
70 \r
71             string[] lines = NTTextUtiles.splitLine(source);\r
72             int lineLen = lines.Length;\r
73             if (lineLen == 0)\r
74                 return false;\r
75             int retVal;\r
76             if (!int.TryParse(lines[0], out retVal))\r
77                 return false;\r
78             \r
79             if (lineLen == 1)\r
80                 return false;\r
81 \r
82             mStrState = lines[1];\r
83 \r
84             if (retVal != 100)\r
85                 return false;\r
86 \r
87 \r
88             Dictionary<string, NTBoard> boardDic = new Dictionary<string, NTBoard>();\r
89 \r
90             for (int i = 2; i < lineLen; i++)\r
91             {\r
92                 string line = lines[i];\r
93                 string[] values = line.Split(NTTextUtiles.COMMA_VALUE);\r
94                 if (values.Length != 3)\r
95                     continue;\r
96 \r
97                 string boardName;\r
98                 string datName;\r
99                 if (NTUserPreference.AESEnabled)\r
100                 {\r
101                     boardName = NTTextUtiles.aesDecodeBase64URL(values[0]);\r
102                     datName = NTTextUtiles.aesDecodeBase64URL(values[1]);\r
103                 }\r
104                 else\r
105                 {\r
106                     boardName = NTTextUtiles.decodeBase64URL(values[0]);\r
107                     datName = NTTextUtiles.decodeBase64URL(values[1]);\r
108                 }\r
109                 string dateTimeDescription = values[2];\r
110 \r
111                 NTHistoryThread ht = new NTHistoryThread(boardName, datName, dateTimeDescription);\r
112 \r
113                 mThreadList.Add(ht);\r
114 \r
115                 if (!boardDic.ContainsKey(boardName))\r
116                 {\r
117                     NTBoard board = NTDataRoot.getBoardByName(boardName);\r
118                     if (board != null)\r
119                         boardDic.Add(boardName, board);\r
120                 }\r
121             }\r
122 \r
123             foreach (NTBoard board in boardDic.Values)\r
124             {\r
125                 if (board.mDataInit)\r
126                 {\r
127                     OnNotifyBoardUpdate(board);\r
128                 }\r
129                 else\r
130                 {\r
131                     board.Update(mOnNotifyBoardUpdate);\r
132                 }\r
133             }\r
134 \r
135             return true;\r
136         }\r
137     }\r
138 }\r