NLIB_RESULT errcode;
NicoMyListItem_P pitem;
LPVOID option;
-
+ NicoMyListCallBack callBack;
}NicoMyListItemContainer,*NicoMyListItemContainer_P;
///
///\83}\83C\83\8a\83X\83g\88ê\97\97\8eæ\93¾\8b¤\92Ê\8f\88\97\9d
///
-static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback,BOOL mtFlag,LPVOID option);
+static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback,LPVOID option);
static NicoMyListItem_P NicoMyListItem_new();
static VOID CALLBACK myListItemCallBack(HINTERNET handle,DWORD_PTR context,DWORD code,LPVOID info,DWORD length);
-static NLIB_RESULT recvMyList(HINTERNET hGetMyList,NicoMyListItemContainer_P itemContainer,NLIB_RESULT rslt);
+static NLIB_RESULT jsonStrCpy(LPWSTR buf,LPCWSTR in,SIZE_T size);
+
+
+//
+//\83}\83N\83\8d
+//
+#define jsonToArray(arr,in) jsonStrCpy((arr),(in),sizeof(arr) / sizeof(arr[0]))
///
///\82Æ\82è\82 \82¦\82¸\83}\83C\83\8a\83X\83g\88ê\97\97\8eæ\93¾
///
-NLIB_RESULT NicoMyList_getDefList(NicoVideoAuth_P pAuth,NicoMyListCallBack callback,BOOL mtFlag,LPVOID option){
+NLIB_RESULT NicoMyList_getDefList(NicoVideoAuth_P pAuth,NicoMyListCallBack callback,LPVOID option){
NLIB_RESULT rslt = NLIB_ERR_OK;
- rslt = NicoMyList_getList(pAuth,L"api/deflist/list",callback,mtFlag,option);
+ rslt = NicoMyList_getList(pAuth,L"api/deflist/list",callback,option);
//\83v\83\89\83C\83x\81[\83g\8aÖ\90\94
//
-static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback,BOOL mtFlag,LPVOID option){
+static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback,LPVOID option){
//\95Ï\90\94\90é\8c¾\81A\8f\89\8aú\89»
NLIB_RESULT rslt = NLIB_ERR_OK;
WCHAR sendBuffer[LENGTH_512] = {L"Cookie: "};
NicoMyListItemContainer itemContainer;
-
- LPSTR readBuffer = NULL;
- JSONParser_P jsonParser = NULL;
+
+ const UINT_PTR readBufSize = LENGTH_65536 * 30;
+
+ LPSTR readBuffer = (LPSTR)malloc(readBufSize);
+
+ DWORD readSize;
+
+ DWORD statusCode;
+ DWORD statusCodeSize = sizeof(statusCode);
+
+ JSONParser_P jsonParser = JSONParser_new();
+
+ JSONParser_setEventHandler(jsonParser,myListItemStructEventHandler,myListItemDataEventHandler,myListItemDataEndEventHandler);
+
+
ZeroMemory(&itemContainer,sizeof(itemContainer));
-
+ itemContainer.callBack = callback;
itemContainer.option = option;
wcscat(sendBuffer,pAuth->userSession);
//hNicoVideoSession = WinHttpConnect(hHttpSession,WWW_NICO_VIDEO_DOMEINNAME,INTERNET_DEFAULT_HTTP_PORT,0);
goto networkerr;
}
- if(mtFlag == TRUE){
- if(WINHTTP_INVALID_STATUS_CALLBACK == WinHttpSetStatusCallback(hGetMyList,myListItemCallBack, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,0)){
- goto networkerr;
- }
- }
if(WinHttpSendRequest(hGetMyList,sendBuffer,-1,WINHTTP_NO_REQUEST_DATA,0,0,0) == FALSE){
}
- if(mtFlag == FALSE){
- rslt = recvMyList(hGetMyList,&itemContainer,NLIB_ERR_OK);
- }
-
-end:
- return rslt;
-
-networkerr:
- rslt = NLIB_ERR_FAILED_NETWORK;
- goto end;
-}
-
-static VOID CALLBACK myListItemCallBack(HINTERNET handle,DWORD_PTR context,DWORD code,LPVOID info,DWORD length){
-
-
-
-
-
-
-}
-
-static NLIB_RESULT recvMyList(HINTERNET hGetMyList,NicoMyListItemContainer_P itemContainer,NLIB_RESULT rslt){
-
-
-
- const UINT_PTR readBufSize = LENGTH_65536 * 30;
-
- LPSTR readBuffer = (LPSTR)malloc(readBufSize);
-
- DWORD readSize;
-
- DWORD statusCode;
- DWORD statusCodeSize = sizeof(statusCode);
-
- JSONParser_P jsonParser = JSONParser_new();
-
- JSONParser_setEventHandler(jsonParser,myListItemStructEventHandler,myListItemDataEventHandler,myListItemDataEndEventHandler);
-
-
-
-
-
- itemContainer->pitem = NicoMyListItem_new();
+ itemContainer.pitem = NicoMyListItem_new();
if(WinHttpReceiveResponse(hGetMyList,NULL) == FALSE){
readBuffer[readSize] = '\0';
- if(JSONParser_Parse(jsonParser,readBuffer,JSON_ENCODE_UTF8,itemContainer) != JSON_ERR_OK){
+ if(JSONParser_Parse(jsonParser,readBuffer,JSON_ENCODE_UTF8,&itemContainer) != JSON_ERR_OK){
goto jsonerr;
}
-
-
-
end:
free(readBuffer);
JSONParser_delete(&jsonParser);
- NicoMyListItem_delete(&itemContainer->pitem);
-
+ NicoMyListItem_delete(&itemContainer.pitem);
WinHttpCloseHandle(hGetMyList);
+
return rslt;
rslt = NLIB_ERR_JSON_PARSE;
goto end;
+}
+
-}
static NicoMyListItem_P NicoMyListItem_new(){
static JSONVoid myListItemDataEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name,JSONParameter param){
- switch(valueType){
+ NicoMyListItemContainer_P self = (NicoMyListItemContainer_P)option;
+
+ if(thisHierarchy == JSONTypeObject){
+ switch(self->nord){
+
+ case MAKENORD3(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem,NicoMyList_item):
+ if(valueType == JSONTypeDecimal && wcscmp(name,L"create_time") == 0){
- case JSONTypeDecimal:
+ self->pitem->create_time = wcstoul((LPCWSTR)param,NULL,10);
- dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
+ } else if(valueType == JSONTypeString && wcscmp(name,L"description") == 0){
- break;
+ self->errcode = jsonToArray(self->pitem->description,(LPCWSTR)param);
- case JSONTypeString:
+ } else if(valueType == JSONTypeString && wcscmp(name,L"item_id") == 0){
- dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
-
- break;
+ self->errcode = jsonToArray(self->pitem->item_id,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"item_type") == 0){
+
+ self->errcode = jsonToArray(self->pitem->item_type,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeDecimal && wcscmp(name,L"update_time") == 0){
+
+ self->pitem->update_time = wcstoul((LPCWSTR)param,NULL,10);
+
+ } else if(valueType == JSONTypeDecimal && wcscmp(name,L"watch") == 0){
+
+ self->pitem->watch = wcstoul((LPCWSTR)param,NULL,10);
+ }
+
+ break;
+
+ case MAKENORD4(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem,NicoMyList_item,NicoMyList_item_data):
+
+ if(valueType == JSONTypeString && wcscmp(name,L"deleted") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.deleted,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeDecimal && wcscmp(name,L"first_retrieve") == 0){
+
+ self->pitem->itemData.first_retrieve = wcstoul((LPCWSTR)param,NULL,10);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"group_type") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.group_type,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"last_res_body") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.last_res_body,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"length_seconds") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.length_seconds,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"mylist_counter") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.mylist_counter,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"num_res") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.num_res,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"thumbnail_url") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.thumbnail_url,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"title") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.title,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeDecimal && wcscmp(name,L"update_time") == 0){
+
+ self->pitem->itemData.update_time = wcstoul((LPCWSTR)param,NULL,10);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"video_id") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.video_id,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"view_counter") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.view_counter,(LPCWSTR)param);
+
+ } else if(valueType == JSONTypeString && wcscmp(name,L"watch_id") == 0){
+
+ self->errcode = jsonToArray(self->pitem->itemData.watch_id,(LPCWSTR)param);
+
+ }
+
+ break;
+ }
}
return;
}
static JSONVoid myListItemDataEndEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name){
+ NicoMyListItemContainer_P self = (NicoMyListItemContainer_P)option;
+ self->nord = UPNORD(self->nord);
+ if(MAKENORD2(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem) == self->nord){
- UPNORD(((NicoMyListItemContainer_P)option)->nord);
+ self->callBack(self->option,self->pitem);
+ ZeroMemory(self->pitem,sizeof(*self->pitem));
+ }
return;
+}
+
+static NLIB_RESULT jsonStrCpy(LPWSTR buf,LPCWSTR in,SIZE_T size){
+
+ NLIB_RESULT rslt = NLIB_ERR_OK;
+
+ if(wcslen(in) < size){
+
+ wcscpy(buf,in);
+
+ }else {
+
+ rslt = NLIB_ERR_BUFFER_TOOLITTLE;
+
+ }
+
+ return rslt;
}
\ No newline at end of file