OSDN Git Service

5723310921a83ef1dfbb9bd471281e3fff241091
[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
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                 errFile.Create(errLogFilePath,GENERIC_WRITE,0,OPEN_ALWAYS);
44                 tstring errMessage;
45                 errMessage = headMessage;
46                 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");
47                 errMessage += errLogFilePath;
48                 errMessage += TEXT("\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:");
49                 errMessage += summary;
50                 DebugOutW(fileName,function,line,DUMPING__DEBUGER__ | LINEFEAD__DEBUGER__ ,ERRORMODE__DEBUGER__,TEXT("%s"),summary);
51                 ::MessageBox(NULL,errMessage.c_str(),TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
52                 /*
53                 CComVariant val;
54                 val = TEXT("\8f\91\82«\82±\82Ý\83e\83X\83g");
55                 val.WriteToStream(
56                 CString outputLogfileString;
57                 errFile.Write(TEXT("\8f\91\82«\82±\82Ý\83e\83X\83g\r\n"),_tcslen(TEXT("\8f\91\82«\82±\82Ý\83e\83X\83g\r\n")) * sizeof(TCHAR));
58                 errFile.Write(TEXT("\8f\91\82«\82±\82Ý\83e\83X\83g\r\n"),_tcslen(TEXT("\8f\91\82«\82±\82Ý\83e\83X\83g\r\n")) * sizeof(TCHAR));
59                 */
60                 return;
61         }
62
63         HINSTANCE OpenURL(HWND hwnd,const GeneralProperty &gp,LPCTSTR url ,INT nShowCommand){
64
65                 HINSTANCE rslt;
66
67                 if(gp.browserPath.Length() == 0){
68
69                         rslt = ShellExecute(hwnd, NULL, url, NULL, NULL, nShowCommand);
70
71                 } else{
72
73                         rslt = ShellExecute(hwnd, NULL, gp.browserPath, url, NULL, nShowCommand);
74
75                 }
76
77                 return rslt;
78
79         }
80
81         BOOL SurelyCreate(LPCTSTR dir,BOOL bFile){
82
83
84
85                 BOOL rslt = FALSE;
86                 std::vector<TCHAR> buf(_tcslen(dir) + 1);
87                 _tcscpy(&buf[0],dir);
88
89
90                 if( (PathFileExists(dir) && (!bFile || !::PathIsDirectory( dir )))){
91
92                         goto success;
93                 }
94
95                 LPTSTR startPtr = &buf[0];
96                 LPTSTR indexPtr = startPtr;
97                 LPTSTR cmpPtr;
98                 do {
99
100                         cmpPtr = _tcsstr(indexPtr,TEXT("\\"));
101
102                         if(cmpPtr == NULL){
103
104                                 if(bFile == TRUE){
105                                         CAtlFile file;
106                                         if( file.Create(startPtr,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL) != S_OK){
107
108                                                 goto err;
109
110                                         }
111                                 } else {
112
113                                         ::CreateDirectory(startPtr,0);
114                                 }
115
116                                 break;
117
118
119                         }else if(indexPtr == cmpPtr){
120                                 break;
121
122                         }
123
124                         cmpPtr[0] = TEXT('\0');
125                         ::CreateDirectory(startPtr,0);
126                         cmpPtr[0] = TEXT('\\');
127                         cmpPtr++;
128                         indexPtr = cmpPtr;
129
130
131                 }while(indexPtr[0] != TEXT('\0'));
132
133 success:
134
135
136                 rslt = TRUE;
137
138 end:
139
140                 return rslt;
141
142
143 err:
144                 rslt = FALSE;
145                 goto end;
146         }
147
148
149         ///
150         ///NCV\83\86\81[\83U\8fî\95ñ\83t\83@\83C\83\8b\83p\83X\8eæ\93¾XML\83p\81[\83T
151         ///
152         class CReadNCVListenerInfoFile:public CXmlParser{
153
154         private:
155
156                 BOOL settingDirFlag;
157                 CString &path;  
158
159
160
161
162         public:
163
164                 CReadNCVListenerInfoFile(CString &in_path):settingDirFlag(FALSE),path(in_path){}
165
166                 void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
167
168                         if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
169
170                                 settingDirFlag = TRUE;
171
172                         }
173
174                 }
175
176                 void OnEndElement (const XML_Char *pszName){
177
178                         if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
179
180                                 settingDirFlag = FALSE;
181
182                         }
183
184                 }
185
186                 void OnCharacterData (const XML_Char *pszData, int nLength){
187
188                         if(settingDirFlag == TRUE){
189
190                                 path.Append(pszData,nLength);
191
192                         }
193
194                 }
195         };
196
197         CString GetNCVListenerInfoFilePath(){
198
199
200                 CString rslt;
201
202
203                 if((PathFileExists(ncvAppSettingPath) &&  (!::PathIsDirectory( ncvAppSettingPath )))){
204
205
206                         CAtlFile ncvAppSettingFile;
207                         ULONGLONG ncvAppSettingFileSize = 0;
208                         if(SUCCEEDED(ncvAppSettingFile.Create(ncvAppSettingPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE ||
209                                 SUCCEEDED(ncvAppSettingFile.GetSize(ncvAppSettingFileSize)) == FALSE){
210
211                                         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__));
212
213                         }
214                         std::vector<char> fileBuf(static_cast<UINT_PTR>(ncvAppSettingFileSize) / sizeof(char) + (1 * sizeof(char)));
215                         ncvAppSettingFile.Read(&fileBuf[0],fileBuf.size());
216                         LPSTR startPtr = strstr(&fileBuf[0],"<");
217                         if(startPtr != NULL){
218                                 CReadNCVListenerInfoFile parser(rslt);
219                                 parser.Parse(startPtr);
220                                 rslt += TEXT("UserSetting.xml");
221
222                         }
223
224                 }
225
226
227
228
229                 return rslt;
230         }
231
232
233
234         const CApplicationInfo * appInfo = NULL;
235
236 }
237