Ejemplo n.º 1
0
void CToxProto::OnGotFriendAvatarInfo(Tox *tox, int32_t number, uint8_t format, uint8_t *hash, void *arg)
{
	CToxProto *proto = (CToxProto*)arg;

	MCONTACT hContact = proto->FindContact(number);
	if (hContact)
	{
		std::tstring path = proto->GetAvatarFilePath(hContact);
		if (format == TOX_AVATAR_FORMAT_NONE)
		{
			proto->delSetting(hContact, TOX_SETTINGS_AVATAR_HASH);
			proto->ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, 0, 0);
			if (IsFileExists(path))
			{
				DeleteFile(path.c_str());
			}
		}
		else
		{
			DBVARIANT dbv;
			if (!db_get(hContact, proto->m_szModuleName, TOX_SETTINGS_AVATAR_HASH, &dbv))
			{
				if (memcmp(hash, dbv.pbVal, TOX_HASH_LENGTH) != 0)
				{
					tox_request_avatar_data(proto->tox, number);
				}
				db_free(&dbv);
			}
			else
			{
				tox_request_avatar_data(proto->tox, number);
			}
		}
	}
}
Ejemplo n.º 2
0
void Core::onAvatarInfoCallback(Tox*, int32_t friendnumber, uint8_t format,
                                uint8_t* hash, void* _core)
{
    Core* core = static_cast<Core*>(_core);

    if (format == TOX_AVATAR_FORMAT_NONE)
    {
        qDebug() << "Core: Got null avatar info from" << core->getFriendUsername(friendnumber);
        emit core->friendAvatarRemoved(friendnumber);
        QFile::remove(QDir(Settings::getInstance().getSettingsDirPath()).filePath("avatars/"+core->getFriendAddress(friendnumber).left(64)+".png"));
        QFile::remove(QDir(Settings::getInstance().getSettingsDirPath()).filePath("avatars/"+core->getFriendAddress(friendnumber).left(64)+".hash"));
    }
    else
    {
        QByteArray oldHash = Settings::getInstance().getAvatarHash(core->getFriendAddress(friendnumber));
        if (QByteArray((char*)hash, TOX_HASH_LENGTH) != oldHash) 
        // comparison failed miserably if I didn't convert hash to QByteArray
        {
            qDebug() << "Core: Got new avatar info from" << core->getFriendUsername(friendnumber);
            tox_request_avatar_data(core->tox, friendnumber);
        }
        else
            qDebug() << "Core: Got same avatar info from" << core->getFriendUsername(friendnumber);
    }
}