mirror of https://github.com/Nheko-Reborn/nheko
parent
b8c8fed655
commit
95c492bad8
@ -0,0 +1,47 @@ |
||||
/*
|
||||
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <QImage> |
||||
#include <QObject> |
||||
#include <QSharedPointer> |
||||
#include <QUrl> |
||||
|
||||
#include "MatrixClient.h" |
||||
#include "TimelineItem.h" |
||||
|
||||
class AvatarProvider : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
static void init(QSharedPointer<MatrixClient> client); |
||||
static void resolve(const QString &userId, TimelineItem *item); |
||||
static void setAvatarUrl(const QString &userId, const QUrl &url); |
||||
|
||||
static void clear(); |
||||
|
||||
private: |
||||
static void updateAvatar(const QString &uid, const QImage &img); |
||||
|
||||
static QSharedPointer<MatrixClient> client_; |
||||
static QMap<QString, QList<TimelineItem *>> toBeResolved_; |
||||
|
||||
static QMap<QString, QImage> userAvatars_; |
||||
static QMap<QString, QUrl> avatarUrls_; |
||||
}; |
@ -0,0 +1,83 @@ |
||||
/*
|
||||
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "AvatarProvider.h" |
||||
|
||||
QSharedPointer<MatrixClient> AvatarProvider::client_; |
||||
|
||||
QMap<QString, QImage> AvatarProvider::userAvatars_; |
||||
QMap<QString, QUrl> AvatarProvider::avatarUrls_; |
||||
QMap<QString, QList<TimelineItem *>> AvatarProvider::toBeResolved_; |
||||
|
||||
void AvatarProvider::init(QSharedPointer<MatrixClient> client) |
||||
{ |
||||
client_ = client; |
||||
|
||||
connect(client_.data(), &MatrixClient::userAvatarRetrieved, &AvatarProvider::updateAvatar); |
||||
} |
||||
|
||||
void AvatarProvider::updateAvatar(const QString &uid, const QImage &img) |
||||
{ |
||||
if (toBeResolved_.contains(uid)) { |
||||
auto items = toBeResolved_[uid]; |
||||
|
||||
// Update all the timeline items with the resolved avatar.
|
||||
for (const auto item : items) |
||||
item->setUserAvatar(img); |
||||
|
||||
toBeResolved_.remove(uid); |
||||
} |
||||
|
||||
userAvatars_.insert(uid, img); |
||||
} |
||||
|
||||
void AvatarProvider::resolve(const QString &userId, TimelineItem *item) |
||||
{ |
||||
if (userAvatars_.contains(userId)) { |
||||
auto img = userAvatars_[userId]; |
||||
|
||||
item->setUserAvatar(img); |
||||
|
||||
return; |
||||
} |
||||
|
||||
if (avatarUrls_.contains(userId)) { |
||||
// Add the current timeline item to the waiting list for this avatar.
|
||||
if (!toBeResolved_.contains(userId)) { |
||||
client_->fetchUserAvatar(userId, avatarUrls_[userId]); |
||||
|
||||
QList<TimelineItem *> timelineItems; |
||||
timelineItems.push_back(item); |
||||
|
||||
toBeResolved_.insert(userId, timelineItems); |
||||
} else { |
||||
toBeResolved_[userId].push_back(item); |
||||
} |
||||
} |
||||
} |
||||
|
||||
void AvatarProvider::setAvatarUrl(const QString &userId, const QUrl &url) |
||||
{ |
||||
avatarUrls_.insert(userId, url); |
||||
} |
||||
|
||||
void AvatarProvider::clear() |
||||
{ |
||||
userAvatars_.clear(); |
||||
avatarUrls_.clear(); |
||||
toBeResolved_.clear(); |
||||
} |
Loading…
Reference in new issue