OSDN Git Service

規定のブラウザとのクッキー共有機能実装
[nlite/nlite.git] / nlite / nlite_common.cpp
1 #include "stdafx.h"
2 #include "nlite_include.h"
3
4
5
6 namespace nlite{
7
8         namespace nliteregex{
9                 namespace text{
10                         const  CString URL_TEXT = TEXT("(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)");
11                         const  CString TAG_TEXT = TEXT("<[\"_;!?,\\:.'$%&#/a-zA-Z0-9= ]*>");
12                         const  CString VIDEOID_TEXT = TEXT("(sm|nm)([0-9])+");
13                         const  CString LIVEID_TEXT = TEXT("(lv)([0-9])+");
14                         const  CString LINK_TEXT = TEXT("(") + URL_TEXT + TEXT(")|(") + VIDEOID_TEXT + TEXT(")|(") + LIVEID_TEXT + TEXT(")");
15                         const  CString SEARTCH_AT_MARK(TEXT("(.*)(@|\81\97)([^ |^\81@][^@^\81\97]+)"));
16                         const  tstring NUTHINGSTRING(TEXT(""));
17                 }
18                 const  tregex URL(text::URL_TEXT);
19                 const  tregex TAGSTRING(text::TAG_TEXT);
20                 const  tregex VIDEOID(text::VIDEOID_TEXT);
21                 const  tregex LIVEID(text::LIVEID_TEXT);
22                 const  tregex LILNKREGEX(text::LINK_TEXT);
23                 const tregex NAMESERTCHREGEX(text::SEARTCH_AT_MARK);
24         }
25         Property nliteProperty; 
26         CListenerList nlite::listenerList;
27         TCHAR appFolderPath[_MAX_PATH];
28         CString ncvAppSettingPath;
29         TCHAR localAppDataPath[_MAX_PATH];
30         speaker::ISpeaker &g_speaker = speaker::ISpeaker::GetMeiNormal(TEXT("libs\\Voice\\mei_normal\\"),TEXT("libs\\open_jtalk_dic\\"));
31         VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
32                 
33                 CString errLogFilePath(nliteProperty.propertySaveFolderPath);
34                 CAtlFile errFile;
35                 TCHAR errfile[_MAX_PATH];
36
37                 time_t nowtime = time(NULL);
38                 tm timestruct = *gmtime(&nowtime);
39                 _tcsftime(errfile,ARRAY_LENGTH(errfile),TEXT("errorlog\\nlite_errorLog_%Y%m%d%H%M%S.log"),&timestruct);
40                 errLogFilePath += errfile;
41                 SurelyCreate(errLogFilePath,TRUE);
42                 
43                 CString outputLogfileString;
44                 TCHAR file[_MAX_PATH];
45                 TCHAR ext[_MAX_PATH];
46                 _wsplitpath(fileName,(wchar_t*)NULL,(wchar_t*)NULL,file,ext);
47                 DWORD lastErrorCode = ::GetLastError();
48                 LPTSTR lpMsgBuf;
49                 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lastErrorCode,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,(va_list*)NULL);
50                 
51                 
52                 outputLogfileString.Format(TEXT("##ERROR##\r\n\94­\90\83t\83@\83C\83\8b\96¼:%s%s\r\n\94­\90\8aÖ\90\94\96¼:%s\r\n\94­\90\8ds:%d\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:%s\r\n\8dÅ\8fIOS\83G\83\89\81[\83R\81[\83h:%u\r\n\8dÅ\8fIOS\83G\83\89\81[\83\81\83b\83Z\81[\83W:%s")
53                         ,file,ext,function,line,summary,lastErrorCode,lpMsgBuf);
54                 LocalFree(lpMsgBuf);
55                 CStringA outputLogfileStringA(outputLogfileString);
56                 errFile.Create(errLogFilePath,GENERIC_WRITE,0,OPEN_ALWAYS);
57                 errFile.Write(outputLogfileStringA,outputLogfileStringA.GetLength() * sizeof(char));
58                 tstring errMessage;
59                 errMessage = headMessage;
60                 errMessage += TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B\88È\89º\82Ì\83t\83@\83C\83\8b\82É\83G\83\89\81[\83t\83@\83C\83\8b\82ª\8fo\97Í\82³\82ê\82½\82Ü\82µ\82½\81B\r\n");
61                 errMessage += errLogFilePath;
62                 errMessage += TEXT("\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:");
63                 errMessage += summary;
64                 ::MessageBox(NULL,errMessage.c_str(),TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
65                 
66                 
67                 
68                 
69                 
70                 return;
71         }
72
73         HINSTANCE OpenURL(HWND hwnd,const GeneralProperty &gp,LPCTSTR url ,INT nShowCommand){
74
75                 HINSTANCE rslt;
76
77                 if(gp.browserPath.Length() == 0){
78
79                         rslt = ShellExecute(hwnd, NULL, url, NULL, NULL, nShowCommand);
80
81                 } else{
82
83                         rslt = ShellExecute(hwnd, NULL, gp.browserPath, url, NULL, nShowCommand);
84
85                 }
86
87                 return rslt;
88
89         }
90
91         BOOL SurelyCreate(LPCTSTR dir,BOOL bFile){
92
93
94
95                 BOOL rslt = FALSE;
96                 std::vector<TCHAR> buf(_tcslen(dir) + 1);
97                 _tcscpy(&buf[0],dir);
98
99
100                 if( (PathFileExists(dir) && (!bFile || !::PathIsDirectory( dir )))){
101
102                         goto success;
103                 }
104
105                 LPTSTR startPtr = &buf[0];
106                 LPTSTR indexPtr = startPtr;
107                 LPTSTR cmpPtr;
108                 do {
109
110                         cmpPtr = _tcsstr(indexPtr,TEXT("\\"));
111
112                         if(cmpPtr == NULL){
113
114                                 if(bFile == TRUE){
115                                         CAtlFile file;
116                                         if( file.Create(startPtr,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL) != S_OK){
117
118                                                 goto err;
119
120                                         }
121                                 } else {
122
123                                         ::CreateDirectory(startPtr,0);
124                                 }
125
126                                 break;
127
128
129                         }else if(indexPtr == cmpPtr){
130                                 break;
131
132                         }
133
134                         cmpPtr[0] = TEXT('\0');
135                         ::CreateDirectory(startPtr,0);
136                         cmpPtr[0] = TEXT('\\');
137                         cmpPtr++;
138                         indexPtr = cmpPtr;
139
140
141                 }while(indexPtr[0] != TEXT('\0'));
142
143 success:
144
145
146                 rslt = TRUE;
147
148 end:
149
150                 return rslt;
151
152
153 err:
154                 rslt = FALSE;
155                 goto end;
156         }
157
158
159         ///
160         ///NCV\83\86\81[\83U\8fî\95ñ\83t\83@\83C\83\8b\83p\83X\8eæ\93¾XML\83p\81[\83T
161         ///
162         class CReadNCVListenerInfoFile:public CXmlParser{
163
164         private:
165
166                 BOOL settingDirFlag;
167                 CString &path;  
168
169
170
171
172         public:
173
174                 CReadNCVListenerInfoFile(CString &in_path):settingDirFlag(FALSE),path(in_path){}
175
176                 void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
177
178                         if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
179
180                                 settingDirFlag = TRUE;
181
182                         }
183
184                 }
185
186                 void OnEndElement (const XML_Char *pszName){
187
188                         if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
189
190                                 settingDirFlag = FALSE;
191
192                         }
193
194                 }
195
196                 void OnCharacterData (const XML_Char *pszData, int nLength){
197
198                         if(settingDirFlag == TRUE){
199
200                                 path.Append(pszData,nLength);
201
202                         }
203
204                 }
205         };
206
207         CString GetNCVListenerInfoFilePath(){
208
209
210                 CString rslt;
211
212
213                 if((PathFileExists(ncvAppSettingPath) &&  (!::PathIsDirectory( ncvAppSettingPath )))){
214
215
216                         CAtlFile ncvAppSettingFile;
217                         ULONGLONG ncvAppSettingFileSize = 0;
218                         if(SUCCEEDED(ncvAppSettingFile.Create(ncvAppSettingPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE ||
219                                 SUCCEEDED(ncvAppSettingFile.GetSize(ncvAppSettingFileSize)) == FALSE){
220
221                                         throw Exception(TEXT("NCV\82Ì\90Ý\92è\83t\83@\83C\83\8b\82ª\93Ç\82Ý\8d\9e\82ß\82Ü\82¹\82ñ\82Å\82µ\82½"),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
222
223                         }
224                         std::vector<char> fileBuf(static_cast<UINT_PTR>(ncvAppSettingFileSize) / sizeof(char) + (1 * sizeof(char)));
225                         ncvAppSettingFile.Read(&fileBuf[0],fileBuf.size());
226                         LPSTR startPtr = strstr(&fileBuf[0],"<");
227                         if(startPtr != NULL){
228                                 CReadNCVListenerInfoFile parser(rslt);
229                                 parser.Parse(startPtr);
230                                 rslt += TEXT("UserSetting.xml");
231
232                         }
233
234                 }
235
236
237
238
239                 return rslt;
240         }
241
242
243
244         const CApplicationInfo * appInfo = NULL;
245
246 }
247