mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Username can be edited by double clicking on text, added global user profile menu action in user info widget
This commit is contained in:
parent
5e3f513655
commit
87490c29cd
7 changed files with 84 additions and 68 deletions
|
@ -15,6 +15,7 @@ ApplicationWindow {
|
|||
minimumHeight: 420
|
||||
palette: colors
|
||||
color: colors.window
|
||||
title: profile.globalUserProfile ? "Global User Profile" : "Room User Profile"
|
||||
|
||||
ColumnLayout {
|
||||
id: contentL
|
||||
|
@ -33,13 +34,25 @@ ApplicationWindow {
|
|||
onClicked: TimelineManager.openImageOverlay(TimelineManager.timeline.avatarUrl(userid), TimelineManager.timeline.data.id)
|
||||
}
|
||||
|
||||
Label {
|
||||
TextInput {
|
||||
id: displayUsername
|
||||
readOnly: !profile.isUsernameEditingAllowed
|
||||
text: profile.displayName
|
||||
fontSizeMode: Text.HorizontalFit
|
||||
font.pixelSize: 20
|
||||
color: TimelineManager.userColor(profile.userid, colors.window)
|
||||
font.bold: true
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
focus: true
|
||||
|
||||
onEditingFinished: profile.changeUsername(displayUsername.text)
|
||||
|
||||
MouseArea {
|
||||
enabled: !profile.isUsernameEditingAllowed
|
||||
anchors.fill: parent
|
||||
onDoubleClicked: {
|
||||
profile.allowUsernameEditing(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MatrixText {
|
||||
|
@ -58,40 +71,6 @@ ApplicationWindow {
|
|||
onClicked: profile.verify()
|
||||
}
|
||||
|
||||
Button {
|
||||
id: changeUsername
|
||||
|
||||
text: (profile.roomid_ == "") ? qsTr("Change global username") : qsTr("Change room username")
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
enabled : profile.isSelf
|
||||
visible: profile.isSelf
|
||||
onClicked: changeUsernameDialog.open()
|
||||
|
||||
Dialog {
|
||||
id: changeUsernameDialog
|
||||
modal: true
|
||||
title: (profile.roomid_ == "") ? qsTr("Change global username") : qsTr("Change room username")
|
||||
onAccepted: profile.changeUsername(usernameEdit.text)
|
||||
|
||||
Column {
|
||||
anchors.fill: parent
|
||||
|
||||
Text {
|
||||
text: "New Username"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
TextField {
|
||||
id: usernameEdit
|
||||
focus: true
|
||||
wrapMode: TextEdit.Wrap
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
standardButtons: Dialog.Ok | Dialog.Cancel
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
Layout.preferredHeight: 16
|
||||
Layout.preferredWidth: 16
|
||||
|
|
|
@ -112,6 +112,10 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
connect(sidebarActions_, &SideBarActions::createRoom, this, &ChatPage::createRoom);
|
||||
|
||||
user_info_widget_ = new UserInfoWidget(sideBar_);
|
||||
connect(user_info_widget_, &UserInfoWidget::openGlobalUserProfile, this, [this]() {
|
||||
view_manager_->activeTimeline()->openUserProfile("", true);
|
||||
});
|
||||
|
||||
user_mentions_popup_ = new popups::UserMentions();
|
||||
room_list_ = new RoomList(userSettings, sideBar_);
|
||||
connect(room_list_, &RoomList::joinRoom, this, &ChatPage::joinRoom);
|
||||
|
|
|
@ -125,6 +125,10 @@ UserInfoWidget::UserInfoWidget(QWidget *parent)
|
|||
ChatPage::instance()->setStatus(text);
|
||||
});
|
||||
|
||||
auto userProfileAction = menu->addAction(tr("User Profile Settings"));
|
||||
connect(
|
||||
userProfileAction, &QAction::triggered, this, [this]() { emit openGlobalUserProfile(); });
|
||||
|
||||
#if 0 // disable presence menu until issues in synapse are resolved
|
||||
auto setAutoPresence = menu->addAction(tr("Set presence automatically"));
|
||||
connect(setAutoPresence, &QAction::triggered, this, []() {
|
||||
|
|
|
@ -51,6 +51,9 @@ protected:
|
|||
void paintEvent(QPaintEvent *event) override;
|
||||
void contextMenuEvent(QContextMenuEvent *) override;
|
||||
|
||||
signals:
|
||||
void openGlobalUserProfile();
|
||||
|
||||
private:
|
||||
Avatar *userAvatar_;
|
||||
|
||||
|
|
|
@ -801,7 +801,7 @@ TimelineModel::viewDecryptedRawMessage(QString id) const
|
|||
void
|
||||
TimelineModel::openUserProfile(QString userid, bool global)
|
||||
{
|
||||
emit openProfile(new UserProfile(global ? "" : room_id_, userid, manager_, this));
|
||||
emit openProfile(new UserProfile(global ? "" : room_id_, global ? utils::localUser() : userid, manager_, this));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -107,6 +107,12 @@ UserProfile::avatarUrl()
|
|||
return cache::avatarUrl(roomid_, userid_);
|
||||
}
|
||||
|
||||
bool
|
||||
UserProfile::globalUserProfile() const
|
||||
{
|
||||
return (roomid_ == "") && isSelf();
|
||||
}
|
||||
|
||||
bool
|
||||
UserProfile::getUserStatus()
|
||||
{
|
||||
|
@ -217,6 +223,16 @@ UserProfile::startChat()
|
|||
void
|
||||
UserProfile::changeUsername(QString username)
|
||||
{
|
||||
if (globalUserProfile()) {
|
||||
// change global
|
||||
http::client()->set_displayname(
|
||||
username.toStdString(), [this]( mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("could not change username");
|
||||
return;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// change room username
|
||||
mtx::events::state::Member member;
|
||||
member.display_name = username.toStdString();
|
||||
|
@ -226,30 +242,18 @@ UserProfile::changeUsername(QString username)
|
|||
.toStdString();
|
||||
member.membership = mtx::events::state::Membership::Join;
|
||||
|
||||
http::client()->send_state_event(roomid_.toStdString(),
|
||||
http::client()->send_state_event(
|
||||
roomid_.toStdString(),
|
||||
http::client()->user_id().to_string(),
|
||||
member,
|
||||
[](mtx::responses::EventId, mtx::http::RequestErr err) {
|
||||
if (err)
|
||||
nhlog::net()->error(
|
||||
"Failed to set room displayname: {}",
|
||||
nhlog::net()->error("Failed to set room displayname: {}",
|
||||
err->matrix_error.error);
|
||||
});
|
||||
|
||||
/*connect(modal, &EditModal::nameChanged, this, [this](const QString &newName) {
|
||||
if (roomNameLabel_)
|
||||
roomNameLabel_->setText(newName);
|
||||
});*/
|
||||
|
||||
/*std::string newName = "jedi18";
|
||||
// change user name
|
||||
http::client()->set_displayname(
|
||||
newName, [this]( mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("could not change username");
|
||||
return;
|
||||
}
|
||||
});*/
|
||||
|
||||
allowUsernameEditing(false);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -267,3 +271,16 @@ UserProfile::unverify(QString device)
|
|||
{
|
||||
cache::markDeviceUnverified(userid_.toStdString(), device.toStdString());
|
||||
}
|
||||
|
||||
void
|
||||
UserProfile::allowUsernameEditing(bool allow)
|
||||
{
|
||||
usernameEditing = allow;
|
||||
emit usernameEditingChanged();
|
||||
}
|
||||
|
||||
bool
|
||||
UserProfile::isUsernameEditingAllowed() const
|
||||
{
|
||||
return usernameEditing;
|
||||
}
|
||||
|
|
|
@ -83,10 +83,13 @@ class UserProfile : public QObject
|
|||
Q_PROPERTY(QString userid READ userid CONSTANT)
|
||||
Q_PROPERTY(QString avatarUrl READ avatarUrl CONSTANT)
|
||||
Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList CONSTANT)
|
||||
Q_PROPERTY(bool globalUserProfile READ globalUserProfile CONSTANT)
|
||||
Q_PROPERTY(bool isUserVerified READ getUserStatus NOTIFY userStatusChanged)
|
||||
Q_PROPERTY(
|
||||
bool userVerificationEnabled READ userVerificationEnabled NOTIFY userStatusChanged)
|
||||
Q_PROPERTY(bool isSelf READ isSelf CONSTANT)
|
||||
Q_PROPERTY(
|
||||
bool isUsernameEditingAllowed READ isUsernameEditingAllowed NOTIFY usernameEditingChanged)
|
||||
public:
|
||||
UserProfile(QString roomid,
|
||||
QString userid,
|
||||
|
@ -98,9 +101,11 @@ public:
|
|||
QString userid();
|
||||
QString displayName();
|
||||
QString avatarUrl();
|
||||
bool globalUserProfile() const;
|
||||
bool getUserStatus();
|
||||
bool userVerificationEnabled() const;
|
||||
bool isSelf() const;
|
||||
bool isUsernameEditingAllowed() const;
|
||||
|
||||
Q_INVOKABLE void verify(QString device = "");
|
||||
Q_INVOKABLE void unverify(QString device = "");
|
||||
|
@ -110,15 +115,19 @@ public:
|
|||
Q_INVOKABLE void kickUser();
|
||||
Q_INVOKABLE void startChat();
|
||||
Q_INVOKABLE void changeUsername(QString username);
|
||||
Q_INVOKABLE void allowUsernameEditing(bool allow);
|
||||
|
||||
signals:
|
||||
void userStatusChanged();
|
||||
|
||||
void usernameEditingChanged();
|
||||
|
||||
private:
|
||||
QString roomid_, userid_;
|
||||
DeviceInfoModel deviceList_;
|
||||
bool isUserVerified = false;
|
||||
bool hasMasterKey = false;
|
||||
bool usernameEditing = false;
|
||||
TimelineViewManager *manager;
|
||||
TimelineModel *model;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue