Add /ignore

This commit is contained in:
NepNep21 2023-12-11 22:29:36 -03:00
parent 791cb660b5
commit 4695bbb340
No known key found for this signature in database
GPG key ID: 818E86B41BD5C364
5 changed files with 28 additions and 1 deletions

View file

@ -97,6 +97,8 @@ CommandCompleter::data(const QModelIndex &index, int role) const
return QStringLiteral("/converttodm"); return QStringLiteral("/converttodm");
case ConvertToRoom: case ConvertToRoom:
return QStringLiteral("/converttoroom"); return QStringLiteral("/converttoroom");
case Ignore:
return QStringLiteral("/ignore");
default: default:
return {}; return {};
} }
@ -170,6 +172,8 @@ CommandCompleter::data(const QModelIndex &index, int role) const
return QStringLiteral("/converttodm"); return QStringLiteral("/converttodm");
case ConvertToRoom: case ConvertToRoom:
return QStringLiteral("/converttoroom"); return QStringLiteral("/converttoroom");
case Ignore:
return QStringLiteral("/ignore <@userid>");
default: default:
return {}; return {};
} }
@ -243,6 +247,8 @@ CommandCompleter::data(const QModelIndex &index, int role) const
return tr("Convert this room to a direct chat."); return tr("Convert this room to a direct chat.");
case ConvertToRoom: case ConvertToRoom:
return tr("Convert this direct chat into a room."); return tr("Convert this direct chat into a room.");
case Ignore:
return tr("Ignores a user.");
default: default:
return {}; return {};
} }

View file

@ -51,6 +51,7 @@ public:
Goto, Goto,
ConvertToDm, ConvertToDm,
ConvertToRoom, ConvertToRoom,
Ignore,
COUNT, COUNT,
}; };

View file

@ -30,6 +30,7 @@
#include "ChatPage.h" #include "ChatPage.h"
#include "EventAccessors.h" #include "EventAccessors.h"
#include "Logging.h" #include "Logging.h"
#include "MainWindow.h"
#include "MatrixClient.h" #include "MatrixClient.h"
#include "TimelineModel.h" #include "TimelineModel.h"
#include "TimelineViewManager.h" #include "TimelineViewManager.h"
@ -239,7 +240,8 @@ InputBar::updateTextContentProperties(const QString &t)
QStringLiteral("msgtype"), QStringLiteral("msgtype"),
QStringLiteral("goto"), QStringLiteral("goto"),
QStringLiteral("converttodm"), QStringLiteral("converttodm"),
QStringLiteral("converttoroom")}; QStringLiteral("converttoroom"),
QStringLiteral("ignore")};
bool hasInvalidCommand = !commandName.isNull() && !validCommands.contains(commandName); bool hasInvalidCommand = !commandName.isNull() && !validCommands.contains(commandName);
bool hasIncompleteCommand = hasInvalidCommand && '/' + commandName == t; bool hasIncompleteCommand = hasInvalidCommand && '/' + commandName == t;
@ -937,6 +939,16 @@ InputBar::command(const QString &command, QString args)
cache::getMembers(this->room->roomId().toStdString(), 0, -1)); cache::getMembers(this->room->roomId().toStdString(), 0, -1));
} else if (command == QLatin1String("converttoroom")) { } else if (command == QLatin1String("converttoroom")) {
utils::removeDirectFromRoom(this->room->roomId()); utils::removeDirectFromRoom(this->room->roomId());
} else if (command == QLatin1String("ignore")) {
QSharedPointer<UserProfile> user(
new UserProfile(QString(), args, TimelineViewManager::instance()));
connect(user.get(), &UserProfile::failedToFetchProfile, [args] {
MainWindow::instance()->showNotification(tr("Failed to fetch user %1").arg(args));
});
connect(user.get(), &UserProfile::globalUsernameRetrieved, [user](const QString &user_id) {
Q_UNUSED(user_id)
user->setIgnored(true);
});
} else { } else {
return false; return false;
} }

View file

@ -592,12 +592,18 @@ UserProfile::getGlobalProfileData()
emit avatarUrlChanged(); emit avatarUrlChanged();
}); });
connect(profProx.get(),
&UserProfileFetchProxy::failedToFetchProfile,
this,
&UserProfile::failedToFetchProfile);
http::client()->get_profile(userid_.toStdString(), http::client()->get_profile(userid_.toStdString(),
[prox = std::move(profProx), user = userid_.toStdString()]( [prox = std::move(profProx), user = userid_.toStdString()](
const mtx::responses::Profile &res, mtx::http::RequestErr err) { const mtx::responses::Profile &res, mtx::http::RequestErr err) {
if (err) { if (err) {
nhlog::net()->warn("failed to retrieve profile info for {}", nhlog::net()->warn("failed to retrieve profile info for {}",
user); user);
emit prox->failedToFetchProfile();
return; return;
} }

View file

@ -45,6 +45,7 @@ public:
signals: signals:
void profileFetched(mtx::responses::Profile); void profileFetched(mtx::responses::Profile);
void failedToFetchProfile();
}; };
class DeviceInfo class DeviceInfo
@ -205,6 +206,7 @@ signals:
void globalUsernameRetrieved(const QString &globalUser); void globalUsernameRetrieved(const QString &globalUser);
void devicesChanged(); void devicesChanged();
void ignoredChanged(); void ignoredChanged();
void failedToFetchProfile();
// internal // internal
void verificationStatiChanged(); void verificationStatiChanged();