diff options
| author | George Hazan <ghazan@miranda.im> | 2020-08-18 18:09:03 +0300 | 
|---|---|---|
| committer | George Hazan <ghazan@miranda.im> | 2020-08-18 18:09:03 +0300 | 
| commit | 0dbba78f4fb4a05945be5aab0848c01881b8ac12 (patch) | |
| tree | 22202337f33799f5aef325ac24bae201f724e939 /protocols/Facebook/src | |
| parent | 5793d48b5574e234397f6cb7a96997342ba44ac0 (diff) | |
SmileyAdd:
- fixes #2545 (SmileyAdd: missing assigned per-contact smileys categories);
- unused service MS_SMILEYADD_SHOWSELECTION removed;
- name conflict resolution;
- version bump;
Diffstat (limited to 'protocols/Facebook/src')
| -rw-r--r-- | protocols/Facebook/src/proto.cpp | 7 | ||||
| -rw-r--r-- | protocols/Facebook/src/server.cpp | 47 | 
2 files changed, 34 insertions, 20 deletions
diff --git a/protocols/Facebook/src/proto.cpp b/protocols/Facebook/src/proto.cpp index d2011579de..1cf3d3156c 100644 --- a/protocols/Facebook/src/proto.cpp +++ b/protocols/Facebook/src/proto.cpp @@ -133,10 +133,15 @@ FacebookProto::~FacebookProto()  void FacebookProto::OnModulesLoaded()  { -	CMStringW wszPath(FORMAT, L"%s\\%S\\Stickers\\*.png", VARSW(L"%miranda_avatarcache%").get(), m_szModuleName); +	VARSW wszCache(L"%miranda_avatarcache%"); + +	CMStringW wszPath(FORMAT, L"%s\\%S\\Stickers\\*.png", wszCache.get(), m_szModuleName);  	SMADD_CONT cont = { 2, m_szModuleName, wszPath };  	CallService(MS_SMILEYADD_LOADCONTACTSMILEYS, 0, LPARAM(&cont)); +	wszPath.Format(L"%s\\%S\\Stickers\\*.webp", wszCache.get(), m_szModuleName); +	cont.path = wszPath; +	CallService(MS_SMILEYADD_LOADCONTACTSMILEYS, 0, LPARAM(&cont));  }  void FacebookProto::OnShutdown() diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index 67e0ba323e..036c8f2db4 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -96,8 +96,8 @@ FacebookUser* FacebookProto::AddContact(const CMStringW &wszId, bool bTemp)  		Contact_RemoveFromList(hContact);  	auto* ret = new FacebookUser(_wtoi64(wszId), hContact); -  	m_users.insert(ret); +  	return ret;  } @@ -527,7 +527,7 @@ void FacebookProto::OnPublishPresence(FbThriftReader &rdr)  		rdr.readField(fieldType, fieldId);  		assert(fieldType == FB_THRIFT_TYPE_I64); -		assert(fieldId == 1 || fieldId == 4); +		assert(fieldId == 1 || fieldId == 3 || fieldId == 4);  		rdr.readInt64(timestamp);  		while (!rdr.isStop()) { @@ -710,7 +710,14 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root)  			bool bSuccess = false;  			CMStringW wszFileName(FORMAT, L"%s\\STK{%S}.png", wszPath.c_str(), stickerId.c_str()); -			if (GetFileAttributesW(wszFileName) == INVALID_FILE_ATTRIBUTES) { +			DWORD dwAttrib = GetFileAttributesW(wszFileName); +			if (dwAttrib == INVALID_FILE_ATTRIBUTES) { +				wszFileName.Format(L"%s\\STK{%S}.webp", wszPath.c_str(), stickerId.c_str()); +				dwAttrib = GetFileAttributesW(wszFileName); +			} + +			// new sticker +			if (dwAttrib == INVALID_FILE_ATTRIBUTES) {  				auto *pReq = CreateRequestGQL(FB_API_QUERY_STICKER);  				pReq << CHAR_PARAM("query_params", CMStringA(FORMAT, "{\"0\":[\"%s\"]}", stickerId.c_str()));  				pReq->CalcSig(); @@ -718,22 +725,24 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root)  				JsonReply reply(ExecuteRequest(pReq));  				if (!reply.error()) {  					for (auto &sticker : reply.data()) { -						for (auto &img : sticker["thread_image"]) { -							CMStringA szUrl(img.as_mstring()); - -							NETLIBHTTPREQUEST req = {}; -							req.cbSize = sizeof(req); -							req.flags = NLHRF_NODUMP | NLHRF_SSL | NLHRF_HTTP11 | NLHRF_REDIRECT; -							req.requestType = REQUEST_GET; -							req.szUrl = szUrl.GetBuffer(); - -							NETLIBHTTPREQUEST *pReply = Netlib_HttpTransaction(m_hNetlibUser, &req); -							if (pReply != nullptr && pReply->resultCode == 200 && pReply->pData && pReply->dataLength) { -								bSuccess = true; -								FILE *out = _wfopen(wszFileName, L"wb"); -								fwrite(pReply->pData, 1, pReply->dataLength, out); -								fclose(out); -							} +						std::string szUrl = sticker["animated_image"]["uri"].as_string(); +						if (szUrl.empty()) +							szUrl = sticker["thread_image"]["uri"].as_string(); +						else +							wszFileName.Format(L"%s\\STK{%S}.webp", wszPath.c_str(), stickerId.c_str()); + +						NETLIBHTTPREQUEST req = {}; +						req.cbSize = sizeof(req); +						req.flags = NLHRF_NODUMP | NLHRF_SSL | NLHRF_HTTP11 | NLHRF_REDIRECT; +						req.requestType = REQUEST_GET; +						req.szUrl = (char*)szUrl.c_str(); + +						NETLIBHTTPREQUEST *pReply = Netlib_HttpTransaction(m_hNetlibUser, &req); +						if (pReply != nullptr && pReply->resultCode == 200 && pReply->pData && pReply->dataLength) { +							bSuccess = true; +							FILE *out = _wfopen(wszFileName, L"wb"); +							fwrite(pReply->pData, 1, pReply->dataLength, out); +							fclose(out);  						}  					}  				}  | 
