2 #include "nlite_include.h"
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(""));
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);
25 CProperty 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 WSAData wsaData; //winsockdata
32 HINTERNET hInternet = NULL;
33 CNliteMainFrame wnd; //
\83\81\83C
\83\93\83t
\83\8c\81[
\83\80\83E
\83B
\83\93\83h
\83E
35 VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
37 CString errLogFilePath(nliteProperty.GetPropertySaveFolderPath());
39 TCHAR errfile[_MAX_PATH];
41 time_t nowtime = time(NULL);
42 tm timestruct = *gmtime(&nowtime);
43 _tcsftime(errfile,ARRAY_LENGTH(errfile),TEXT("errorlog\\nlite_errorLog_%Y%m%d%H%M%S.log"),×truct);
44 errLogFilePath += errfile;
45 SurelyCreate(errLogFilePath,TRUE);
47 CString outputLogfileString;
48 TCHAR file[_MAX_PATH];
50 _wsplitpath(fileName,(wchar_t*)NULL,(wchar_t*)NULL,file,ext);
51 DWORD lastErrorCode = ::GetLastError();
53 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);
56 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")
57 ,file,ext,function,line,summary,lastErrorCode,lpMsgBuf);
59 CStringA outputLogfileStringA(outputLogfileString);
60 errFile.Create(errLogFilePath,GENERIC_WRITE,0,OPEN_ALWAYS);
61 errFile.Write(outputLogfileStringA,outputLogfileStringA.GetLength() * sizeof(char));
63 errMessage = headMessage;
64 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");
65 errMessage += errLogFilePath;
66 errMessage += TEXT("\r\n
\83G
\83\89\81[
\83\81\83b
\83Z
\81[
\83W:");
67 errMessage += summary;
68 ::MessageBox(NULL,errMessage.c_str(),TEXT("
\91z
\92è
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\83G
\83\89\81["),MB_ICONERROR | MB_OK);
77 HINSTANCE OpenURL(HWND hwnd,const CGeneralProperty &gp,LPCTSTR url ,INT nShowCommand){
81 if(gp.GetBrowserPath().Length() == 0){
83 rslt = ShellExecute(hwnd, NULL, url, NULL, NULL, nShowCommand);
87 rslt = ShellExecute(hwnd, NULL, gp.GetBrowserPath(), url, NULL, nShowCommand);
95 BOOL SurelyCreate(LPCTSTR dir,BOOL bFile){
100 std::vector<TCHAR> buf(_tcslen(dir) + 1);
101 _tcscpy(&buf[0],dir);
104 if( (PathFileExists(dir) && (!bFile || !::PathIsDirectory( dir )))){
109 LPTSTR startPtr = &buf[0];
110 LPTSTR indexPtr = startPtr;
114 cmpPtr = _tcsstr(indexPtr,TEXT("\\"));
120 if( file.Create(startPtr,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL) != S_OK){
127 ::CreateDirectory(startPtr,0);
133 }else if(indexPtr == cmpPtr){
138 cmpPtr[0] = TEXT('\0');
139 ::CreateDirectory(startPtr,0);
140 cmpPtr[0] = TEXT('\\');
145 }while(indexPtr[0] != TEXT('\0'));
164 ///NCV
\83\86\81[
\83U
\8fî
\95ñ
\83t
\83@
\83C
\83\8b\83p
\83X
\8eæ
\93¾XML
\83p
\81[
\83T
166 class CReadNCVListenerInfoFile:public CXmlParser{
178 CReadNCVListenerInfoFile(CString &in_path):settingDirFlag(FALSE),path(in_path){}
180 void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
182 if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
184 settingDirFlag = TRUE;
190 void OnEndElement (const XML_Char *pszName){
192 if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
194 settingDirFlag = FALSE;
200 void OnCharacterData (const XML_Char *pszData, int nLength){
202 if(settingDirFlag == TRUE){
204 path.Append(pszData,nLength);
211 CString GetNCVListenerInfoFilePath(){
217 if((PathFileExists(ncvAppSettingPath) && (!::PathIsDirectory( ncvAppSettingPath )))){
220 CAtlFile ncvAppSettingFile;
221 ULONGLONG ncvAppSettingFileSize = 0;
222 if(SUCCEEDED(ncvAppSettingFile.Create(ncvAppSettingPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE ||
223 SUCCEEDED(ncvAppSettingFile.GetSize(ncvAppSettingFileSize)) == FALSE){
225 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__));
228 std::vector<char> fileBuf(static_cast<UINT_PTR>(ncvAppSettingFileSize) / sizeof(char) + (1 * sizeof(char)));
229 ncvAppSettingFile.Read(&fileBuf[0],fileBuf.size());
230 LPSTR startPtr = strstr(&fileBuf[0],"<");
231 if(startPtr != NULL){
232 CReadNCVListenerInfoFile parser(rslt);
233 parser.Parse(startPtr);
234 rslt += TEXT("UserSetting.xml");
248 const CApplicationInfo * appInfo = NULL;
254 BOOL InitializeNlite(){
260 nlite::appInfo = &CApplicationInfo::getInstance();
264 //WSAData
\82ð
\8f\89\8aú
\89»
265 while((err = WSAStartup(MAKEWORD(2,0),&wsaData)) == WSASYSNOTREADY){
275 if(err != ERROR_SUCCESS){
277 throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
280 //
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\8fî
\95ñ
\83C
\83\93\83X
\83^
\83\93\83X
\90¶
\90¬
281 const CApplicationInfo &appInfo = CApplicationInfo::getInstance();
282 CNLiteString userAgent;
283 userAgent = appInfo.getProcuctName();
284 userAgent += TEXT("/");
285 userAgent += appInfo.getProductVersion();
289 //HTTP
\83I
\83u
\83W
\83F
\83N
\83g
\90¶
\90¬
290 hInternet = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,(LPCWSTR)WINHTTP_NO_PROXY_NAME,(LPCWSTR)WINHTTP_NO_PROXY_BYPASS,0);
292 if(hInternet == NULL){
294 throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
298 //nlib
\82Ì
\8f\89\8aú
\89»
299 InitializeNLIB(hInternet);
301 //
\83\8d\81[
\83J
\83\8b\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\83t
\83H
\83\8b\83_
\8c\9f\8dõ
302 if(SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath) != S_OK){
304 throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
312 if(SHGetFolderPathW(0,CSIDL_APPDATA,0,SHGFP_TYPE_CURRENT,appFolderPath) != S_OK){
314 throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
316 ncvAppSettingPath = appFolderPath;
317 ncvAppSettingPath += TEXT("\\posite-c\\NiconamaCommentViewer\\AppSetting.xml");
319 nliteProperty.ReadProperty();
321 if((nliteProperty.GetGeneralProperty().IsNCVUserSettingReaded() == FALSE)){
323 ReadNCVListenerData();
326 listenerList.ReadProperty(nliteProperty.GetListenerDataPath());
328 CBugReport::Initalize(hInternet,CString(nliteProperty.GetPropertySaveFolderPath()) + TEXT("bugReport\\"));
330 }catch (AppInitException e){
341 VOID FinalizeNlite(){
343 //
\83\81\83C
\83\93\83t
\83\8c\81[
\83\80\83E
\83B
\83\93\83h
\83E
\8cã
\8f\88\97\9d
346 //nlib
\8cã
\8f\88\97\9d
349 //HTTP
\83I
\83u
\83W
\83F
\83N
\83g
\8aJ
\95ú
350 WinHttpCloseHandle(hInternet);
359 BOOL ReadNCVListenerData(){
363 if((PathFileExists(ncvAppSettingPath) && (!::PathIsDirectory( ncvAppSettingPath )))){
365 if((::MessageBox(NULL,TEXT("NCV
\82Ì
\83\8a\83X
\83i
\81[
\8fî
\95ñ
\82Æ
\93¯
\8aú
\82µ
\82Ü
\82·
\82©
\81H"),TEXT("
\83\8a\83X
\83i
\81[
\8fî
\95ñ
\93Ç
\82Ý
\8d\9e\82Ý"),MB_OK | MB_OKCANCEL) == IDOK)){
366 listenerList.ReadProperty(GetNCVListenerInfoFilePath());
368 nliteProperty.GetGeneralProperty().SetNCVUSerSettingReaded(TRUE);