diff options
author | René Schümann <white06tiger@gmail.com> | 2014-06-28 23:29:27 +0000 |
---|---|---|
committer | René Schümann <white06tiger@gmail.com> | 2014-06-28 23:29:27 +0000 |
commit | 814ff2e2b838bdefb42f2af358f358446025c8d0 (patch) | |
tree | 78ff09fb8b3748f4a308491d9c4ac2e11dc9610b | |
parent | c6e1bedfc18495b3e083069f8d03c2218f6f6b78 (diff) |
SendSS v0.8.6.0:
+ imgur.com support by user requests (anonymous upload only) (CSendHost_imgur,CSend,global.h,UMainForm)
this also include basic functions for JSON parsing (currently only JSON without spaces and arrays) (CSend)
SSL/HTTPS support for HTTPFormCreate (CSend)
support for custom headers in HTTPFormCreate (CSend)
* updated ImageShack related filenames.
* very minor misc code changes and improvements (comments, error messages)
git-svn-id: http://svn.miranda-ng.org/main/trunk@9606 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | plugins/SendScreenshotPlus/SendSS_10.vcxproj | 6 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/SendSS_12.vcxproj | 6 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSend.cpp | 148 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSend.h | 13 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp (renamed from plugins/SendScreenshotPlus/src/CSendImageShack.cpp) | 21 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_ImageShack.h (renamed from plugins/SendScreenshotPlus/src/CSendImageShack.h) | 6 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp | 95 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_imgur.h | 28 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp | 6 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/Main.cpp | 2 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/UMainForm.cpp | 6 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/UMainForm.h | 1 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/global.h | 3 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/version.h | 4 |
14 files changed, 315 insertions, 30 deletions
diff --git a/plugins/SendScreenshotPlus/SendSS_10.vcxproj b/plugins/SendScreenshotPlus/SendSS_10.vcxproj index c9dec0613d..71af7ee72b 100644 --- a/plugins/SendScreenshotPlus/SendSS_10.vcxproj +++ b/plugins/SendScreenshotPlus/SendSS_10.vcxproj @@ -187,8 +187,9 @@ <ClCompile Include="src\CSendFTPFile.cpp" />
<ClCompile Include="src\CSendHTTPServer.cpp" />
<ClCompile Include="src\CSendDropbox.cpp" />
- <ClCompile Include="src\CSendImageShack.cpp" />
+ <ClCompile Include="src\CSendHost_ImageShack.cpp" />
<ClCompile Include="src\CSendHost_uploadpie.cpp" />
+ <ClCompile Include="src\CSendHost_imgur.cpp" />
<ClCompile Include="src\Main.cpp" />
</ItemGroup>
<ItemGroup>
@@ -207,8 +208,9 @@ <ClInclude Include="src\CSendFTPFile.h" />
<ClInclude Include="src\CSendHTTPServer.h" />
<ClInclude Include="src\CSendDropbox.h" />
- <ClInclude Include="src\CSendImageShack.h" />
+ <ClInclude Include="src\CSendHost_ImageShack.h" />
<ClInclude Include="src\CSendHost_uploadpie.h" />
+ <ClInclude Include="src\CSendHost_imgur.h" />
<ClInclude Include="src\global.h" />
<ClInclude Include="src\Main.h" />
<ClInclude Include="src\version.h" />
diff --git a/plugins/SendScreenshotPlus/SendSS_12.vcxproj b/plugins/SendScreenshotPlus/SendSS_12.vcxproj index 75c15a57a7..3b9b52a4c2 100644 --- a/plugins/SendScreenshotPlus/SendSS_12.vcxproj +++ b/plugins/SendScreenshotPlus/SendSS_12.vcxproj @@ -190,8 +190,9 @@ <ClCompile Include="src\CSendFTPFile.cpp" />
<ClCompile Include="src\CSendHTTPServer.cpp" />
<ClCompile Include="src\CSendDropbox.cpp" />
- <ClCompile Include="src\CSendImageShack.cpp" />
+ <ClCompile Include="src\CSendHost_ImageShack.cpp" />
<ClCompile Include="src\CSendHost_uploadpie.cpp" />
+ <ClCompile Include="src\CSendHost_imgur.cpp" />
<ClCompile Include="src\Main.cpp" />
</ItemGroup>
<ItemGroup>
@@ -210,8 +211,9 @@ <ClInclude Include="src\CSendFTPFile.h" />
<ClInclude Include="src\CSendHTTPServer.h" />
<ClInclude Include="src\CSendDropbox.h" />
- <ClInclude Include="src\CSendImageShack.h" />
+ <ClInclude Include="src\CSendHost_ImageShack.h" />
<ClInclude Include="src\CSendHost_uploadpie.h" />
+ <ClInclude Include="src\CSendHost_imgur.h" />
<ClInclude Include="src\global.h" />
<ClInclude Include="src\Main.h" />
<ClInclude Include="src\version.h" />
diff --git a/plugins/SendScreenshotPlus/src/CSend.cpp b/plugins/SendScreenshotPlus/src/CSend.cpp index f0c800004e..cb18639223 100644 --- a/plugins/SendScreenshotPlus/src/CSend.cpp +++ b/plugins/SendScreenshotPlus/src/CSend.cpp @@ -462,6 +462,140 @@ const char* CSend::GetHTMLContent(char* str, const char* startTag, const char* e } return begin; } +int JSON_ParseData_(const char** jsondata,size_t jsonlen,const char** rawdata){ + const char* c=*jsondata; + const char* jsonend=*jsondata+jsonlen; + int len=0; + *rawdata=NULL; + if(c==jsonend) + return 0; + if(*c=='{'){ // scope (object) + *rawdata=c; + do{ + if(*c=='{') ++len; + else if(*c=='}') --len; + if(++c==jsonend) + return 0; + }while(len>0); + len=c-*rawdata; + if(*c==',') ++c; + }else if(*c=='"' || *c=='\''){ // string + char needle=*c; + if(++c==jsonend) + return 0; + *rawdata=c; + do{ + if(c==jsonend || (*c=='\\' && ++c==jsonend)) + return 0; + }while(*c++!=needle); + len=c-*rawdata-1; + if(*c==',') ++c; + }else{ // other + for(*rawdata=c; c<jsonend && *c++!=','; ); + len=c-*rawdata; + if(c[-1]==',') --len; + } + *jsondata=c; + return len; +} +int JSON_Get_(const char* json, size_t jsonlen, const char* variable, const char** value) { + char needle[32]; + const char* needlechild; + char var[32]; + char* tmp; + const char* c; + const char* jsonend=json+jsonlen; + /// get needle + if(!jsonlen || *json!='{') + return 0; + for(tmp=needle,c=*variable=='['?variable+1:variable; *c!='[' && *c!=']'; ++c){ + if(c==jsonend) + return 0; + if(tmp<needle+sizeof(needle)-1) *tmp++=*c; + } + *tmp='\0'; + /// get child needle (if any) + if(*c==']') ++c; + if(c==jsonend) + return 0; + needlechild=c; + /// parse JSON + for(c=json+1; c<jsonend && (*c=='"' || *c=='\''); ){ + for(++c,tmp=var; c<jsonend && (*c!='"' && *c!='\''); ++c) + if(tmp<var+sizeof(var)-1) *tmp++=*c; + *tmp='\0'; + if(c+2>=jsonend || *++c!=':') break; + /// read data + ++c; + if(!strcmp(var,needle)){ + int datalen=JSON_ParseData_(&c,jsonend-c,value); + if(!datalen) + return 0; + if(*needlechild && **value=='{'){ // we need a child value, parse child object + return JSON_Get_(*value,datalen,needlechild,value); + } + return datalen; + }else{ + JSON_ParseData_(&c,jsonend-c,value); + } + } + *value=NULL; + return 0; +} +int CSend::GetJSONString(const char* json, size_t jsonlen, const char* variable, char* value, size_t valuesize) { + if(!jsonlen || !valuesize) + return 0; + const char* rawvalue; + int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); + if(rawlen){ + size_t out=0; + --valuesize; + /// copy & parse escape sequences + for(int in=0; in<rawlen && out<valuesize; ++in,++out){ + if(rawvalue[in]=='\\'){ + if(++in==rawlen) + break; + switch(rawvalue[in]){ + case 's': value[out]=' '; break; + case 't': value[out]='\t'; break; + case 'n': value[out]='\n'; break; + case 'r': value[out]='\r'; break; + default: value[out]=rawvalue[in]; + } + continue; + } + value[out]=rawvalue[in]; + } + value[out]='\0'; + return 1; + } + *value='\0'; + return 0; +} +int CSend::GetJSONInteger(const char* json, size_t jsonlen, const char* variable,int defvalue) { + const char* rawvalue; + int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); + if(rawlen){ + defvalue=0; + for(int offset=0; offset<rawlen; ++offset){ + if(rawvalue[offset]<'0' || rawvalue[offset]>'9') break; + defvalue*=10; + defvalue+=rawvalue[offset]-'0'; + } + } + return defvalue; +} +bool CSend::GetJSONBool(const char* json, size_t jsonlen, const char* variable) { + const char* rawvalue; + int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); + if(rawlen){ + if(rawlen==4 && !memcmp(rawvalue,"true",4)) + return true; + if(*rawvalue>'0' && *rawvalue<='9') + return true; + } + return false; +} static void HTTPFormAppendData(NETLIBHTTPREQUEST* nlhr, size_t* dataMax, char** dataPos, const char* data,size_t len){ nlhr->dataLength=(*dataPos-nlhr->pData); @@ -505,8 +639,13 @@ int CSend::HTTPFormCreate(NETLIBHTTPREQUEST* nlhr,int requestType,char* url,HTTP nlhr->cbSize =sizeof(NETLIBHTTPREQUEST); nlhr->requestType =requestType; nlhr->flags =NLHRF_HTTP11; + if(!strncmp(url,"https://",8)) nlhr->flags|=NLHRF_SSL; nlhr->szUrl =url; nlhr->headersCount =3; + for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ + if(!(iter->flags&HTTPFF_HEADER)) break; + ++nlhr->headersCount; + } nlhr->headers =(NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr->headersCount); { char* contenttype=(char*)mir_alloc(sizeof(char)*(30+1+sizeof(boundary))); @@ -519,12 +658,17 @@ int CSend::HTTPFormCreate(NETLIBHTTPREQUEST* nlhr,int requestType,char* url,HTTP nlhr->headers[1].szValue =__USER_AGENT_STRING; nlhr->headers[2].szName ="Accept-Language"; nlhr->headers[2].szValue ="en-us,en;q=0.8"; -// nlhr->headers[3].szName ="Referer"; -// nlhr->headers[3].szValue ="http://www.imageshack.us/upload_api.php"; + int i=3; + for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ + if(!(iter->flags&HTTPFF_HEADER)) break; + nlhr->headers[i].szName=(char*)iter->name; + nlhr->headers[i++].szValue=(char*)iter->value_str; + } } char* dataPos=nlhr->pData; size_t dataMax=0; for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ + if(iter->flags&HTTPFF_HEADER) continue; HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,2+sizeof(boundary)+40); memset(dataPos,'-',2); dataPos+=2; memcpy(dataPos,boundary,sizeof(boundary)); dataPos+=sizeof(boundary); diff --git a/plugins/SendScreenshotPlus/src/CSend.h b/plugins/SendScreenshotPlus/src/CSend.h index 16ab0f192e..e9e57a9199 100644 --- a/plugins/SendScreenshotPlus/src/CSend.h +++ b/plugins/SendScreenshotPlus/src/CSend.h @@ -42,8 +42,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define GC_RESULT_ERROR 202 #define GC_RESULT_NOSESSION 209 -#define SS_ERR_INIT LPGENT("Unable to initiate %s.") -#define SS_ERR_MAPI LPGENT("MAPI error (%i):\n%s.") +const TCHAR SS_ERR_INIT[] =LPGENT("Unable to initiate %s."); +const TCHAR SS_ERR_MAPI[] =LPGENT("MAPI error (%i):\n%s."); +const TCHAR SS_ERR_RESPONSE[] =LPGENT("Unknown response from %s (%i)"); +const TCHAR SS_ERR_NORESPONSE[] =LPGENT("Got no response from %s (%i)"); //--------------------------------------------------------------------------- class CSend { @@ -102,15 +104,17 @@ class CSend { /// HTTP upload helper stuff enum HTTPFormFlags{ + HTTPFF_HEADER=0x80, HTTPFF_TEXT =0x00, HTTPFF_8BIT =0x01, HTTPFF_FILE =0x02, HTTPFF_INT =0x04, }; + #define HTTPFORM_HEADER(str) str,HTTPFF_HEADER #define HTTPFORM_TEXT(str) str,HTTPFF_TEXT #define HTTPFORM_8BIT(str) str,HTTPFF_8BIT #define HTTPFORM_FILE(str) str,HTTPFF_FILE - #define HTTPFORM_INT(int) (const char*)int,HTTPFF_INT + #define HTTPFORM_INT(int) (const char*)(int),HTTPFF_INT struct HTTPFormData{ const char* name; union{ @@ -120,6 +124,9 @@ class CSend { int flags; }; static const char* GetHTMLContent(char* str, const char* startTag, const char* endTag); /// changes "str", can be successfully used only once + static int GetJSONString(const char* json, size_t jsonlen, const char* variable, char* value, size_t valuesize); + static int GetJSONInteger(const char* json, size_t jsonlen, const char* variable,int defvalue); + static bool GetJSONBool(const char* json, size_t jsonlen, const char* variable); void HTTPFormDestroy(NETLIBHTTPREQUEST* nlhr); /// use to free data inside "nlhr" created by HTTPFormCreate int HTTPFormCreate(NETLIBHTTPREQUEST* nlhr,int requestType,char* url,HTTPFormData* frm,size_t frmNum); /// returns "0" on success, Exit() will be called on failure (stop processing) }; diff --git a/plugins/SendScreenshotPlus/src/CSendImageShack.cpp b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp index 9bd0ef0e0f..b4dc0dde92 100644 --- a/plugins/SendScreenshotPlus/src/CSendImageShack.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp @@ -30,17 +30,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "global.h" //--------------------------------------------------------------------------- -CSendImageShack::CSendImageShack(HWND Owner, MCONTACT hContact, bool bAsync) +CSendHost_ImageShack::CSendHost_ImageShack(HWND Owner, MCONTACT hContact, bool bAsync) : CSend(Owner, hContact, bAsync) { m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; m_pszSendTyp = LPGENT("Image upload"); } -CSendImageShack::~CSendImageShack(){ +CSendHost_ImageShack::~CSendHost_ImageShack(){ }; //--------------------------------------------------------------------------- -int CSendImageShack::Send() { +int CSendHost_ImageShack::Send() { if(!hNetlibUser){ /// check Netlib Error(SS_ERR_INIT, m_pszSendTyp); Exit(ACKRESULT_FAILED); @@ -49,6 +49,7 @@ int CSendImageShack::Send() { ZeroMemory(&m_nlhr, sizeof(m_nlhr)); char* tmp; tmp=mir_t2a(m_pszFile); HTTPFormData frm[]={ +// {"Referer",HTTPFORM_HEADER("http://www.imageshack.us/upload_api.php")}, {"fileupload",HTTPFORM_FILE(tmp)}, //{"rembar","yes"},// no info bar on thumb {"public","no"}, @@ -60,15 +61,15 @@ int CSendImageShack::Send() { return !m_bAsync; /// start upload thread if(m_bAsync){ - mir_forkthread(&CSendImageShack::SendThreadWrapper, this); + mir_forkthread(&CSendHost_ImageShack::SendThreadWrapper, this); return 0; } SendThread(); return 1; } -void CSendImageShack::SendThread() { - //send DATA and wait for m_nlreply +void CSendHost_ImageShack::SendThread() { + /// send DATA and wait for m_nlreply NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&m_nlhr); HTTPFormDestroy(&m_nlhr); if(reply){ @@ -104,15 +105,15 @@ void CSendImageShack::SendThread() { mir_free(err); } }else{ - Error(LPGENT("Upload server did not respond timely.")); + Error(SS_ERR_RESPONSE,m_pszSendTyp,reply->resultCode); } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); }else{ - Error(SS_ERR_INIT, m_pszSendTyp); + Error(SS_ERR_NORESPONSE,m_pszSendTyp,m_nlhr.resultCode); } Exit(ACKRESULT_FAILED); } -void CSendImageShack::SendThreadWrapper(void * Obj) { - reinterpret_cast<CSendImageShack*>(Obj)->SendThread(); +void CSendHost_ImageShack::SendThreadWrapper(void * Obj) { + reinterpret_cast<CSendHost_ImageShack*>(Obj)->SendThread(); } diff --git a/plugins/SendScreenshotPlus/src/CSendImageShack.h b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.h index f32e1cd0b0..30e1fdaa21 100644 --- a/plugins/SendScreenshotPlus/src/CSendImageShack.h +++ b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.h @@ -30,11 +30,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define _CSEND_IMAGESHACK_H //--------------------------------------------------------------------------- -class CSendImageShack : public CSend { +class CSendHost_ImageShack : public CSend { public: // Deklaration Standardkonstruktor/Standarddestructor - CSendImageShack(HWND Owner, MCONTACT hContact, bool bAsync); - ~CSendImageShack(); + CSendHost_ImageShack(HWND Owner, MCONTACT hContact, bool bAsync); + ~CSendHost_ImageShack(); int Send(); diff --git a/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp b/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp new file mode 100644 index 0000000000..1a4063e710 --- /dev/null +++ b/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp @@ -0,0 +1,95 @@ +/* + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2014 Miranda NG project (http://miranda-ng.org) + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. +*/ +#include "global.h" + +CSendHost_Imgur::CSendHost_Imgur(HWND Owner, MCONTACT hContact, bool bAsync) + : CSend(Owner,hContact,bAsync) +{ + m_EnableItem=SS_DLG_DESCRIPTION|SS_DLG_AUTOSEND|SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp=LPGENT("Image upload"); +} + +CSendHost_Imgur::~CSendHost_Imgur() +{} + +//--------------------------------------------------------------------------- +int CSendHost_Imgur::Send() +{ + if(!hNetlibUser){ /// check Netlib + Error(SS_ERR_INIT, m_pszSendTyp); + Exit(ACKRESULT_FAILED); + return !m_bAsync; + } + ZeroMemory(&m_nlhr, sizeof(m_nlhr)); + char* tmp; tmp=mir_t2a(m_pszFile); + HTTPFormData frm[]={ + {"Authorization",HTTPFORM_HEADER("Client-ID 2a7303d78abe041")}, + {"image",HTTPFORM_FILE(tmp)}, +// {"name",""},// filename (detected if multipart / form-data) +// {"title",""}, +// {"description",""}, + }; + int error=HTTPFormCreate(&m_nlhr,REQUEST_POST,"https://api.imgur.com/3/image",frm,sizeof(frm)/sizeof(HTTPFormData)); + mir_free(tmp); + if(error) + return !m_bAsync; + /// start upload thread + if(m_bAsync){ + mir_forkthread(&CSendHost_Imgur::SendThread, this); + return 0; + } + SendThread(this); + return 1; +} + +void CSendHost_Imgur::SendThread(void* obj) +{ + CSendHost_Imgur* self=(CSendHost_Imgur*)obj; + /// send DATA and wait for m_nlreply + NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)hNetlibUser,(LPARAM)&self->m_nlhr); + self->HTTPFormDestroy(&self->m_nlhr); + if(reply){ + if(reply->dataLength){ + char buf[128]; +// GetJSONInteger(reply->pData,reply->dataLength,"status",0) + if(GetJSONBool(reply->pData,reply->dataLength,"success")){ +// GetJSONString(reply->pData,reply->dataLength,"data[id]",buf,sizeof(buf)); + GetJSONString(reply->pData,reply->dataLength,"data[link]",buf,sizeof(buf)); +// GetJSONString(reply->pData,reply->dataLength,"[data][deletehash]",buf,sizeof(buf)); + mir_free(self->m_URL), self->m_URL=mir_strdup(buf); + char* ext=strrchr(self->m_URL,'.'); + if(ext){ + size_t thumblen=strlen(self->m_URL)+2; + mir_free(self->m_URLthumb), self->m_URLthumb=(char*)mir_alloc(thumblen); + thumblen=ext-self->m_URL; + memcpy(self->m_URLthumb,self->m_URL,thumblen); + self->m_URLthumb[thumblen]='m'; // 320x320, see http://api.imgur.com/models/image + strcpy(self->m_URLthumb+thumblen+1,self->m_URL+thumblen); + } + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + self->svcSendMsgExit(self->m_URL); return; + }else{ + self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,GetJSONInteger(reply->pData,reply->dataLength,"status",0)); + } + }else{ + self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,reply->resultCode); + } + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + }else{ + self->Error(SS_ERR_NORESPONSE,self->m_pszSendTyp,self->m_nlhr.resultCode); + } + self->Exit(ACKRESULT_FAILED); +} diff --git a/plugins/SendScreenshotPlus/src/CSendHost_imgur.h b/plugins/SendScreenshotPlus/src/CSendHost_imgur.h new file mode 100644 index 0000000000..84223ec9f4 --- /dev/null +++ b/plugins/SendScreenshotPlus/src/CSendHost_imgur.h @@ -0,0 +1,28 @@ +/* + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2014 Miranda NG project (http://miranda-ng.org) + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. +*/ +#ifndef _CSEND_HOST_IMGUR_H +#define _CSEND_HOST_IMGUR_H +class CSendHost_Imgur : public CSend { +// API: http://api.imgur.com/endpoints/image + public: + CSendHost_Imgur(HWND Owner, MCONTACT hContact, bool bAsync); + ~CSendHost_Imgur(); + int Send(); + protected: + NETLIBHTTPREQUEST m_nlhr; + static void SendThread(void* obj); +}; +#endif diff --git a/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp index 6a2c7fe48a..73830c7052 100644 --- a/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp @@ -63,7 +63,7 @@ int CSendHost_UploadPie::Send() void CSendHost_UploadPie::SendThread(void* obj) { CSendHost_UploadPie* self=(CSendHost_UploadPie*)obj; - //send DATA and wait for m_nlreply + /// send DATA and wait for m_nlreply NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)hNetlibUser,(LPARAM)&self->m_nlhr); self->HTTPFormDestroy(&self->m_nlhr); if(reply){ @@ -96,11 +96,11 @@ void CSendHost_UploadPie::SendThread(void* obj) mir_free(werr); } }else{ - self->Error(LPGENT("Upload server did not respond timely.")); + self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,reply->resultCode); } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); }else{ - self->Error(SS_ERR_INIT, self->m_pszSendTyp); + self->Error(SS_ERR_NORESPONSE,self->m_pszSendTyp,self->m_nlhr.resultCode); } self->Exit(ACKRESULT_FAILED); } diff --git a/plugins/SendScreenshotPlus/src/Main.cpp b/plugins/SendScreenshotPlus/src/Main.cpp index 58f5f8819e..fc69925c58 100644 --- a/plugins/SendScreenshotPlus/src/Main.cpp +++ b/plugins/SendScreenshotPlus/src/Main.cpp @@ -275,7 +275,7 @@ INT_PTR service_EditBitmap(WPARAM wParam, LPARAM lParam) { // lParam = (HANDLE)contact (can be null) INT_PTR service_Send2ImageShack(WPARAM wParam, LPARAM lParam) { char* result = NULL; - CSendImageShack* cSend = new CSendImageShack(NULL, lParam, false); + CSendHost_ImageShack* cSend = new CSendHost_ImageShack(NULL, lParam, false); cSend->m_bDeleteAfterSend = false; cSend->SetFile((char*)wParam); if (lParam != NULL) { diff --git a/plugins/SendScreenshotPlus/src/UMainForm.cpp b/plugins/SendScreenshotPlus/src/UMainForm.cpp index 6abf446e60..859fd0a9cc 100644 --- a/plugins/SendScreenshotPlus/src/UMainForm.cpp +++ b/plugins/SendScreenshotPlus/src/UMainForm.cpp @@ -315,6 +315,7 @@ void TfrmMain::wmInitdialog(WPARAM wParam, LPARAM lParam) { ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (30m)")), SS_UPLOADPIE_30M); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1d)")), SS_UPLOADPIE_1D); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1w)")), SS_UPLOADPIE_1W); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("imgur")), SS_IMGUR); ComboBox_SelectItemData (hCtrl, -1, m_opt_cboxSendBy); //use Workaround for MS bug ComboBox_SelectItemData } /// init footer options @@ -832,7 +833,7 @@ void TfrmMain::cboxSendByChange() { m_cSend = new CSendDropbox(m_hWnd, m_hContact, false); break; case SS_IMAGESHACK: //"ImageShack" - m_cSend = new CSendImageShack(m_hWnd, m_hContact, true); + m_cSend = new CSendHost_ImageShack(m_hWnd, m_hContact, true); break; case SS_UPLOADPIE_30M: //"Upload Pie (30 minutes)" m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true,1); @@ -843,6 +844,9 @@ void TfrmMain::cboxSendByChange() { case SS_UPLOADPIE_1W: //"Upload Pie (1 week)" m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true,5); break; + case SS_IMGUR: + m_cSend = new CSendHost_Imgur(m_hWnd, m_hContact, true); + break; default: //SS_JUSTSAVE - "Just save it " m_cSend = NULL; break; diff --git a/plugins/SendScreenshotPlus/src/UMainForm.h b/plugins/SendScreenshotPlus/src/UMainForm.h index c5906b2f1d..b6ba02ddd3 100644 --- a/plugins/SendScreenshotPlus/src/UMainForm.h +++ b/plugins/SendScreenshotPlus/src/UMainForm.h @@ -39,6 +39,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define SS_UPLOADPIE_30M 7 #define SS_UPLOADPIE_1D 8 #define SS_UPLOADPIE_1W 9 +#define SS_IMGUR 10 // Used for our own cheap TrackMouseEvent #define BUTTON_POLLDELAY 50 diff --git a/plugins/SendScreenshotPlus/src/global.h b/plugins/SendScreenshotPlus/src/global.h index d0914b4a00..9c822d3f98 100644 --- a/plugins/SendScreenshotPlus/src/global.h +++ b/plugins/SendScreenshotPlus/src/global.h @@ -90,8 +90,9 @@ using namespace std; #include "CSendFTPFile.h" #include "CSendHTTPServer.h" #include "CSendDropbox.h" -#include "CSendImageShack.h" +#include "CSendHost_ImageShack.h" #include "CSendHost_uploadpie.h" +#include "CSendHost_imgur.h" #include "DevKey.h" #include "UMainForm.h" #include "UAboutForm.h" diff --git a/plugins/SendScreenshotPlus/src/version.h b/plugins/SendScreenshotPlus/src/version.h index 34c726289c..eaf9ca7683 100644 --- a/plugins/SendScreenshotPlus/src/version.h +++ b/plugins/SendScreenshotPlus/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 8 -#define __RELEASE_NUM 5 -#define __BUILD_NUM 2 +#define __RELEASE_NUM 6 +#define __BUILD_NUM 0 #include <stdver.h> |