OSDN Git Service

NCVのリスナー情報同期処理
[nlite/nlite.git] / nlite / nlite_common.cpp
index 4af570e..055ca1f 100644 (file)
@@ -5,8 +5,26 @@
 
 namespace nlite{
 
+namespace nliteregex{
+       namespace text{
+               const  CString URL_TEXT = TEXT("(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)");
+               const  CString TAG_TEXT = TEXT("<[\"_;!?,\\:.'$%&#/a-zA-Z0-9= ]*>");
+               const  CString VIDEOID_TEXT = TEXT("(sm|nm)([0-9])+");
+               const  CString LIVEID_TEXT = TEXT("(lv)([0-9])+");
+               const  CString LINK_TEXT = TEXT("(") + URL_TEXT + TEXT(")|(") + VIDEOID_TEXT + TEXT(")|(") + LIVEID_TEXT + TEXT(")");
+       }
+       const  tregex URL(text::URL_TEXT);
+       const  tregex TAGSTRING(text::TAG_TEXT);
+       const  tregex VIDEOID(text::VIDEOID_TEXT);
+       const  tregex LIVEID(text::LIVEID_TEXT);
+       const  tregex LILNKREGEX(text::LINK_TEXT);
+       const  tstring NUTHINGSTRING(TEXT(""));
+}
 Property nliteProperty;        
-
+CListenerList nlite::listenerList;
+TCHAR appFolderPath[_MAX_PATH];
+CString ncvAppSettingPath;
+TCHAR localAppDataPath[_MAX_PATH];
 
  VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
        tstring errMessage;
@@ -40,7 +58,156 @@ Property nliteProperty;
 
  }
 
+ BOOL SurelyCreate(LPCTSTR dir,BOOL bFile){
+
+        
+
+        BOOL rslt = FALSE;
+        std::vector<TCHAR> buf(_tcslen(dir) + 1);
+        _tcscpy(&buf[0],dir);
+
+
+        if( (PathFileExists(dir) && (!bFile || !::PathIsDirectory( dir )))){
+
+                goto success;
+        }
+
+        LPTSTR startPtr = &buf[0];
+        LPTSTR indexPtr = startPtr;
+        LPTSTR cmpPtr;
+        do {
+
+                cmpPtr = _tcsstr(indexPtr,TEXT("\\"));
+
+                if(cmpPtr == NULL){
+                       
+                        if(bFile == TRUE){
+                               CAtlFile file;
+                               if( file.Create(startPtr,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL) != S_OK){
+
+                                       goto err;
+
+                               }
+                        } else {
+
+                                ::CreateDirectory(startPtr,0);
+                        }
+
+                        break;
+
+
+                }else if(indexPtr == cmpPtr){
+                        break;
+
+                }
+
+                cmpPtr[0] = TEXT('\0');
+                ::CreateDirectory(startPtr,0);
+                cmpPtr[0] = TEXT('\\');
+                cmpPtr++;
+                indexPtr = cmpPtr;
+                
+
+        }while(indexPtr[0] != TEXT('\0'));
+
+success:
+
+
+        rslt = TRUE;
+
+end:
+
+        return rslt;
+
+
+err:
+        rslt = FALSE;
+        goto end;
+ }
+
+
+///
+///NCV\83\86\81[\83U\8fî\95ñ\83t\83@\83C\83\8b\83p\83X\8eæ\93¾XML\83p\81[\83T
+///
+class CReadNCVListenerInfoFile:public CXmlParser{
+
+private:
+       
+       BOOL settingDirFlag;
+       CString &path;  
+               
+               
+
+
+public:
+
+       CReadNCVListenerInfoFile(CString &in_path):settingDirFlag(FALSE),path(in_path){}
 
+       void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
+
+               if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
+
+                       settingDirFlag = TRUE;
+
+               }
+
+       }
+
+       void OnEndElement (const XML_Char *pszName){
+
+               if(_tcscmp(pszName,TEXT("SettingDir")) == 0){
+
+                       settingDirFlag = FALSE;
+
+               }
+
+       }
+
+       void OnCharacterData (const XML_Char *pszData, int nLength){
+
+               if(settingDirFlag == TRUE){
+
+                       path.Append(pszData,nLength);
+
+               }
+
+       }
+};
+
+ CString GetNCVListenerInfoFilePath(){
+
+       
+       CString rslt;
+       
+
+       if((PathFileExists(ncvAppSettingPath) &&  (!::PathIsDirectory( ncvAppSettingPath )))){
+
+               
+               CAtlFile ncvAppSettingFile;
+               ULONGLONG ncvAppSettingFileSize = 0;
+               if(SUCCEEDED(ncvAppSettingFile.Create(ncvAppSettingPath,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE ||
+                       SUCCEEDED(ncvAppSettingFile.GetSize(ncvAppSettingFileSize)) == FALSE){
+
+                               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__));
+
+               }
+               std::vector<char> fileBuf(static_cast<UINT_PTR>(ncvAppSettingFileSize) / sizeof(char) + (1 * sizeof(char)));
+               ncvAppSettingFile.Read(&fileBuf[0],fileBuf.size());
+               LPSTR startPtr = strstr(&fileBuf[0],"<");
+               if(startPtr != NULL){
+                       CReadNCVListenerInfoFile parser(rslt);
+                       parser.Parse(startPtr);
+                       rslt += TEXT("UserSetting.xml");
+
+               }
+
+       }
+
+
+
+
+       return rslt;
+ }
 
 const CApplicationInfo * appInfo = NULL;