diff --git a/README.md b/README.md index 6f13e095a..39317b54a 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ However, it is not a fork. - Video calls - Tox DNS - Translations in various languages +- Avatars

Downloads

diff --git a/core.cpp b/core.cpp index d63461c07..e63ec890b 100644 --- a/core.cpp +++ b/core.cpp @@ -216,9 +216,10 @@ void Core::start() QByteArray data; QBuffer buffer(&data); buffer.open(QIODevice::WriteOnly); - pic.save(&buffer); + pic.save(&buffer, "PNG"); buffer.close(); - tox_set_avatar(tox, TOX_AVATARFORMAT_PNG, (uint8_t*)data.constData(), data.size()); + if (tox_set_avatar(tox, TOX_AVATARFORMAT_PNG, (uint8_t*)data.constData(), data.size()) != 0) + qWarning() << "Core:start: Error setting avatar, size:"<(core)->tox, friendId); + emit static_cast(core)->friendStatusChanged(friendId, status); } @@ -449,16 +454,25 @@ void Core::onFileDataCallback(Tox*, int32_t friendnumber, uint8_t filenumber, co file->filesize, file->bytesSent, ToxFile::RECEIVING); } -void Core::onAvatarInfoCallback(Tox* tox, int32_t friendnumber, uint8_t format, - uint8_t *hash, void *userdata) +void Core::onAvatarInfoCallback(Tox*, int32_t friendnumber, uint8_t format, + uint8_t *, void *) { - qDebug() << "Core: Got avatar info from "<(core)->friendAvatarChanged(friendnumber, pic); + } } void Core::acceptFriendRequest(const QString& userId) diff --git a/core.h b/core.h index 7c3a49a93..fb9207195 100644 --- a/core.h +++ b/core.h @@ -106,6 +106,7 @@ signals: void friendStatusMessageChanged(int friendId, const QString& message); void friendUsernameChanged(int friendId, const QString& username); void friendTypingChanged(int friendId, bool isTyping); + void friendAvatarChanged(int friendId, const QPixmap& pic); void friendStatusMessageLoaded(int friendId, const QString& message); void friendUsernameLoaded(int friendId, const QString& username); diff --git a/widget/form/chatform.cpp b/widget/form/chatform.cpp index f8b950b7b..6863107bb 100644 --- a/widget/form/chatform.cpp +++ b/widget/form/chatform.cpp @@ -464,3 +464,11 @@ void ChatForm::onFileSendFailed(int FriendId, const QString &fname) addSystemInfoMessage("File: \"" + fname + "\" failed to send.", "red"); } + +void ChatForm::onAvatarChange(int FriendId, const QPixmap &pic) +{ + if (FriendId != f->friendId) + return; + + avatarLabel->setPixmap(pic); +} diff --git a/widget/form/chatform.h b/widget/form/chatform.h index 43681562c..fd270fd64 100644 --- a/widget/form/chatform.h +++ b/widget/form/chatform.h @@ -23,6 +23,7 @@ struct Friend; class FileTransferInstance; class NetCamView; +class QPixmap; class ChatForm : public GenericChatForm { @@ -55,6 +56,7 @@ public slots: void onAvPeerTimeout(int FriendId, int CallId); void onAvMediaChange(int FriendId, int CallId, bool video); void onMicMuteToggle(); + void onAvatarChange(int FriendId, const QPixmap& pic); private slots: void onSendTriggered(); diff --git a/widget/friendlistwidget.h b/widget/friendlistwidget.h index dae6b1c61..f8c3adf8c 100644 --- a/widget/friendlistwidget.h +++ b/widget/friendlistwidget.h @@ -23,6 +23,7 @@ class QLayout; class QGridLayout; +class QPixmap; class FriendListWidget : public QWidget { diff --git a/widget/friendwidget.cpp b/widget/friendwidget.cpp index e1744002d..60b655c96 100644 --- a/widget/friendwidget.cpp +++ b/widget/friendwidget.cpp @@ -190,3 +190,11 @@ void FriendWidget::resetEventFlags() Friend* f = FriendList::findFriend(friendId); f->hasNewEvents = 0; } + +void FriendWidget::onAvatarChange(int FriendId, const QPixmap& pic) +{ + if (FriendId != friendId) + return; + + avatar.setPixmap(pic); +} diff --git a/widget/friendwidget.h b/widget/friendwidget.h index da158e68d..c693c6199 100644 --- a/widget/friendwidget.h +++ b/widget/friendwidget.h @@ -22,6 +22,8 @@ #include "genericchatroomwidget.h" #include "croppinglabel.h" +class QPixmap; + struct FriendWidget : public GenericChatroomWidget { Q_OBJECT @@ -39,6 +41,9 @@ signals: void removeFriend(int friendId); void copyFriendIdToClipboard(int friendId); +public slots: + void onAvatarChange(int FriendId, const QPixmap& pic); + public: int friendId; QLabel avatar, statusPic; diff --git a/widget/widget.cpp b/widget/widget.cpp index 5b5ba6c87..834a68412 100644 --- a/widget/widget.cpp +++ b/widget/widget.cpp @@ -168,6 +168,7 @@ Widget::Widget(QWidget *parent) qRegisterMetaType("uint8_t"); qRegisterMetaType("int32_t"); qRegisterMetaType("int64_t"); + qRegisterMetaType("QPixmap"); qRegisterMetaType("ToxFile"); qRegisterMetaType("ToxFile::FileDirection"); @@ -435,7 +436,6 @@ void Widget::setStatusMessage(const QString &statusMessage) void Widget::addFriend(int friendId, const QString &userId) { - qDebug() << "Widget: Adding friend with id "+userId; Friend* newfriend = FriendList::addFriend(friendId, userId); QLayout* layout = contactListWidget->getFriendLayout(Status::Offline); @@ -463,6 +463,8 @@ void Widget::addFriend(int friendId, const QString &userId) connect(core, &Core::avRequestTimeout, newfriend->chatForm, &ChatForm::onAvRequestTimeout); connect(core, &Core::avPeerTimeout, newfriend->chatForm, &ChatForm::onAvPeerTimeout); connect(core, &Core::avMediaChange, newfriend->chatForm, &ChatForm::onAvMediaChange); + connect(core, &Core::friendAvatarChanged, newfriend->chatForm, &ChatForm::onAvatarChange); + connect(core, &Core::friendAvatarChanged, newfriend->widget, &FriendWidget::onAvatarChange); } void Widget::addFriendFailed(const QString&)