Skip to content
Snippets Groups Projects
Verified Commit be388daa authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Show avatar of other user, if the room has none

parent b1c74490
No related branches found
No related tags found
No related merge requests found
Pipeline #1048 passed
......@@ -361,6 +361,21 @@ std::string Room::name() const {
return QCoreApplication::translate("Room", "Empty Room").toStdString();
}
QString Room::avatarUrl() {
if (!avatar_url_.isEmpty())
return avatar_url_;
else if (members.size() == 2) {
for (const auto &m : members) {
if (m != http::client().user_id().to_string()) {
return QString::fromStdString(memberInfos.at(m).avatar_url);
}
}
}
return "";
}
void Room::addEvents(std::vector<mtx::events::collections::StateEvents> state,
std::vector<mtx::events::collections::TimelineEvents> timeline, std::string prev_batch,
std::string next_batch) {
......@@ -533,16 +548,16 @@ void Room::sendTextMessage(QString message) {
mtx::events::msg::Text text;
text.body = message.trimmed().toStdString();
http::client().send_room_message(
this->id, http::client().generate_txn_id(), text,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
http::client().send_room_message(this->id, http::client().generate_txn_id(), text,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
qDebug() << "send event as: $" << QString::fromStdString(res.event_id.to_string());
});
qDebug()
<< "send event as: $" << QString::fromStdString(res.event_id.to_string());
});
}
void Room::sendImages(QList<QUrl> images, QList<QString> mimetypes) {
......@@ -594,52 +609,52 @@ void Room::sendAudio(QList<QUrl> files, QList<QString> mimetypes) {
for (int i = 0; i < files.size(); i++) {
QMediaPlayer *player = new QMediaPlayer(this);
connect(player, &QMediaPlayer::metaDataAvailableChanged, this,
[this, player, mimeType = mimetypes.at(i).toStdString(),
filename = files.at(i).fileName().toStdString(),
localFile = files.at(i).toLocalFile()](bool available) {
player->deleteLater();
if (!available)
return;
auto file = QFile(localFile);
if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file" << localFile;
return;
}
auto temp = file.readAll();
std::string data(temp.data(), temp.size());
mtx::events::msg::Audio audio = {};
audio.msgtype = "m.audio";
audio.body = filename;
audio.info.mimetype = mimeType;
audio.info.size = temp.size();
audio.info.duration = player->metaData(QMediaMetaData::Duration).value<qint64>();
http::client().upload(
data, mimeType, filename,
[this, audio](const mtx::responses::ContentURI &uri, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to upload audio: " << *err;
return;
}
auto audio2 = audio;
audio2.url = uri.content_uri;
http::client().send_room_message(
this->id, http::client().generate_txn_id(), audio2,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
connect(
player, &QMediaPlayer::metaDataAvailableChanged, this,
[this, player, mimeType = mimetypes.at(i).toStdString(), filename = files.at(i).fileName().toStdString(),
localFile = files.at(i).toLocalFile()](bool available) {
player->deleteLater();
if (!available)
return;
auto file = QFile(localFile);
if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file" << localFile;
return;
}
auto temp = file.readAll();
std::string data(temp.data(), temp.size());
mtx::events::msg::Audio audio = {};
audio.msgtype = "m.audio";
audio.body = filename;
audio.info.mimetype = mimeType;
audio.info.size = temp.size();
audio.info.duration = player->metaData(QMediaMetaData::Duration).value<qint64>();
http::client().upload(data, mimeType, filename,
[this, audio](const mtx::responses::ContentURI &uri, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to upload audio: " << *err;
return;
}
qDebug() << "send event as: $" << QString::fromStdString(res.event_id.to_string());
});
});
});
auto audio2 = audio;
audio2.url = uri.content_uri;
http::client().send_room_message(
this->id, http::client().generate_txn_id(), audio2,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
qDebug() << "send event as: $"
<< QString::fromStdString(res.event_id.to_string());
});
});
});
player->setMedia(files[i]);
}
......@@ -649,56 +664,56 @@ void Room::sendVideos(QList<QUrl> files, QList<QString> mimetypes) {
for (int i = 0; i < files.size(); i++) {
QMediaPlayer *player = new QMediaPlayer(this);
connect(player, &QMediaPlayer::metaDataAvailableChanged, this,
[this, player, mimeType = mimetypes.at(i).toStdString(),
filename = files.at(i).fileName().toStdString(),
localFile = files.at(i).toLocalFile()](bool available) {
player->deleteLater();
if (!available)
return;
auto file = QFile(localFile);
if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file" << localFile;
return;
}
auto temp = file.readAll();
std::string data(temp.data(), temp.size());
mtx::events::msg::Video video = {};
video.msgtype = "m.video";
video.body = filename;
video.info.mimetype = mimeType;
video.info.size = temp.size();
video.info.duration = player->metaData(QMediaMetaData::Duration).value<qint64>();
video.info.h = player->metaData(QMediaMetaData::Resolution).value<QSize>().height();
video.info.w = player->metaData(QMediaMetaData::Resolution).value<QSize>().width();
// TODO: also upload thumbnail
http::client().upload(
data, mimeType, filename,
[this, video](const mtx::responses::ContentURI &uri, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to upload video: " << *err;
return;
}
auto video2 = video;
video2.url = uri.content_uri;
http::client().send_room_message(
this->id, http::client().generate_txn_id(), video2,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
connect(
player, &QMediaPlayer::metaDataAvailableChanged, this,
[this, player, mimeType = mimetypes.at(i).toStdString(), filename = files.at(i).fileName().toStdString(),
localFile = files.at(i).toLocalFile()](bool available) {
player->deleteLater();
if (!available)
return;
auto file = QFile(localFile);
if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file" << localFile;
return;
}
auto temp = file.readAll();
std::string data(temp.data(), temp.size());
mtx::events::msg::Video video = {};
video.msgtype = "m.video";
video.body = filename;
video.info.mimetype = mimeType;
video.info.size = temp.size();
video.info.duration = player->metaData(QMediaMetaData::Duration).value<qint64>();
video.info.h = player->metaData(QMediaMetaData::Resolution).value<QSize>().height();
video.info.w = player->metaData(QMediaMetaData::Resolution).value<QSize>().width();
// TODO: also upload thumbnail
http::client().upload(data, mimeType, filename,
[this, video](const mtx::responses::ContentURI &uri, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to upload video: " << *err;
return;
}
qDebug() << "send event as: $" << QString::fromStdString(res.event_id.to_string());
});
});
});
auto video2 = video;
video2.url = uri.content_uri;
http::client().send_room_message(
this->id, http::client().generate_txn_id(), video2,
[this](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to send message: " << *err;
return;
}
qDebug() << "send event as: $"
<< QString::fromStdString(res.event_id.to_string());
});
});
});
player->setMedia(files[i]);
}
......
......@@ -189,7 +189,7 @@ struct Room : public QAbstractListModel {
avatar_url_ = url;
emit avatarChanged(avatar_url_);
}
QString avatarUrl() { return avatar_url_; }
QString avatarUrl();
void setIsInvite(bool isInvite) {
is_invite_ = isInvite;
emit inviteStatusChanged(is_invite_);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment