Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
13 KB
Referenced Files
None
Subscribers
None
diff --git a/src/contents/ui/Bubble.qml b/src/contents/ui/Bubble.qml
index 53695c0..02a0899 100644
--- a/src/contents/ui/Bubble.qml
+++ b/src/contents/ui/Bubble.qml
@@ -1,46 +1,46 @@
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
Kirigami.AbstractCard {
id: upper
default property var children
readonly property var bubbleSpacing: leftPadding + rightPadding
Layout.fillWidth: false
contentItem: RowLayout {
anchors.left: parent.left
anchors.right: parent.right
property var encryptedIcon: Kirigami.Icon {
- source: 'lock'
- height: iconSize
- width: iconSize
+ source: 'emblem-encrypted-locked'
+ Layout.preferredHeight: inlineBadgeSize
+ Layout.preferredWidth: inlineBadgeSize
}
data: [
...(event && event.encrypted ? [encryptedIcon] : []),
...(Array.isArray(upper.children) ? upper.children :
upper.children ? [upper.children] : [])
]
}
}
diff --git a/src/contents/ui/EventView.qml b/src/contents/ui/EventView.qml
index 8a3d46c..ed35a00 100644
--- a/src/contents/ui/EventView.qml
+++ b/src/contents/ui/EventView.qml
@@ -1,208 +1,209 @@
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import Qt.labs.qmlmodels 1.0
import org.kde.kirigami 2.13 as Kirigami
import 'event-types' as Types
Item {
id: eventView
property var event
property var sender
property var stateKeyUser
property var messageType: getMessageType(event)
property var iconSize: Kirigami.Units.iconSizes.large
+ property var inlineBadgeSize: Kirigami.Units.iconSizes.smallMedium
property var senderNameSize: Kirigami.Units.gridUnit * 1.2
height: loader.item.implicitHeight
anchors.left: parent.left
anchors.right: parent.right
//padding: Kirigami.Units.largeSpacing
Component {
id: textEV
Types.Text {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: emoteEV
Types.Emote {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: noticeEV
Types.Notice {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: stateEV
Types.State {
event: eventView.event
sender: eventView.sender
stateKeyUser: eventView.stateKeyUser
}
}
Component {
id: imageEV
Types.Image {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: fileEV
Types.File {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: videoEV
Types.Video {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: audioEV
Types.Audio {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: unknownEV
Label {
text: 'unknown event'
}
}
/* ColumnLayout { */
/* id: layout */
/* anchors.left: eventView.left */
/* anchors.right: eventView.right */
/* } */
Loader {
sourceComponent: getSource(messageType)
id: loader
/* onLoaded: { */
/* item.parent = layout; */
/* } */
anchors.left: eventView.left
anchors.right: eventView.right
}
function getSource(t) {
switch (t) {
case 'text':
return textEV;
case 'emote':
return emoteEV;
case 'notice':
return noticeEV;
case 'state':
return stateEV;
case 'image':
return imageEV;
case 'file':
return fileEV;
case 'video':
return videoEV;
case 'audio':
return audioEV;
default:
return unknownEV;
}
}
function getMessageType(e) {
if (e.isState) {
return 'state';
}
switch (e.type) {
case 'm.room.message':
switch (e.content.msgtype) {
case 'm.text':
console.log('msg type=text');
return 'text';
case 'm.emote':
return 'emote';
case 'm.notice':
return 'notice';
case 'm.image':
return 'image';
case 'm.file':
return 'file';
case 'm.audio':
return 'audio';
case 'm.video':
return 'video';
case 'm.location':
return 'location';
default:
console.log('msg type=unknown');
return 'unknown';
}
default:
console.log('msg type=unknown');
return 'unknown';
}
}
}
diff --git a/src/contents/ui/event-types/Emote.qml b/src/contents/ui/event-types/Emote.qml
index 2ae845d..a96c279 100644
--- a/src/contents/ui/event-types/Emote.qml
+++ b/src/contents/ui/event-types/Emote.qml
@@ -1,39 +1,42 @@
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
import '.' as Types
Types.TextTemplate {
id: upper
text: getText()
- Label {
- text: '*'
+
+ Kirigami.Icon {
+ source: 'package-new'
+ Layout.preferredHeight: inlineBadgeSize
+ Layout.preferredWidth: inlineBadgeSize
}
function getText() {
return event.content.body;
}
}
diff --git a/src/contents/ui/event-types/State.qml b/src/contents/ui/event-types/State.qml
index f03eda6..efcfbe7 100644
--- a/src/contents/ui/event-types/State.qml
+++ b/src/contents/ui/event-types/State.qml
@@ -1,127 +1,153 @@
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
import '.' as Types
Types.TextTemplate {
id: upper
text: getText()
property var stateKeyUser
property var gender: 'neutral'
property var stateKeyUserGender: 'neutral'
- Label {
- text: '->'
+ Kirigami.Icon {
+ source: getIcon()
+ Layout.preferredHeight: inlineBadgeSize
+ Layout.preferredWidth: inlineBadgeSize
+ }
+
+ function getIcon() {
+ switch (event.type) {
+ case 'm.room.member':
+ const newState = event.content.membership;
+ // If there were no previous content, we consider that the room
+ // never knew this member.
+ const prevContent = event.unsignedData.prev_content || {};
+ const oldState = prevContent.membership || 'leave';
+ // Someone changing their own member state
+ const isSelfSent = event.stateKey === event.sender;
+
+ if (newState === 'join' && oldState !== 'join') {
+ return 'list-add-user';
+ } else if (newState === 'leave' || newState === 'ban') {
+ return isSelfSent ? 'list-remove-user' : 'im-kick-user';
+ } else {
+ return 'im-user';
+ }
+
+ default:
+ return 'emblem-information';
+ }
}
function getText() {
switch (event.type) {
case 'm.room.member':
return getMemberChange();
case 'm.room.create':
return l10n.get('state-room-created', { gender });
case 'm.room.canonical_alias':
return l10n.get('state-room-alias-changed', { gender });
case 'm.room.join_rules':
return l10n.get('state-room-join-rules-changed', { gender });
case 'm.room.power_levels':
return l10n.get('state-room-power-levels-changed', { gender });
case 'm.room.name':
return l10n.get('state-room-name-changed', { gender, newName: event.content.name });
case 'm.room.topic':
return l10n.get('state-room-topic-changed', { gender, newTopic: event.content.topic });
case 'm.room.avatar':
return l10n.get('state-room-avatar-changed', { gender });
case 'm.room.pinned_events':
return l10n.get('state-room-pinned-events-changed', { gender });
case 'm.room.encryption':
return l10n.get('state-room-encryption-activated', { gender });
default:
return event.content.body;
}
}
function getMemberChange() {
const newState = event.content.membership;
// If there were no previous content, we consider that the room
// never knew this member.
const prevContent = event.unsignedData.prev_content || {};
const oldState = prevContent.membership || 'leave';
// Someone changing their own member state
const isSelfSent = event.stateKey === event.sender;
if (newState === 'join') {
if (oldState !== 'join') {
return l10n.get('member-state-joined-room', { gender });
} else {
const nameChanged = event.content.displayname !== prevContent.displayname;
const avatarChanged = event.content.avatar_url !== prevContent.avatar_url;
if (nameChanged && avatarChanged) {
return l10n.get('member-state-changed-name-and-avatar', { gender });
} else if (nameChanged) {
return l10n.get('member-state-changed-name', { gender });
} else if (avatarChanged) {
return l10n.get('member-state-changed-avatar', { gender });
} else {
return ''; // stayed in the room without name/avatar change. should not happen
}
}
} else if (newState === 'invite') {
return l10n.get('member-state-invited', { gender,
stateKeyUser: stateKeyUser.displayname,
stateKeyUserGender
});
} else if (newState === 'left') {
if (oldState === 'ban') {
return l10n.get('member-state-unbanned', { gender,
stateKeyUser: stateKeyUser.displayname,
stateKeyUserGender
});
} else if (isSelfSent) {
return l10n.get('member-state-left', { gender });
} else {
return l10n.get('member-state-kicked', { gender,
stateKeyUser: stateKeyUser.displayname,
stateKeyUserGender
});
}
} else if (newState === 'ban') {
return l10n.get('member-state-banned', { gender,
stateKeyUser: stateKeyUser.displayname,
stateKeyUserGender
});
}
return ''; // not implemented
}
}

File Metadata

Mime Type
text/x-diff
Expires
Fri, Oct 30, 1:24 AM (1 d, 3 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1799092
Default Alt Text
(13 KB)

Event Timeline