void EntryBase::SetAvatar (const QByteArray& data) { if (!data.size ()) SetAvatar (QImage ()); else SetAvatar (QImage::fromData (data)); }
void EntryBase::SetVCard (const QXmppVCardIq& vcard, bool initial) { VCardIq_ = vcard; VCardPhotoHash_ = VCardIq_.photo ().isEmpty () ? QByteArray () : QCryptographicHash::hash (VCardIq_.photo (), QCryptographicHash::Sha1); QString text = FormatRawInfo (vcard); if (!text.isEmpty ()) text = QString ("gloox VCard:\n") + text; SetRawInfo (text); if (!vcard.photo ().isEmpty ()) { SetAvatar (vcard.photo ()); Core::Instance ().GetAvatarsStorage ()->StoreAvatar (Avatar_, VCardPhotoHash_.toHex ()); } if (VCardDialog_) VCardDialog_->UpdateInfo (vcard); if (!initial) Core::Instance ().ScheduleSaveRoster (10000); emit vcardUpdated (); }
void EntryBase::CheckVCardUpdate (const QXmppPresence& pres) { auto conn = Account_->GetClientConnection (); if (!conn->GetInfoReqPolicyManager ()->IsRequestAllowed (InfoRequest::VCard, this)) return; auto fetchVCard = [this, conn] { QPointer<EntryBase> ptr (this); conn->FetchVCard (GetJID (), [ptr] (const QXmppVCardIq& iq) { if (ptr) ptr->SetVCard (iq); }); }; const auto& vcardUpdate = pres.vCardUpdateType (); if (vcardUpdate == QXmppPresence::VCardUpdateNoPhoto) { if (!Avatar_.isNull ()) SetAvatar (QImage {}); } else if (vcardUpdate == QXmppPresence::VCardUpdateValidPhoto) { if (pres.photoHash () != VCardPhotoHash_) fetchVCard (); } else if (pres.type () == QXmppPresence::Available && !HasBlindlyRequestedVCard_) { fetchVCard (); HasBlindlyRequestedVCard_ = true; } }
void EntryBase::SetVCard (const QXmppVCardIq& vcard, bool initial) { #if QXMPP_VERSION >= 0x000801 if (vcard == VCardIq_) return; #endif VCardIq_ = vcard; VCardPhotoHash_ = VCardIq_.photo ().isEmpty () ? QByteArray () : QCryptographicHash::hash (VCardIq_.photo (), QCryptographicHash::Sha1); if (!vcard.photo ().isEmpty ()) { SetAvatar (vcard.photo ()); Core::Instance ().GetAvatarsStorage ()->StoreAvatar (Avatar_, VCardPhotoHash_.toHex ()); } if (VCardDialog_) VCardDialog_->UpdateInfo (vcard); if (!initial && GetEntryType () == ICLEntry::EntryType::Chat) Core::Instance ().ScheduleSaveRoster (10000); emit vcardUpdated (); }
static void TlenUploadAvatarRequestThread(void *ptr) { TLENUPLOADAVATARTHREADDATA *data = (TLENUPLOADAVATARTHREADDATA *) ptr; NETLIBHTTPREQUEST *req = data->req; NETLIBHTTPREQUEST *resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)data->proto->m_hNetlibUser, (LPARAM)req); if (checkUploadAvatarResponse(data->proto, resp)) { CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); SetAvatar(data->proto, NULL, NULL, data->data, data->length, PA_FORMAT_PNG); } mir_free(req->szUrl); mir_free(req->headers); mir_free(req->pData); mir_free(req); mir_free(data->data); mir_free(data); }
static void TlenUploadAvatarRequestThread(void *ptr) { NETLIBHTTPREQUEST *resp; TlenUploadAvatarThreadData * threadData = (TlenUploadAvatarThreadData *) ptr; NETLIBHTTPREQUEST *req = threadData->request; resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)req); if (resp != NULL) { CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, (WPARAM)0, (LPARAM)resp); SetAvatar(NULL, NULL, threadData->data, threadData->length, PA_FORMAT_PNG); } mir_free(req->szUrl); mir_free(req->headers); mir_free(req->pData); mir_free(req); mir_free(threadData->data); mir_free(threadData); }
static void TlenGetAvatarThread(void *ptr) { TLEN_LIST_ITEM *item = NULL; NETLIBHTTPREQUEST req; NETLIBHTTPREQUEST *resp; TLENGETAVATARTHREADDATA *data = (TLENGETAVATARTHREADDATA *)ptr; HANDLE hContact = data->hContact; char *request; char *login = NULL; if (hContact != NULL) { char *jid = TlenJIDFromHContact(data->proto, hContact); login = TlenNickFromJID(jid); item = TlenListGetItemPtr(data->proto, LIST_ROSTER, jid); mir_free(jid); } else { login = mir_strdup(data->proto->threadData->username); } if ((data->proto->threadData != NULL && hContact == NULL) || item != NULL) { DWORD format = PA_FORMAT_UNKNOWN; if (item != NULL) { item->newAvatarDownloading = TRUE; } request = replaceTokens(data->proto->threadData->tlenConfig.mailBase, data->proto->threadData->tlenConfig.avatarGet, login, data->proto->threadData->avatarToken, 0, 0); ZeroMemory(&req, sizeof(req)); req.cbSize = sizeof(req); req.requestType = data->proto->threadData->tlenConfig.avatarGetMthd; req.flags = 0; req.headersCount = 0; req.headers = NULL; req.dataLength = 0; req.szUrl = request; resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)data->proto->m_hNetlibUser, (LPARAM)&req); if (item != NULL) { item->newAvatarDownloading = FALSE; } if (resp != NULL) { if (resp->resultCode/100 == 2) { if (resp->dataLength > 0) { int i; for (i=0; i<resp->headersCount; i++ ) { if (!strcmpi(resp->headers[i].szName, "Content-Type")) { if (!strcmpi(resp->headers[i].szValue, "image/png")) format = PA_FORMAT_PNG; else if (!strcmpi(resp->headers[i].szValue, "image/x-png")) format = PA_FORMAT_PNG; else if (!strcmpi(resp->headers[i].szValue, "image/jpeg")) format = PA_FORMAT_JPEG; else if (!strcmpi(resp->headers[i].szValue, "image/jpg")) format = PA_FORMAT_JPEG; else if (!strcmpi(resp->headers[i].szValue, "image/gif")) format = PA_FORMAT_GIF; else if (!strcmpi(resp->headers[i].szValue, "image/bmp")) format = PA_FORMAT_BMP; break; } } SetAvatar(data->proto, hContact, item, resp->pData, resp->dataLength, format); } else { RemoveAvatar(data->proto, hContact); } } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); } mir_free(request); mir_free(login); } if (hContact == NULL) { getAvatarMutex = 0; } mir_free(data); }