Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F7890228
matrix-room.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
matrix-room.cpp
View Options
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2020-2023 Tusooa Zhu <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include
<libkazv-config.hpp>
#include
<immer/config.hpp>
// https://github.com/arximboldi/immer/issues/168
#include
<lager/setter.hpp>
#include
<nlohmann/json.hpp>
#include
<event.hpp>
#include
<QFile>
#include
<QMimeDatabase>
#include
"matrix-room.hpp"
#include
"matrix-room-timeline.hpp"
#include
"matrix-room-member.hpp"
#include
"helper.hpp"
MatrixRoom
::
MatrixRoom
(
Kazv
::
Room
room
,
QObject
*
parent
)
:
QObject
(
parent
)
,
m_room
(
room
)
,
m_memberNames
(
m_room
.
members
())
,
LAGER_QT
(
roomId
)(
m_room
.
roomId
().
xform
(
strToQt
))
,
LAGER_QT
(
name
)(
m_room
.
nameOpt
()[
lager
::
lenses
::
or_default
].
xform
(
strToQt
))
,
LAGER_QT
(
heroNames
)(
m_room
.
heroDisplayNames
().
xform
(
strListToQt
))
,
LAGER_QT
(
avatarMxcUri
)(
m_room
.
avatarMxcUri
().
xform
(
strToQt
))
,
LAGER_QT
(
localDraft
)(
lager
::
with_setter
(
m_room
.
localDraft
().
xform
(
strToQt
).
make
(),
[
this
](
QString
localDraft
)
{
m_room
.
setLocalDraft
(
localDraft
.
toStdString
());
},
lager
::
automatic_tag
{}))
,
LAGER_QT
(
memberNames
)(
m_memberNames
.
xform
(
strListToQt
))
{
}
MatrixRoom
::~
MatrixRoom
()
=
default
;
MatrixRoomTimeline
*
MatrixRoom::timeline
()
const
{
return
new
MatrixRoomTimeline
(
m_room
);
}
void
MatrixRoom::sendTextMessage
(
QString
text
)
const
{
m_room
.
sendTextMessage
(
text
.
toStdString
());
}
void
MatrixRoom::sendMediaFileMessage
(
QString
fileName
,
QString
mimeType
,
qint64
fileSize
,
QString
mxcUri
)
const
{
auto
j
=
makeMediaFileMessageJson
(
fileName
,
mimeType
,
fileSize
,
mxcUri
);
Kazv
::
Event
e
{
j
};
m_room
.
sendMessage
(
e
);
}
nlohmann
::
json
MatrixRoom::makeMediaFileMessageJson
(
QString
fileName
,
QString
mimeType
,
qint64
fileSize
,
QString
mxcUri
)
const
{
static
auto
available_msgtype
=
std
::
array
<
std
::
string
,
3
>
{
"m.audio"
,
"m.video"
,
"m.image"
};
auto
try_msgtype
=
std
::
find
(
available_msgtype
.
begin
(),
available_msgtype
.
end
(),
QStringLiteral
(
"m."
).
append
(
mimeType
.
split
(
QChar
(
'/'
))[
0
]).
toStdString
());
std
::
string
msgtype
;
if
(
try_msgtype
==
available_msgtype
.
end
())
{
msgtype
=
"m.file"
;
}
else
{
msgtype
=
*
try_msgtype
;
}
return
nlohmann
::
json
{
{
"type"
,
"m.room.message"
},
{
"content"
,
{
{
"msgtype"
,
msgtype
},
{
"body"
,
fileName
.
toStdString
()},
{
"url"
,
mxcUri
.
toStdString
()},
{
"info"
,
{
{
"size"
,
fileSize
},
{
"mimetype"
,
mimeType
.
toStdString
()}
}}
}}
};
}
MatrixRoomMember
*
MatrixRoom::memberAt
(
int
index
)
const
{
return
new
MatrixRoomMember
(
m_room
.
memberEventByCursor
(
m_memberNames
[
index
][
lager
::
lenses
::
or_default
]));
}
MatrixRoomMember
*
MatrixRoom::member
(
QString
userId
)
const
{
return
new
MatrixRoomMember
(
m_room
.
memberEventFor
(
userId
.
toStdString
()));
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Thu, Oct 2, 3:02 AM (15 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
472747
Default Alt Text
matrix-room.cpp (3 KB)
Attached To
Mode
rK kazv
Attached
Detach File
Event Timeline
Log In to Comment