OSDN Git Service

NCVのリスナー情報同期処理
[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         }
16         const  tregex URL(text::URL_TEXT);
17         const  tregex TAGSTRING(text::TAG_TEXT);
18         const  tregex VIDEOID(text::VIDEOID_TEXT);
19         const  tregex LIVEID(text::LIVEID_TEXT);
20         const  tregex LILNKREGEX(text::LINK_TEXT);
21         const  tstring NUTHINGSTRING(TEXT(""));
22 }
23 Property nliteProperty; 
24 CListenerList nlite::listenerList;
25 TCHAR appFolderPath[_MAX_PATH];
26 CString ncvAppSettingPath;
27 TCHAR localAppDataPath[_MAX_PATH];
28
29  VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
30         tstring errMessage;
31         errMessage = headMessage;
32         errMessage += TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B\83A\83v\83\8a\83P\81[\83V\83\87\83\93\94z\92u\83t\83H\83\8b\83_\82É\8dì\90¬\82³\82ê\82½\83\8d\83O\83t\83@\83C\83\8b\82ð\93n\82µ\82Ä\82à\82ç\82¦\82é\82Æ\8aJ\94­\8eÒ\82ª\94ñ\8fí\82É\8aì\82Ñ\82Ü\82·");
33         errMessage += TEXT("\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:");
34         errMessage += summary;
35         DebugOutW(fileName,function,line,DUMPING__DEBUGER__ | LINEFEAD__DEBUGER__ ,ERRORMODE__DEBUGER__,TEXT("%s"),summary);
36         ::MessageBox(NULL,errMessage.c_str(),TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
37         
38
39
40          return;
41  }
42
43  HINSTANCE OpenURL(HWND hwnd,const GeneralProperty &gp,LPCTSTR url ,INT nShowCommand){
44
45          HINSTANCE rslt;
46
47         if(gp.browserPath.Length() == 0){
48
49                 rslt = ShellExecute(hwnd, NULL, url, NULL, NULL, nShowCommand);
50
51         } else{
52
53                 rslt = ShellExecute(hwnd, NULL, gp.browserPath, url, NULL, nShowCommand);
54
55         }
56
57         return rslt;
58
59  }
60
61  BOOL SurelyCreate(LPCTSTR dir,BOOL bFile){
62
63          
64
65          BOOL rslt = FALSE;
66          std::vector<TCHAR> buf(_tcslen(dir) + 1);
67          _tcscpy(&buf[0],dir);
68
69
70          if( (PathFileExists(dir) && (!bFile || !::PathIsDirectory( dir )))){
71
72                  goto success;
73          }
74
75          LPTSTR startPtr = &buf[0];
76          LPTSTR indexPtr = startPtr;
77          LPTSTR cmpPtr;
78          do {
79
80                  cmpPtr = _tcsstr(indexPtr,TEXT("\\"));
81
82                  if(cmpPtr == NULL){
83                         
84                          if(bFile == TRUE){
85                                 CAtlFile file;
86                                 if( file.Create(startPtr,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL) != S_OK){
87
88                                         goto err;
89
90                                 }
91                          } else {
92
93                                  ::CreateDirectory(startPtr,0);
94                          }
95
96                          break;
97
98
99                  }else if(indexPtr == cmpPtr){
100                          break;
101
102                  }
103
104                  cmpPtr[0] = TEXT('\0');
105                  ::CreateDirectory(startPtr,0);
106                  cmpPtr[0] = TEXT('\\');
107                  cmpPtr++;
108                  indexPtr = cmpPtr;
109                  
110
111          }while(indexPtr[0] != TEXT('\0'));
112
113 success:
114
115
116          rslt = TRUE;
117
118 end:
119
120          return rslt;
121
122
123 err:
124          rslt = FALSE;
125          goto end;
126  }
127
128
129 ///
130 ///NCV\83\86\81[\83U\8fî\95ñ\83t\83@\83C\83\8b\83p\83X\8eæ\93¾XML\83p\81[\83T
131 ///
132 class CReadNCVListenerInfoFile:public CXmlParser{
133
134 private:
135         
136         BOOL settingDirFlag;
137         CString &path;  
138                 
139                 
140
141
142 public:
143
144         CReadNCVListenerInfoFile(CString &in_path):settingDirFlag(FALSE),path(in_path){}
145
146         void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
147
148                 if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
149
150                         settingDirFlag = TRUE;
151
152                 }
153
154         }
155
156         void OnEndElement (const XML_Char *pszName){
157
158                 if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
159
160                         settingDirFlag = FALSE;
161
162                 }
163
164         }
165
166         void OnCharacterData (const XML_Char *pszData, int nLength){
167
168                 if(settingDirFlag == TRUE){
169
170                         path.Append(pszData,nLength);
171
172                 }
173
174         }
175 };
176
177  CString GetNCVListenerInfoFilePath(){
178
179         
180         CString rslt;
181         
182
183         if((PathFileExists(ncvAppSettingPath) &&  (!::PathIsDirectory( ncvAppSettingPath )))){
184
185                 
186                 CAtlFile ncvAppSettingFile;
187                 ULONGLONG ncvAppSettingFileSize = 0;
188                 if(SUCCEEDED(ncvAppSettingFile.Create(ncvAppSettingPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE ||
189                         SUCCEEDED(ncvAppSettingFile.GetSize(ncvAppSettingFileSize)) == FALSE){
190
191                                 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__));
192
193                 }
194                 std::vector<char> fileBuf(static_cast<UINT_PTR>(ncvAppSettingFileSize) / sizeof(char) + (1 * sizeof(char)));
195                 ncvAppSettingFile.Read(&fileBuf[0],fileBuf.size());
196                 LPSTR startPtr = strstr(&fileBuf[0],"<");
197                 if(startPtr != NULL){
198                         CReadNCVListenerInfoFile parser(rslt);
199                         parser.Parse(startPtr);
200                         rslt += TEXT("UserSetting.xml");
201
202                 }
203
204         }
205
206
207
208
209         return rslt;
210  }
211
212 const CApplicationInfo * appInfo = NULL;
213
214 }